Commit b0d955ba authored by Herbert Xu's avatar Herbert Xu

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: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 0a139416
This diff is collapsed.
/* /*
* AEAD: Authenticated Encryption with Associated Data * 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 * 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 * under the terms of the GNU General Public License as published by the Free
...@@ -71,14 +71,14 @@ ...@@ -71,14 +71,14 @@
* in the first scatter gather list entry pointing to a NULL buffer. * in the first scatter gather list entry pointing to a NULL buffer.
*/ */
struct crypto_aead;
/** /**
* struct aead_request - AEAD request * struct aead_request - AEAD request
* @base: Common attributes for async crypto requests * @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 * @assoclen: Length in bytes of associated data for authentication
* @cryptlen: Length of data to be encrypted or decrypted * @cryptlen: Length of data to be encrypted or decrypted
* @iv: Initialisation vector * @iv: Initialisation vector
* @assoc: Associated data
* @src: Source data * @src: Source data
* @dst: Destination data * @dst: Destination data
* @__ctx: Start of private context data * @__ctx: Start of private context data
...@@ -86,33 +86,17 @@ ...@@ -86,33 +86,17 @@
struct aead_request { struct aead_request {
struct crypto_async_request base; struct crypto_async_request base;
bool old;
unsigned int assoclen; unsigned int assoclen;
unsigned int cryptlen; unsigned int cryptlen;
u8 *iv; u8 *iv;
struct scatterlist *assoc;
struct scatterlist *src; struct scatterlist *src;
struct scatterlist *dst; struct scatterlist *dst;
void *__ctx[] CRYPTO_MINALIGN_ATTR; 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 * struct aead_alg - AEAD cipher definition
* @maxauthsize: Set the maximum authentication tag size supported by the * @maxauthsize: Set the maximum authentication tag size supported by the
...@@ -165,16 +149,6 @@ struct aead_alg { ...@@ -165,16 +149,6 @@ struct aead_alg {
}; };
struct crypto_aead { 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 authsize;
unsigned int reqsize; unsigned int reqsize;
...@@ -216,16 +190,6 @@ static inline void crypto_free_aead(struct crypto_aead *tfm) ...@@ -216,16 +190,6 @@ static inline void crypto_free_aead(struct crypto_aead *tfm)
crypto_destroy_tfm(tfm, crypto_aead_tfm(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) static inline struct aead_alg *crypto_aead_alg(struct crypto_aead *tfm)
{ {
return container_of(crypto_aead_tfm(tfm)->__crt_alg, 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) ...@@ -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) static inline unsigned int crypto_aead_alg_ivsize(struct aead_alg *alg)
{ {
return alg->base.cra_aead.encrypt ? alg->base.cra_aead.ivsize : return alg->ivsize;
alg->ivsize;
} }
/** /**
...@@ -361,7 +324,7 @@ static inline struct crypto_aead *crypto_aead_reqtfm(struct aead_request *req) ...@@ -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) 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) ...@@ -388,10 +351,12 @@ static inline int crypto_aead_encrypt(struct aead_request *req)
*/ */
static inline int crypto_aead_decrypt(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 -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) ...@@ -411,7 +376,10 @@ static inline int crypto_aead_decrypt(struct aead_request *req)
* *
* Return: number of bytes * 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 * aead_request_set_tfm() - update cipher handle reference in request
...@@ -424,7 +392,7 @@ unsigned int crypto_aead_reqsize(struct crypto_aead *tfm); ...@@ -424,7 +392,7 @@ unsigned int crypto_aead_reqsize(struct crypto_aead *tfm);
static inline void aead_request_set_tfm(struct aead_request *req, static inline void aead_request_set_tfm(struct aead_request *req,
struct crypto_aead *tfm) 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, ...@@ -549,23 +517,6 @@ static inline void aead_request_set_crypt(struct aead_request *req,
req->iv = iv; 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 * aead_request_set_ad - set associated data information
* @req: request handle * @req: request handle
...@@ -578,77 +529,6 @@ static inline void aead_request_set_ad(struct aead_request *req, ...@@ -578,77 +529,6 @@ static inline void aead_request_set_ad(struct aead_request *req,
unsigned int assoclen) unsigned int assoclen)
{ {
req->assoclen = 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 */ #endif /* _CRYPTO_AEAD_H */
/* /*
* AEAD: Authenticated Encryption with Associated Data * 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 * 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 * under the terms of the GNU General Public License as published by the Free
...@@ -39,20 +39,11 @@ struct aead_queue { ...@@ -39,20 +39,11 @@ struct aead_queue {
struct crypto_queue base; 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) static inline void *crypto_aead_ctx(struct crypto_aead *tfm)
{ {
return crypto_tfm_ctx(&tfm->base); 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( static inline struct crypto_instance *aead_crypto_instance(
struct aead_instance *inst) struct aead_instance *inst)
{ {
...@@ -66,7 +57,7 @@ static inline struct aead_instance *aead_instance(struct crypto_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) 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) static inline void *aead_instance_ctx(struct aead_instance *inst)
...@@ -95,8 +86,6 @@ static inline void crypto_set_aead_spawn( ...@@ -95,8 +86,6 @@ static inline void crypto_set_aead_spawn(
crypto_set_spawn(&spawn->base, inst); 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, int crypto_grab_aead(struct crypto_aead_spawn *spawn, const char *name,
u32 type, u32 mask); u32 type, u32 mask);
...@@ -105,12 +94,6 @@ static inline void crypto_drop_aead(struct crypto_aead_spawn *spawn) ...@@ -105,12 +94,6 @@ static inline void crypto_drop_aead(struct crypto_aead_spawn *spawn)
crypto_drop_spawn(&spawn->base); 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( static inline struct aead_alg *crypto_spawn_aead_alg(
struct crypto_aead_spawn *spawn) struct crypto_aead_spawn *spawn)
{ {
...@@ -123,32 +106,15 @@ static inline struct crypto_aead *crypto_spawn_aead( ...@@ -123,32 +106,15 @@ static inline struct crypto_aead *crypto_spawn_aead(
return crypto_spawn_tfm2(&spawn->base); 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, static inline void crypto_aead_set_reqsize(struct crypto_aead *aead,
unsigned int reqsize) unsigned int reqsize)
{ {
crypto_aead_crt(aead)->reqsize = reqsize; aead->reqsize = reqsize;
} }
static inline unsigned int crypto_aead_alg_maxauthsize(struct aead_alg *alg) static inline unsigned int crypto_aead_alg_maxauthsize(struct aead_alg *alg)
{ {
return alg->base.cra_aead.encrypt ? alg->base.cra_aead.maxauthsize : return alg->maxauthsize;
alg->maxauthsize;
} }
static inline unsigned int crypto_aead_maxauthsize(struct crypto_aead *aead) static inline unsigned int crypto_aead_maxauthsize(struct crypto_aead *aead)
......
...@@ -27,8 +27,6 @@ struct aead_geniv_ctx { ...@@ -27,8 +27,6 @@ struct aead_geniv_ctx {
struct aead_instance *aead_geniv_alloc(struct crypto_template *tmpl, struct aead_instance *aead_geniv_alloc(struct crypto_template *tmpl,
struct rtattr **tb, u32 type, u32 mask); struct rtattr **tb, u32 type, u32 mask);
void aead_geniv_free(struct aead_instance *inst); 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); int aead_init_geniv(struct crypto_aead *tfm);
void aead_exit_geniv(struct crypto_aead *tfm); void aead_exit_geniv(struct crypto_aead *tfm);
......
...@@ -142,13 +142,10 @@ ...@@ -142,13 +142,10 @@
struct scatterlist; struct scatterlist;
struct crypto_ablkcipher; struct crypto_ablkcipher;
struct crypto_async_request; struct crypto_async_request;
struct crypto_aead;
struct crypto_blkcipher; struct crypto_blkcipher;
struct crypto_hash; struct crypto_hash;
struct crypto_tfm; struct crypto_tfm;
struct crypto_type; struct crypto_type;
struct aead_request;
struct aead_givcrypt_request;
struct skcipher_givcrypt_request; struct skcipher_givcrypt_request;
typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err); typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err);
...@@ -274,47 +271,6 @@ struct ablkcipher_alg { ...@@ -274,47 +271,6 @@ struct ablkcipher_alg {
unsigned int ivsize; 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 * struct blkcipher_alg - synchronous block cipher definition
* @min_keysize: see struct ablkcipher_alg * @min_keysize: see struct ablkcipher_alg
...@@ -409,7 +365,6 @@ struct compress_alg { ...@@ -409,7 +365,6 @@ struct compress_alg {
#define cra_ablkcipher cra_u.ablkcipher #define cra_ablkcipher cra_u.ablkcipher
#define cra_aead cra_u.aead
#define cra_blkcipher cra_u.blkcipher #define cra_blkcipher cra_u.blkcipher
#define cra_cipher cra_u.cipher #define cra_cipher cra_u.cipher
#define cra_compress cra_u.compress #define cra_compress cra_u.compress
...@@ -460,7 +415,7 @@ struct compress_alg { ...@@ -460,7 +415,7 @@ struct compress_alg {
* struct crypto_type, which implements callbacks common for all * struct crypto_type, which implements callbacks common for all
* transformation types. There are multiple options: * transformation types. There are multiple options:
* &crypto_blkcipher_type, &crypto_ablkcipher_type, * &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 * This field might be empty. In that case, there are no common
* callbacks. This is the case for: cipher, compress, shash. * callbacks. This is the case for: cipher, compress, shash.
* @cra_u: Callbacks implementing the transformation. This is a union of * @cra_u: Callbacks implementing the transformation. This is a union of
...@@ -508,7 +463,6 @@ struct crypto_alg { ...@@ -508,7 +463,6 @@ struct crypto_alg {
union { union {
struct ablkcipher_alg ablkcipher; struct ablkcipher_alg ablkcipher;
struct old_aead_alg aead;
struct blkcipher_alg blkcipher; struct blkcipher_alg blkcipher;
struct cipher_alg cipher; struct cipher_alg cipher;
struct compress_alg compress; struct compress_alg compress;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment