diff options
Diffstat (limited to 'include/crypto/internal/akcipher.h')
| -rw-r--r-- | include/crypto/internal/akcipher.h | 78 | 
1 files changed, 78 insertions, 0 deletions
diff --git a/include/crypto/internal/akcipher.h b/include/crypto/internal/akcipher.h index 9a2bda15e454..479a0078f0f7 100644 --- a/include/crypto/internal/akcipher.h +++ b/include/crypto/internal/akcipher.h @@ -13,6 +13,22 @@  #ifndef _CRYPTO_AKCIPHER_INT_H  #define _CRYPTO_AKCIPHER_INT_H  #include <crypto/akcipher.h> +#include <crypto/algapi.h> + +struct akcipher_instance { +	void (*free)(struct akcipher_instance *inst); +	union { +		struct { +			char head[offsetof(struct akcipher_alg, base)]; +			struct crypto_instance base; +		} s; +		struct akcipher_alg alg; +	}; +}; + +struct crypto_akcipher_spawn { +	struct crypto_spawn base; +};  /*   * Transform internal helpers. @@ -38,6 +54,56 @@ static inline const char *akcipher_alg_name(struct crypto_akcipher *tfm)  	return crypto_akcipher_tfm(tfm)->__crt_alg->cra_name;  } +static inline struct crypto_instance *akcipher_crypto_instance( +		struct akcipher_instance *inst) +{ +	return container_of(&inst->alg.base, struct crypto_instance, alg); +} + +static inline struct akcipher_instance *akcipher_instance( +		struct crypto_instance *inst) +{ +	return container_of(&inst->alg, struct akcipher_instance, alg.base); +} + +static inline struct akcipher_instance *akcipher_alg_instance( +		struct crypto_akcipher *akcipher) +{ +	return akcipher_instance(crypto_tfm_alg_instance(&akcipher->base)); +} + +static inline void *akcipher_instance_ctx(struct akcipher_instance *inst) +{ +	return crypto_instance_ctx(akcipher_crypto_instance(inst)); +} + +static inline void crypto_set_akcipher_spawn( +		struct crypto_akcipher_spawn *spawn, +		struct crypto_instance *inst) +{ +	crypto_set_spawn(&spawn->base, inst); +} + +int crypto_grab_akcipher(struct crypto_akcipher_spawn *spawn, const char *name, +		u32 type, u32 mask); + +static inline struct crypto_akcipher *crypto_spawn_akcipher( +		struct crypto_akcipher_spawn *spawn) +{ +	return crypto_spawn_tfm2(&spawn->base); +} + +static inline void crypto_drop_akcipher(struct crypto_akcipher_spawn *spawn) +{ +	crypto_drop_spawn(&spawn->base); +} + +static inline struct akcipher_alg *crypto_spawn_akcipher_alg( +		struct crypto_akcipher_spawn *spawn) +{ +	return container_of(spawn->base.alg, struct akcipher_alg, base); +} +  /**   * crypto_register_akcipher() -- Register public key algorithm   * @@ -57,4 +123,16 @@ int crypto_register_akcipher(struct akcipher_alg *alg);   * @alg:	algorithm definition   */  void crypto_unregister_akcipher(struct akcipher_alg *alg); + +/** + * akcipher_register_instance() -- Unregister public key template instance + * + * Function registers an implementation of an asymmetric key algorithm + * created from a template + * + * @tmpl:	the template from which the algorithm was created + * @inst:	the template instance + */ +int akcipher_register_instance(struct crypto_template *tmpl, +		struct akcipher_instance *inst);  #endif  | 
