diff options
Diffstat (limited to 'include/linux/crypto.h')
| -rw-r--r-- | include/linux/crypto.h | 236 | 
1 files changed, 4 insertions, 232 deletions
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index bb1d9b0e1647..fa310ac1db59 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h @@ -12,26 +12,10 @@  #ifndef _LINUX_CRYPTO_H  #define _LINUX_CRYPTO_H -#include <linux/atomic.h> -#include <linux/kernel.h> -#include <linux/list.h> -#include <linux/bug.h> +#include <linux/completion.h>  #include <linux/refcount.h>  #include <linux/slab.h> -#include <linux/completion.h> - -/* - * Autoloaded crypto modules should only use a prefixed name to avoid allowing - * arbitrary modules to be loaded. Loading from userspace may still need the - * unprefixed names, so retains those aliases as well. - * This uses __MODULE_INFO directly instead of MODULE_ALIAS because pre-4.3 - * gcc (e.g. avr32 toolchain) uses __LINE__ for uniqueness, and this macro - * expands twice on the same line. Instead, use a separate base name for the - * alias. - */ -#define MODULE_ALIAS_CRYPTO(name)	\ -		__MODULE_INFO(alias, alias_userspace, name);	\ -		__MODULE_INFO(alias, alias_crypto, "crypto-" name) +#include <linux/types.h>  /*   * Algorithm masks and types. @@ -171,10 +155,9 @@  #define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN))) -struct scatterlist; -struct crypto_async_request;  struct crypto_tfm;  struct crypto_type; +struct module;  typedef void (*crypto_completion_t)(void *req, int err); @@ -275,116 +258,6 @@ struct compress_alg {  			      unsigned int slen, u8 *dst, unsigned int *dlen);  }; -#ifdef CONFIG_CRYPTO_STATS -/* - * struct crypto_istat_aead - statistics for AEAD algorithm - * @encrypt_cnt:	number of encrypt requests - * @encrypt_tlen:	total data size handled by encrypt requests - * @decrypt_cnt:	number of decrypt requests - * @decrypt_tlen:	total data size handled by decrypt requests - * @err_cnt:		number of error for AEAD requests - */ -struct crypto_istat_aead { -	atomic64_t encrypt_cnt; -	atomic64_t encrypt_tlen; -	atomic64_t decrypt_cnt; -	atomic64_t decrypt_tlen; -	atomic64_t err_cnt; -}; - -/* - * struct crypto_istat_akcipher - statistics for akcipher algorithm - * @encrypt_cnt:	number of encrypt requests - * @encrypt_tlen:	total data size handled by encrypt requests - * @decrypt_cnt:	number of decrypt requests - * @decrypt_tlen:	total data size handled by decrypt requests - * @verify_cnt:		number of verify operation - * @sign_cnt:		number of sign requests - * @err_cnt:		number of error for akcipher requests - */ -struct crypto_istat_akcipher { -	atomic64_t encrypt_cnt; -	atomic64_t encrypt_tlen; -	atomic64_t decrypt_cnt; -	atomic64_t decrypt_tlen; -	atomic64_t verify_cnt; -	atomic64_t sign_cnt; -	atomic64_t err_cnt; -}; - -/* - * struct crypto_istat_cipher - statistics for cipher algorithm - * @encrypt_cnt:	number of encrypt requests - * @encrypt_tlen:	total data size handled by encrypt requests - * @decrypt_cnt:	number of decrypt requests - * @decrypt_tlen:	total data size handled by decrypt requests - * @err_cnt:		number of error for cipher requests - */ -struct crypto_istat_cipher { -	atomic64_t encrypt_cnt; -	atomic64_t encrypt_tlen; -	atomic64_t decrypt_cnt; -	atomic64_t decrypt_tlen; -	atomic64_t err_cnt; -}; - -/* - * struct crypto_istat_compress - statistics for compress algorithm - * @compress_cnt:	number of compress requests - * @compress_tlen:	total data size handled by compress requests - * @decompress_cnt:	number of decompress requests - * @decompress_tlen:	total data size handled by decompress requests - * @err_cnt:		number of error for compress requests - */ -struct crypto_istat_compress { -	atomic64_t compress_cnt; -	atomic64_t compress_tlen; -	atomic64_t decompress_cnt; -	atomic64_t decompress_tlen; -	atomic64_t err_cnt; -}; - -/* - * struct crypto_istat_hash - statistics for has algorithm - * @hash_cnt:		number of hash requests - * @hash_tlen:		total data size hashed - * @err_cnt:		number of error for hash requests - */ -struct crypto_istat_hash { -	atomic64_t hash_cnt; -	atomic64_t hash_tlen; -	atomic64_t err_cnt; -}; - -/* - * struct crypto_istat_kpp - statistics for KPP algorithm - * @setsecret_cnt:		number of setsecrey operation - * @generate_public_key_cnt:	number of generate_public_key operation - * @compute_shared_secret_cnt:	number of compute_shared_secret operation - * @err_cnt:			number of error for KPP requests - */ -struct crypto_istat_kpp { -	atomic64_t setsecret_cnt; -	atomic64_t generate_public_key_cnt; -	atomic64_t compute_shared_secret_cnt; -	atomic64_t err_cnt; -}; - -/* - * struct crypto_istat_rng: statistics for RNG algorithm - * @generate_cnt:	number of RNG generate requests - * @generate_tlen:	total data size of generated data by the RNG - * @seed_cnt:		number of times the RNG was seeded - * @err_cnt:		number of error for RNG requests - */ -struct crypto_istat_rng { -	atomic64_t generate_cnt; -	atomic64_t generate_tlen; -	atomic64_t seed_cnt; -	atomic64_t err_cnt; -}; -#endif /* CONFIG_CRYPTO_STATS */ -  #define cra_cipher	cra_u.cipher  #define cra_compress	cra_u.compress @@ -462,15 +335,6 @@ struct crypto_istat_rng {   * @cra_refcnt: internally used   * @cra_destroy: internally used   * - * @stats: union of all possible crypto_istat_xxx structures - * @stats.aead:		statistics for AEAD algorithm - * @stats.akcipher:	statistics for akcipher algorithm - * @stats.cipher:	statistics for cipher algorithm - * @stats.compress:	statistics for compress algorithm - * @stats.hash:		statistics for hash algorithm - * @stats.rng:		statistics for rng algorithm - * @stats.kpp:		statistics for KPP algorithm - *   * The struct crypto_alg describes a generic Crypto API algorithm and is common   * for all of the transformations. Any variable not documented here shall not   * be used by a cipher implementation as it is internal to the Crypto API. @@ -502,81 +366,8 @@ struct crypto_alg {  	void (*cra_destroy)(struct crypto_alg *alg);  	struct module *cra_module; - -#ifdef CONFIG_CRYPTO_STATS -	union { -		struct crypto_istat_aead aead; -		struct crypto_istat_akcipher akcipher; -		struct crypto_istat_cipher cipher; -		struct crypto_istat_compress compress; -		struct crypto_istat_hash hash; -		struct crypto_istat_rng rng; -		struct crypto_istat_kpp kpp; -	} stats; -#endif /* CONFIG_CRYPTO_STATS */ -  } CRYPTO_MINALIGN_ATTR; -#ifdef CONFIG_CRYPTO_STATS -void crypto_stats_init(struct crypto_alg *alg); -void crypto_stats_get(struct crypto_alg *alg); -void crypto_stats_aead_encrypt(unsigned int cryptlen, struct crypto_alg *alg, int ret); -void crypto_stats_aead_decrypt(unsigned int cryptlen, struct crypto_alg *alg, int ret); -void crypto_stats_ahash_update(unsigned int nbytes, int ret, struct crypto_alg *alg); -void crypto_stats_ahash_final(unsigned int nbytes, int ret, struct crypto_alg *alg); -void crypto_stats_akcipher_encrypt(unsigned int src_len, int ret, struct crypto_alg *alg); -void crypto_stats_akcipher_decrypt(unsigned int src_len, int ret, struct crypto_alg *alg); -void crypto_stats_akcipher_sign(int ret, struct crypto_alg *alg); -void crypto_stats_akcipher_verify(int ret, struct crypto_alg *alg); -void crypto_stats_compress(unsigned int slen, int ret, struct crypto_alg *alg); -void crypto_stats_decompress(unsigned int slen, int ret, struct crypto_alg *alg); -void crypto_stats_kpp_set_secret(struct crypto_alg *alg, int ret); -void crypto_stats_kpp_generate_public_key(struct crypto_alg *alg, int ret); -void crypto_stats_kpp_compute_shared_secret(struct crypto_alg *alg, int ret); -void crypto_stats_rng_seed(struct crypto_alg *alg, int ret); -void crypto_stats_rng_generate(struct crypto_alg *alg, unsigned int dlen, int ret); -void crypto_stats_skcipher_encrypt(unsigned int cryptlen, int ret, struct crypto_alg *alg); -void crypto_stats_skcipher_decrypt(unsigned int cryptlen, int ret, struct crypto_alg *alg); -#else -static inline void crypto_stats_init(struct crypto_alg *alg) -{} -static inline void crypto_stats_get(struct crypto_alg *alg) -{} -static inline void crypto_stats_aead_encrypt(unsigned int cryptlen, struct crypto_alg *alg, int ret) -{} -static inline void crypto_stats_aead_decrypt(unsigned int cryptlen, struct crypto_alg *alg, int ret) -{} -static inline void crypto_stats_ahash_update(unsigned int nbytes, int ret, struct crypto_alg *alg) -{} -static inline void crypto_stats_ahash_final(unsigned int nbytes, int ret, struct crypto_alg *alg) -{} -static inline void crypto_stats_akcipher_encrypt(unsigned int src_len, int ret, struct crypto_alg *alg) -{} -static inline void crypto_stats_akcipher_decrypt(unsigned int src_len, int ret, struct crypto_alg *alg) -{} -static inline void crypto_stats_akcipher_sign(int ret, struct crypto_alg *alg) -{} -static inline void crypto_stats_akcipher_verify(int ret, struct crypto_alg *alg) -{} -static inline void crypto_stats_compress(unsigned int slen, int ret, struct crypto_alg *alg) -{} -static inline void crypto_stats_decompress(unsigned int slen, int ret, struct crypto_alg *alg) -{} -static inline void crypto_stats_kpp_set_secret(struct crypto_alg *alg, int ret) -{} -static inline void crypto_stats_kpp_generate_public_key(struct crypto_alg *alg, int ret) -{} -static inline void crypto_stats_kpp_compute_shared_secret(struct crypto_alg *alg, int ret) -{} -static inline void crypto_stats_rng_seed(struct crypto_alg *alg, int ret) -{} -static inline void crypto_stats_rng_generate(struct crypto_alg *alg, unsigned int dlen, int ret) -{} -static inline void crypto_stats_skcipher_encrypt(unsigned int cryptlen, int ret, struct crypto_alg *alg) -{} -static inline void crypto_stats_skcipher_decrypt(unsigned int cryptlen, int ret, struct crypto_alg *alg) -{} -#endif  /*   * A helper struct for waiting for completion of async crypto ops   */ @@ -617,14 +408,6 @@ static inline void crypto_init_wait(struct crypto_wait *wait)  }  /* - * Algorithm registration interface. - */ -int crypto_register_alg(struct crypto_alg *alg); -void crypto_unregister_alg(struct crypto_alg *alg); -int crypto_register_algs(struct crypto_alg *algs, int count); -void crypto_unregister_algs(struct crypto_alg *algs, int count); - -/*   * Algorithm query interface.   */  int crypto_has_alg(const char *name, u32 type, u32 mask); @@ -636,6 +419,7 @@ int crypto_has_alg(const char *name, u32 type, u32 mask);   */  struct crypto_tfm { +	refcount_t refcnt;  	u32 crt_flags; @@ -664,8 +448,6 @@ static inline void crypto_free_tfm(struct crypto_tfm *tfm)  	return crypto_destroy_tfm(tfm, tfm);  } -int alg_test(const char *driver, const char *alg, u32 type, u32 mask); -  /*   * Transform helpers which query the underlying algorithm.   */ @@ -679,16 +461,6 @@ static inline const char *crypto_tfm_alg_driver_name(struct crypto_tfm *tfm)  	return tfm->__crt_alg->cra_driver_name;  } -static inline int crypto_tfm_alg_priority(struct crypto_tfm *tfm) -{ -	return tfm->__crt_alg->cra_priority; -} - -static inline u32 crypto_tfm_alg_type(struct crypto_tfm *tfm) -{ -	return tfm->__crt_alg->cra_flags & CRYPTO_ALG_TYPE_MASK; -} -  static inline unsigned int crypto_tfm_alg_blocksize(struct crypto_tfm *tfm)  {  	return tfm->__crt_alg->cra_blocksize;  |