You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
crypto: aead - Remove old AEAD interfaces
Now that the AEAD conversion is complete we can rip out the old AEAD interafce and associated code. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
+9
-597
File diff suppressed because it is too large
Load Diff
+14
-134
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* AEAD: Authenticated Encryption with Associated Data
|
||||
*
|
||||
* Copyright (c) 2007 Herbert Xu <herbert@gondor.apana.org.au>
|
||||
* Copyright (c) 2007-2015 Herbert Xu <herbert@gondor.apana.org.au>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
@@ -71,14 +71,14 @@
|
||||
* in the first scatter gather list entry pointing to a NULL buffer.
|
||||
*/
|
||||
|
||||
struct crypto_aead;
|
||||
|
||||
/**
|
||||
* struct aead_request - AEAD request
|
||||
* @base: Common attributes for async crypto requests
|
||||
* @old: Boolean whether the old or new AEAD API is used
|
||||
* @assoclen: Length in bytes of associated data for authentication
|
||||
* @cryptlen: Length of data to be encrypted or decrypted
|
||||
* @iv: Initialisation vector
|
||||
* @assoc: Associated data
|
||||
* @src: Source data
|
||||
* @dst: Destination data
|
||||
* @__ctx: Start of private context data
|
||||
@@ -86,33 +86,17 @@
|
||||
struct aead_request {
|
||||
struct crypto_async_request base;
|
||||
|
||||
bool old;
|
||||
|
||||
unsigned int assoclen;
|
||||
unsigned int cryptlen;
|
||||
|
||||
u8 *iv;
|
||||
|
||||
struct scatterlist *assoc;
|
||||
struct scatterlist *src;
|
||||
struct scatterlist *dst;
|
||||
|
||||
void *__ctx[] CRYPTO_MINALIGN_ATTR;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct aead_givcrypt_request - AEAD request with IV generation
|
||||
* @seq: Sequence number for IV generation
|
||||
* @giv: Space for generated IV
|
||||
* @areq: The AEAD request itself
|
||||
*/
|
||||
struct aead_givcrypt_request {
|
||||
u64 seq;
|
||||
u8 *giv;
|
||||
|
||||
struct aead_request areq;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct aead_alg - AEAD cipher definition
|
||||
* @maxauthsize: Set the maximum authentication tag size supported by the
|
||||
@@ -165,16 +149,6 @@ struct aead_alg {
|
||||
};
|
||||
|
||||
struct crypto_aead {
|
||||
int (*setkey)(struct crypto_aead *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
int (*setauthsize)(struct crypto_aead *tfm, unsigned int authsize);
|
||||
int (*encrypt)(struct aead_request *req);
|
||||
int (*decrypt)(struct aead_request *req);
|
||||
int (*givencrypt)(struct aead_givcrypt_request *req);
|
||||
int (*givdecrypt)(struct aead_givcrypt_request *req);
|
||||
|
||||
struct crypto_aead *child;
|
||||
|
||||
unsigned int authsize;
|
||||
unsigned int reqsize;
|
||||
|
||||
@@ -216,16 +190,6 @@ static inline void crypto_free_aead(struct crypto_aead *tfm)
|
||||
crypto_destroy_tfm(tfm, crypto_aead_tfm(tfm));
|
||||
}
|
||||
|
||||
static inline struct crypto_aead *crypto_aead_crt(struct crypto_aead *tfm)
|
||||
{
|
||||
return tfm;
|
||||
}
|
||||
|
||||
static inline struct old_aead_alg *crypto_old_aead_alg(struct crypto_aead *tfm)
|
||||
{
|
||||
return &crypto_aead_tfm(tfm)->__crt_alg->cra_aead;
|
||||
}
|
||||
|
||||
static inline struct aead_alg *crypto_aead_alg(struct crypto_aead *tfm)
|
||||
{
|
||||
return container_of(crypto_aead_tfm(tfm)->__crt_alg,
|
||||
@@ -234,8 +198,7 @@ static inline struct aead_alg *crypto_aead_alg(struct crypto_aead *tfm)
|
||||
|
||||
static inline unsigned int crypto_aead_alg_ivsize(struct aead_alg *alg)
|
||||
{
|
||||
return alg->base.cra_aead.encrypt ? alg->base.cra_aead.ivsize :
|
||||
alg->ivsize;
|
||||
return alg->ivsize;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -361,7 +324,7 @@ static inline struct crypto_aead *crypto_aead_reqtfm(struct aead_request *req)
|
||||
*/
|
||||
static inline int crypto_aead_encrypt(struct aead_request *req)
|
||||
{
|
||||
return crypto_aead_reqtfm(req)->encrypt(req);
|
||||
return crypto_aead_alg(crypto_aead_reqtfm(req))->encrypt(req);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -388,10 +351,12 @@ static inline int crypto_aead_encrypt(struct aead_request *req)
|
||||
*/
|
||||
static inline int crypto_aead_decrypt(struct aead_request *req)
|
||||
{
|
||||
if (req->cryptlen < crypto_aead_authsize(crypto_aead_reqtfm(req)))
|
||||
struct crypto_aead *aead = crypto_aead_reqtfm(req);
|
||||
|
||||
if (req->cryptlen < crypto_aead_authsize(aead))
|
||||
return -EINVAL;
|
||||
|
||||
return crypto_aead_reqtfm(req)->decrypt(req);
|
||||
return crypto_aead_alg(aead)->decrypt(req);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -411,7 +376,10 @@ static inline int crypto_aead_decrypt(struct aead_request *req)
|
||||
*
|
||||
* Return: number of bytes
|
||||
*/
|
||||
unsigned int crypto_aead_reqsize(struct crypto_aead *tfm);
|
||||
static inline unsigned int crypto_aead_reqsize(struct crypto_aead *tfm)
|
||||
{
|
||||
return tfm->reqsize;
|
||||
}
|
||||
|
||||
/**
|
||||
* aead_request_set_tfm() - update cipher handle reference in request
|
||||
@@ -424,7 +392,7 @@ unsigned int crypto_aead_reqsize(struct crypto_aead *tfm);
|
||||
static inline void aead_request_set_tfm(struct aead_request *req,
|
||||
struct crypto_aead *tfm)
|
||||
{
|
||||
req->base.tfm = crypto_aead_tfm(tfm->child);
|
||||
req->base.tfm = crypto_aead_tfm(tfm);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -549,23 +517,6 @@ static inline void aead_request_set_crypt(struct aead_request *req,
|
||||
req->iv = iv;
|
||||
}
|
||||
|
||||
/**
|
||||
* aead_request_set_assoc() - set the associated data scatter / gather list
|
||||
* @req: request handle
|
||||
* @assoc: associated data scatter / gather list
|
||||
* @assoclen: number of bytes to process from @assoc
|
||||
*
|
||||
* Obsolete, do not use.
|
||||
*/
|
||||
static inline void aead_request_set_assoc(struct aead_request *req,
|
||||
struct scatterlist *assoc,
|
||||
unsigned int assoclen)
|
||||
{
|
||||
req->assoc = assoc;
|
||||
req->assoclen = assoclen;
|
||||
req->old = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* aead_request_set_ad - set associated data information
|
||||
* @req: request handle
|
||||
@@ -578,77 +529,6 @@ static inline void aead_request_set_ad(struct aead_request *req,
|
||||
unsigned int assoclen)
|
||||
{
|
||||
req->assoclen = assoclen;
|
||||
req->old = false;
|
||||
}
|
||||
|
||||
static inline struct crypto_aead *aead_givcrypt_reqtfm(
|
||||
struct aead_givcrypt_request *req)
|
||||
{
|
||||
return crypto_aead_reqtfm(&req->areq);
|
||||
}
|
||||
|
||||
static inline int crypto_aead_givencrypt(struct aead_givcrypt_request *req)
|
||||
{
|
||||
return aead_givcrypt_reqtfm(req)->givencrypt(req);
|
||||
};
|
||||
|
||||
static inline int crypto_aead_givdecrypt(struct aead_givcrypt_request *req)
|
||||
{
|
||||
return aead_givcrypt_reqtfm(req)->givdecrypt(req);
|
||||
};
|
||||
|
||||
static inline void aead_givcrypt_set_tfm(struct aead_givcrypt_request *req,
|
||||
struct crypto_aead *tfm)
|
||||
{
|
||||
req->areq.base.tfm = crypto_aead_tfm(tfm);
|
||||
}
|
||||
|
||||
static inline struct aead_givcrypt_request *aead_givcrypt_alloc(
|
||||
struct crypto_aead *tfm, gfp_t gfp)
|
||||
{
|
||||
struct aead_givcrypt_request *req;
|
||||
|
||||
req = kmalloc(sizeof(struct aead_givcrypt_request) +
|
||||
crypto_aead_reqsize(tfm), gfp);
|
||||
|
||||
if (likely(req))
|
||||
aead_givcrypt_set_tfm(req, tfm);
|
||||
|
||||
return req;
|
||||
}
|
||||
|
||||
static inline void aead_givcrypt_free(struct aead_givcrypt_request *req)
|
||||
{
|
||||
kfree(req);
|
||||
}
|
||||
|
||||
static inline void aead_givcrypt_set_callback(
|
||||
struct aead_givcrypt_request *req, u32 flags,
|
||||
crypto_completion_t compl, void *data)
|
||||
{
|
||||
aead_request_set_callback(&req->areq, flags, compl, data);
|
||||
}
|
||||
|
||||
static inline void aead_givcrypt_set_crypt(struct aead_givcrypt_request *req,
|
||||
struct scatterlist *src,
|
||||
struct scatterlist *dst,
|
||||
unsigned int nbytes, void *iv)
|
||||
{
|
||||
aead_request_set_crypt(&req->areq, src, dst, nbytes, iv);
|
||||
}
|
||||
|
||||
static inline void aead_givcrypt_set_assoc(struct aead_givcrypt_request *req,
|
||||
struct scatterlist *assoc,
|
||||
unsigned int assoclen)
|
||||
{
|
||||
aead_request_set_assoc(&req->areq, assoc, assoclen);
|
||||
}
|
||||
|
||||
static inline void aead_givcrypt_set_giv(struct aead_givcrypt_request *req,
|
||||
u8 *giv, u64 seq)
|
||||
{
|
||||
req->giv = giv;
|
||||
req->seq = seq;
|
||||
}
|
||||
|
||||
#endif /* _CRYPTO_AEAD_H */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* AEAD: Authenticated Encryption with Associated Data
|
||||
*
|
||||
* Copyright (c) 2007 Herbert Xu <herbert@gondor.apana.org.au>
|
||||
* Copyright (c) 2007-2015 Herbert Xu <herbert@gondor.apana.org.au>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
@@ -39,20 +39,11 @@ struct aead_queue {
|
||||
struct crypto_queue base;
|
||||
};
|
||||
|
||||
extern const struct crypto_type crypto_aead_type;
|
||||
extern const struct crypto_type crypto_nivaead_type;
|
||||
|
||||
static inline void *crypto_aead_ctx(struct crypto_aead *tfm)
|
||||
{
|
||||
return crypto_tfm_ctx(&tfm->base);
|
||||
}
|
||||
|
||||
static inline struct crypto_instance *crypto_aead_alg_instance(
|
||||
struct crypto_aead *aead)
|
||||
{
|
||||
return crypto_tfm_alg_instance(&aead->base);
|
||||
}
|
||||
|
||||
static inline struct crypto_instance *aead_crypto_instance(
|
||||
struct aead_instance *inst)
|
||||
{
|
||||
@@ -66,7 +57,7 @@ static inline struct aead_instance *aead_instance(struct crypto_instance *inst)
|
||||
|
||||
static inline struct aead_instance *aead_alg_instance(struct crypto_aead *aead)
|
||||
{
|
||||
return aead_instance(crypto_aead_alg_instance(aead));
|
||||
return aead_instance(crypto_tfm_alg_instance(&aead->base));
|
||||
}
|
||||
|
||||
static inline void *aead_instance_ctx(struct aead_instance *inst)
|
||||
@@ -95,8 +86,6 @@ static inline void crypto_set_aead_spawn(
|
||||
crypto_set_spawn(&spawn->base, inst);
|
||||
}
|
||||
|
||||
struct crypto_alg *crypto_lookup_aead(const char *name, u32 type, u32 mask);
|
||||
|
||||
int crypto_grab_aead(struct crypto_aead_spawn *spawn, const char *name,
|
||||
u32 type, u32 mask);
|
||||
|
||||
@@ -105,12 +94,6 @@ static inline void crypto_drop_aead(struct crypto_aead_spawn *spawn)
|
||||
crypto_drop_spawn(&spawn->base);
|
||||
}
|
||||
|
||||
static inline struct crypto_alg *crypto_aead_spawn_alg(
|
||||
struct crypto_aead_spawn *spawn)
|
||||
{
|
||||
return spawn->base.alg;
|
||||
}
|
||||
|
||||
static inline struct aead_alg *crypto_spawn_aead_alg(
|
||||
struct crypto_aead_spawn *spawn)
|
||||
{
|
||||
@@ -123,32 +106,15 @@ static inline struct crypto_aead *crypto_spawn_aead(
|
||||
return crypto_spawn_tfm2(&spawn->base);
|
||||
}
|
||||
|
||||
static inline struct crypto_aead *aead_geniv_base(struct crypto_aead *geniv)
|
||||
{
|
||||
return geniv->child;
|
||||
}
|
||||
|
||||
static inline void *aead_givcrypt_reqctx(struct aead_givcrypt_request *req)
|
||||
{
|
||||
return aead_request_ctx(&req->areq);
|
||||
}
|
||||
|
||||
static inline void aead_givcrypt_complete(struct aead_givcrypt_request *req,
|
||||
int err)
|
||||
{
|
||||
aead_request_complete(&req->areq, err);
|
||||
}
|
||||
|
||||
static inline void crypto_aead_set_reqsize(struct crypto_aead *aead,
|
||||
unsigned int reqsize)
|
||||
{
|
||||
crypto_aead_crt(aead)->reqsize = reqsize;
|
||||
aead->reqsize = reqsize;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_aead_alg_maxauthsize(struct aead_alg *alg)
|
||||
{
|
||||
return alg->base.cra_aead.encrypt ? alg->base.cra_aead.maxauthsize :
|
||||
alg->maxauthsize;
|
||||
return alg->maxauthsize;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_aead_maxauthsize(struct crypto_aead *aead)
|
||||
|
||||
@@ -27,8 +27,6 @@ struct aead_geniv_ctx {
|
||||
struct aead_instance *aead_geniv_alloc(struct crypto_template *tmpl,
|
||||
struct rtattr **tb, u32 type, u32 mask);
|
||||
void aead_geniv_free(struct aead_instance *inst);
|
||||
int aead_geniv_init(struct crypto_tfm *tfm);
|
||||
void aead_geniv_exit(struct crypto_tfm *tfm);
|
||||
int aead_init_geniv(struct crypto_aead *tfm);
|
||||
void aead_exit_geniv(struct crypto_aead *tfm);
|
||||
|
||||
|
||||
+1
-47
@@ -142,13 +142,10 @@
|
||||
struct scatterlist;
|
||||
struct crypto_ablkcipher;
|
||||
struct crypto_async_request;
|
||||
struct crypto_aead;
|
||||
struct crypto_blkcipher;
|
||||
struct crypto_hash;
|
||||
struct crypto_tfm;
|
||||
struct crypto_type;
|
||||
struct aead_request;
|
||||
struct aead_givcrypt_request;
|
||||
struct skcipher_givcrypt_request;
|
||||
|
||||
typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err);
|
||||
@@ -274,47 +271,6 @@ struct ablkcipher_alg {
|
||||
unsigned int ivsize;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct old_aead_alg - AEAD cipher definition
|
||||
* @maxauthsize: Set the maximum authentication tag size supported by the
|
||||
* transformation. A transformation may support smaller tag sizes.
|
||||
* As the authentication tag is a message digest to ensure the
|
||||
* integrity of the encrypted data, a consumer typically wants the
|
||||
* largest authentication tag possible as defined by this
|
||||
* variable.
|
||||
* @setauthsize: Set authentication size for the AEAD transformation. This
|
||||
* function is used to specify the consumer requested size of the
|
||||
* authentication tag to be either generated by the transformation
|
||||
* during encryption or the size of the authentication tag to be
|
||||
* supplied during the decryption operation. This function is also
|
||||
* responsible for checking the authentication tag size for
|
||||
* validity.
|
||||
* @setkey: see struct ablkcipher_alg
|
||||
* @encrypt: see struct ablkcipher_alg
|
||||
* @decrypt: see struct ablkcipher_alg
|
||||
* @givencrypt: see struct ablkcipher_alg
|
||||
* @givdecrypt: see struct ablkcipher_alg
|
||||
* @geniv: see struct ablkcipher_alg
|
||||
* @ivsize: see struct ablkcipher_alg
|
||||
*
|
||||
* All fields except @givencrypt , @givdecrypt , @geniv and @ivsize are
|
||||
* mandatory and must be filled.
|
||||
*/
|
||||
struct old_aead_alg {
|
||||
int (*setkey)(struct crypto_aead *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
int (*setauthsize)(struct crypto_aead *tfm, unsigned int authsize);
|
||||
int (*encrypt)(struct aead_request *req);
|
||||
int (*decrypt)(struct aead_request *req);
|
||||
int (*givencrypt)(struct aead_givcrypt_request *req);
|
||||
int (*givdecrypt)(struct aead_givcrypt_request *req);
|
||||
|
||||
const char *geniv;
|
||||
|
||||
unsigned int ivsize;
|
||||
unsigned int maxauthsize;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct blkcipher_alg - synchronous block cipher definition
|
||||
* @min_keysize: see struct ablkcipher_alg
|
||||
@@ -409,7 +365,6 @@ struct compress_alg {
|
||||
|
||||
|
||||
#define cra_ablkcipher cra_u.ablkcipher
|
||||
#define cra_aead cra_u.aead
|
||||
#define cra_blkcipher cra_u.blkcipher
|
||||
#define cra_cipher cra_u.cipher
|
||||
#define cra_compress cra_u.compress
|
||||
@@ -460,7 +415,7 @@ struct compress_alg {
|
||||
* struct crypto_type, which implements callbacks common for all
|
||||
* transformation types. There are multiple options:
|
||||
* &crypto_blkcipher_type, &crypto_ablkcipher_type,
|
||||
* &crypto_ahash_type, &crypto_aead_type, &crypto_rng_type.
|
||||
* &crypto_ahash_type, &crypto_rng_type.
|
||||
* This field might be empty. In that case, there are no common
|
||||
* callbacks. This is the case for: cipher, compress, shash.
|
||||
* @cra_u: Callbacks implementing the transformation. This is a union of
|
||||
@@ -508,7 +463,6 @@ struct crypto_alg {
|
||||
|
||||
union {
|
||||
struct ablkcipher_alg ablkcipher;
|
||||
struct old_aead_alg aead;
|
||||
struct blkcipher_alg blkcipher;
|
||||
struct cipher_alg cipher;
|
||||
struct compress_alg compress;
|
||||
|
||||
Reference in New Issue
Block a user