return -ENOSYS;
}
-static int crypto_init_ahash_ops(struct crypto_tfm *tfm, u32 type, u32 mask)
-{
- struct old_ahash_alg *alg = &tfm->__crt_alg->cra_ahash;
- struct crypto_ahash *crt = __crypto_ahash_cast(tfm);
- struct ahash_alg *nalg = crypto_ahash_alg(crt);
-
- if (alg->digestsize > PAGE_SIZE / 8)
- return -EINVAL;
-
- crt->init = alg->init;
- crt->update = alg->update;
- crt->final = alg->final;
- crt->digest = alg->digest;
- crt->setkey = alg->setkey ? ahash_setkey : ahash_nosetkey;
- crt->digestsize = alg->digestsize;
-
- nalg->setkey = alg->setkey;
- nalg->halg.digestsize = alg->digestsize;
-
- return 0;
-}
-
static int crypto_ahash_init_tfm(struct crypto_tfm *tfm)
{
struct crypto_ahash *hash = __crypto_ahash_cast(tfm);
struct ahash_alg *alg = crypto_ahash_alg(hash);
- struct old_ahash_alg *oalg = crypto_old_ahash_alg(hash);
if (tfm->__crt_alg->cra_type != &crypto_ahash_type)
return crypto_init_shash_ops_async(tfm);
- if (oalg->init)
- return crypto_init_ahash_ops(tfm, 0, 0);
-
hash->init = alg->init;
hash->update = alg->update;
hash->final = alg->final;
hash->digest = alg->digest;
hash->setkey = alg->setkey ? ahash_setkey : ahash_nosetkey;
- hash->digestsize = alg->halg.digestsize;
return 0;
}
int crypto_init_shash_ops_async(struct crypto_tfm *tfm)
{
struct crypto_alg *calg = tfm->__crt_alg;
- struct shash_alg *alg = __crypto_shash_alg(calg);
struct crypto_ahash *crt = __crypto_ahash_cast(tfm);
struct crypto_shash **ctx = crypto_tfm_ctx(tfm);
struct crypto_shash *shash;
crt->digest = shash_async_digest;
crt->setkey = shash_async_setkey;
- crt->digestsize = alg->digestsize;
crt->reqsize = sizeof(struct shash_desc) + crypto_shash_descsize(shash);
return 0;
int (*setkey)(struct crypto_ahash *tfm, const u8 *key,
unsigned int keylen);
- unsigned int digestsize;
unsigned int reqsize;
struct crypto_tfm base;
};
static inline unsigned int crypto_ahash_digestsize(struct crypto_ahash *tfm)
{
- return tfm->digestsize;
+ return crypto_hash_alg_common(tfm)->digestsize;
}
static inline unsigned int crypto_ahash_statesize(struct crypto_ahash *tfm)
halg);
}
-static inline struct old_ahash_alg *crypto_old_ahash_alg(
- struct crypto_ahash *tfm)
-{
- return &crypto_ahash_tfm(tfm)->__crt_alg->cra_ahash;
-}
-
static inline void crypto_ahash_set_reqsize(struct crypto_ahash *tfm,
unsigned int reqsize)
{
struct crypto_aead;
struct crypto_blkcipher;
struct crypto_hash;
-struct crypto_ahash;
struct crypto_rng;
struct crypto_tfm;
struct crypto_type;
struct aead_givcrypt_request;
-struct ahash_request;
struct skcipher_givcrypt_request;
typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err);
unsigned int ivsize;
};
-struct old_ahash_alg {
- int (*init)(struct ahash_request *req);
- int (*reinit)(struct ahash_request *req);
- int (*update)(struct ahash_request *req);
- int (*final)(struct ahash_request *req);
- int (*digest)(struct ahash_request *req);
- int (*setkey)(struct crypto_ahash *tfm, const u8 *key,
- unsigned int keylen);
-
- unsigned int digestsize;
-};
-
struct aead_alg {
int (*setkey)(struct crypto_aead *tfm, const u8 *key,
unsigned int keylen);
#define cra_cipher cra_u.cipher
#define cra_digest cra_u.digest
#define cra_hash cra_u.hash
-#define cra_ahash cra_u.ahash
#define cra_compress cra_u.compress
#define cra_rng cra_u.rng
struct cipher_alg cipher;
struct digest_alg digest;
struct hash_alg hash;
- struct old_ahash_alg ahash;
struct compress_alg compress;
struct rng_alg rng;
} cra_u;