diff options
Diffstat (limited to 'crypto/akcipher.c')
| -rw-r--r-- | crypto/akcipher.c | 34 | 
1 files changed, 33 insertions, 1 deletions
diff --git a/crypto/akcipher.c b/crypto/akcipher.c index 120ec042ec9e..def301ed1288 100644 --- a/crypto/akcipher.c +++ b/crypto/akcipher.c @@ -21,6 +21,7 @@  #include <linux/cryptouser.h>  #include <net/netlink.h>  #include <crypto/akcipher.h> +#include <crypto/internal/akcipher.h>  #include "internal.h"  #ifdef CONFIG_NET @@ -75,9 +76,17 @@ static int crypto_akcipher_init_tfm(struct crypto_tfm *tfm)  	return 0;  } +static void crypto_akcipher_free_instance(struct crypto_instance *inst) +{ +	struct akcipher_instance *akcipher = akcipher_instance(inst); + +	akcipher->free(akcipher); +} +  static const struct crypto_type crypto_akcipher_type = {  	.extsize = crypto_alg_extsize,  	.init_tfm = crypto_akcipher_init_tfm, +	.free = crypto_akcipher_free_instance,  #ifdef CONFIG_PROC_FS  	.show = crypto_akcipher_show,  #endif @@ -88,6 +97,14 @@ static const struct crypto_type crypto_akcipher_type = {  	.tfmsize = offsetof(struct crypto_akcipher, base),  }; +int crypto_grab_akcipher(struct crypto_akcipher_spawn *spawn, const char *name, +			 u32 type, u32 mask) +{ +	spawn->base.frontend = &crypto_akcipher_type; +	return crypto_grab_spawn(&spawn->base, name, type, mask); +} +EXPORT_SYMBOL_GPL(crypto_grab_akcipher); +  struct crypto_akcipher *crypto_alloc_akcipher(const char *alg_name, u32 type,  					      u32 mask)  { @@ -95,13 +112,20 @@ struct crypto_akcipher *crypto_alloc_akcipher(const char *alg_name, u32 type,  }  EXPORT_SYMBOL_GPL(crypto_alloc_akcipher); -int crypto_register_akcipher(struct akcipher_alg *alg) +static void akcipher_prepare_alg(struct akcipher_alg *alg)  {  	struct crypto_alg *base = &alg->base;  	base->cra_type = &crypto_akcipher_type;  	base->cra_flags &= ~CRYPTO_ALG_TYPE_MASK;  	base->cra_flags |= CRYPTO_ALG_TYPE_AKCIPHER; +} + +int crypto_register_akcipher(struct akcipher_alg *alg) +{ +	struct crypto_alg *base = &alg->base; + +	akcipher_prepare_alg(alg);  	return crypto_register_alg(base);  }  EXPORT_SYMBOL_GPL(crypto_register_akcipher); @@ -112,5 +136,13 @@ void crypto_unregister_akcipher(struct akcipher_alg *alg)  }  EXPORT_SYMBOL_GPL(crypto_unregister_akcipher); +int akcipher_register_instance(struct crypto_template *tmpl, +			       struct akcipher_instance *inst) +{ +	akcipher_prepare_alg(&inst->alg); +	return crypto_register_instance(tmpl, akcipher_crypto_instance(inst)); +} +EXPORT_SYMBOL_GPL(akcipher_register_instance); +  MODULE_LICENSE("GPL");  MODULE_DESCRIPTION("Generic public key cipher type");  | 
