diff options
Diffstat (limited to 'crypto/api.c')
| -rw-r--r-- | crypto/api.c | 54 | 
1 files changed, 26 insertions, 28 deletions
diff --git a/crypto/api.c b/crypto/api.c index d5944f92b41..798526d9053 100644 --- a/crypto/api.c +++ b/crypto/api.c @@ -285,13 +285,6 @@ static int crypto_init_ops(struct crypto_tfm *tfm, u32 type, u32 mask)  	switch (crypto_tfm_alg_type(tfm)) {  	case CRYPTO_ALG_TYPE_CIPHER:  		return crypto_init_cipher_ops(tfm); -		 -	case CRYPTO_ALG_TYPE_DIGEST: -		if ((mask & CRYPTO_ALG_TYPE_HASH_MASK) != -		    CRYPTO_ALG_TYPE_HASH_MASK) -			return crypto_init_digest_ops_async(tfm); -		else -			return crypto_init_digest_ops(tfm);  	case CRYPTO_ALG_TYPE_COMPRESS:  		return crypto_init_compress_ops(tfm); @@ -318,11 +311,7 @@ static void crypto_exit_ops(struct crypto_tfm *tfm)  	case CRYPTO_ALG_TYPE_CIPHER:  		crypto_exit_cipher_ops(tfm);  		break; -		 -	case CRYPTO_ALG_TYPE_DIGEST: -		crypto_exit_digest_ops(tfm); -		break; -		 +  	case CRYPTO_ALG_TYPE_COMPRESS:  		crypto_exit_compress_ops(tfm);  		break; @@ -349,11 +338,7 @@ static unsigned int crypto_ctxsize(struct crypto_alg *alg, u32 type, u32 mask)  	case CRYPTO_ALG_TYPE_CIPHER:  		len += crypto_cipher_ctxsize(alg);  		break; -		 -	case CRYPTO_ALG_TYPE_DIGEST: -		len += crypto_digest_ctxsize(alg); -		break; -		 +  	case CRYPTO_ALG_TYPE_COMPRESS:  		len += crypto_compress_ctxsize(alg);  		break; @@ -472,7 +457,7 @@ void *crypto_create_tfm(struct crypto_alg *alg,  	int err = -ENOMEM;  	tfmsize = frontend->tfmsize; -	total = tfmsize + sizeof(*tfm) + frontend->extsize(alg, frontend); +	total = tfmsize + sizeof(*tfm) + frontend->extsize(alg);  	mem = kzalloc(total, GFP_KERNEL);  	if (mem == NULL) @@ -481,7 +466,7 @@ void *crypto_create_tfm(struct crypto_alg *alg,  	tfm = (struct crypto_tfm *)(mem + tfmsize);  	tfm->__crt_alg = alg; -	err = frontend->init_tfm(tfm, frontend); +	err = frontend->init_tfm(tfm);  	if (err)  		goto out_free_tfm; @@ -503,6 +488,27 @@ out:  }  EXPORT_SYMBOL_GPL(crypto_create_tfm); +struct crypto_alg *crypto_find_alg(const char *alg_name, +				   const struct crypto_type *frontend, +				   u32 type, u32 mask) +{ +	struct crypto_alg *(*lookup)(const char *name, u32 type, u32 mask) = +		crypto_alg_mod_lookup; + +	if (frontend) { +		type &= frontend->maskclear; +		mask &= frontend->maskclear; +		type |= frontend->type; +		mask |= frontend->maskset; + +		if (frontend->lookup) +			lookup = frontend->lookup; +	} + +	return lookup(alg_name, type, mask); +} +EXPORT_SYMBOL_GPL(crypto_find_alg); +  /*   *	crypto_alloc_tfm - Locate algorithm and allocate transform   *	@alg_name: Name of algorithm @@ -526,21 +532,13 @@ EXPORT_SYMBOL_GPL(crypto_create_tfm);  void *crypto_alloc_tfm(const char *alg_name,  		       const struct crypto_type *frontend, u32 type, u32 mask)  { -	struct crypto_alg *(*lookup)(const char *name, u32 type, u32 mask);  	void *tfm;  	int err; -	type &= frontend->maskclear; -	mask &= frontend->maskclear; -	type |= frontend->type; -	mask |= frontend->maskset; - -	lookup = frontend->lookup ?: crypto_alg_mod_lookup; -  	for (;;) {  		struct crypto_alg *alg; -		alg = lookup(alg_name, type, mask); +		alg = crypto_find_alg(alg_name, frontend, type, mask);  		if (IS_ERR(alg)) {  			err = PTR_ERR(alg);  			goto err;  |