diff options
author | Huang Ying <ying.huang@intel.com> | 2009-08-06 01:35:20 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2009-08-06 01:35:20 -0400 |
commit | ace1366369841c9c3a9788f79baa4d73f1c53107 (patch) | |
tree | 65d07ad456082a0e62a1d70fa91403c10d468e27 /crypto | |
parent | 9382d97af586a47dad312765e35c61aa7ad7fcdd (diff) |
crypto: cryptd - Add support to access underlaying shash
cryptd_alloc_ahash() will allocate a cryptd-ed ahash for specified
algorithm name. The new allocated one is guaranteed to be cryptd-ed
ahash, so the shash underlying can be gotten via cryptd_ahash_child().
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/cryptd.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/crypto/cryptd.c b/crypto/cryptd.c index 2eb705822f2b..35335825a4ef 100644 --- a/crypto/cryptd.c +++ b/crypto/cryptd.c | |||
@@ -682,6 +682,41 @@ void cryptd_free_ablkcipher(struct cryptd_ablkcipher *tfm) | |||
682 | } | 682 | } |
683 | EXPORT_SYMBOL_GPL(cryptd_free_ablkcipher); | 683 | EXPORT_SYMBOL_GPL(cryptd_free_ablkcipher); |
684 | 684 | ||
685 | struct cryptd_ahash *cryptd_alloc_ahash(const char *alg_name, | ||
686 | u32 type, u32 mask) | ||
687 | { | ||
688 | char cryptd_alg_name[CRYPTO_MAX_ALG_NAME]; | ||
689 | struct crypto_ahash *tfm; | ||
690 | |||
691 | if (snprintf(cryptd_alg_name, CRYPTO_MAX_ALG_NAME, | ||
692 | "cryptd(%s)", alg_name) >= CRYPTO_MAX_ALG_NAME) | ||
693 | return ERR_PTR(-EINVAL); | ||
694 | tfm = crypto_alloc_ahash(cryptd_alg_name, type, mask); | ||
695 | if (IS_ERR(tfm)) | ||
696 | return ERR_CAST(tfm); | ||
697 | if (tfm->base.__crt_alg->cra_module != THIS_MODULE) { | ||
698 | crypto_free_ahash(tfm); | ||
699 | return ERR_PTR(-EINVAL); | ||
700 | } | ||
701 | |||
702 | return __cryptd_ahash_cast(tfm); | ||
703 | } | ||
704 | EXPORT_SYMBOL_GPL(cryptd_alloc_ahash); | ||
705 | |||
706 | struct crypto_shash *cryptd_ahash_child(struct cryptd_ahash *tfm) | ||
707 | { | ||
708 | struct cryptd_hash_ctx *ctx = crypto_ahash_ctx(&tfm->base); | ||
709 | |||
710 | return ctx->child; | ||
711 | } | ||
712 | EXPORT_SYMBOL_GPL(cryptd_ahash_child); | ||
713 | |||
714 | void cryptd_free_ahash(struct cryptd_ahash *tfm) | ||
715 | { | ||
716 | crypto_free_ahash(&tfm->base); | ||
717 | } | ||
718 | EXPORT_SYMBOL_GPL(cryptd_free_ahash); | ||
719 | |||
685 | static int __init cryptd_init(void) | 720 | static int __init cryptd_init(void) |
686 | { | 721 | { |
687 | int err; | 722 | int err; |