diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-05-05 01:49:48 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-05-05 04:28:45 -0800 |
commit | f9395eeca59290b210bc2b79f7bf2e9cb779cf3f (patch) | |
tree | c88c76ffdc400ce7b5f354a79574823a2dcb4074 /linux/crypto/api.c | |
parent | e004b95b88ae95cf7bb26bd7dc80c5dcf2b2664a (diff) |
Update bcachefs sources to 3610542890 bcachefs: Convert to skcipher interface for chacha20
Diffstat (limited to 'linux/crypto/api.c')
-rw-r--r-- | linux/crypto/api.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/linux/crypto/api.c b/linux/crypto/api.c index 2d24630e..63efee30 100644 --- a/linux/crypto/api.c +++ b/linux/crypto/api.c @@ -201,3 +201,36 @@ int crypto_register_alg(struct crypto_alg *alg) return 0; } + +/* skcipher: */ + +static int crypto_skcipher_init_tfm(struct crypto_tfm *tfm) +{ + struct crypto_skcipher *skcipher = __crypto_skcipher_cast(tfm); + struct skcipher_alg *alg = crypto_skcipher_alg(skcipher); + + skcipher->setkey = alg->setkey; + skcipher->encrypt = alg->encrypt; + skcipher->decrypt = alg->decrypt; + skcipher->ivsize = alg->ivsize; + skcipher->keysize = alg->max_keysize; + + if (alg->init) + return alg->init(skcipher); + + return 0; +} + +static const struct crypto_type crypto_skcipher_type2 = { + .extsize = crypto_alg_extsize, + .init_tfm = crypto_skcipher_init_tfm, + .maskclear = ~CRYPTO_ALG_TYPE_MASK, + .maskset = CRYPTO_ALG_TYPE_BLKCIPHER_MASK, + .tfmsize = offsetof(struct crypto_skcipher, base), +}; + +struct crypto_skcipher *crypto_alloc_skcipher(const char *alg_name, + u32 type, u32 mask) +{ + return crypto_alloc_tfm(alg_name, &crypto_skcipher_type2, type, mask); +} |