diff options
Diffstat (limited to 'include/linux/crypto.h')
| -rw-r--r-- | include/linux/crypto.h | 35 | 
1 files changed, 35 insertions, 0 deletions
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index c43dc47fdf7..3d2317e4af2 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h @@ -38,6 +38,7 @@  #define CRYPTO_ALG_TYPE_DIGEST		0x00000008  #define CRYPTO_ALG_TYPE_HASH		0x00000009  #define CRYPTO_ALG_TYPE_AHASH		0x0000000a +#define CRYPTO_ALG_TYPE_RNG		0x0000000c  #define CRYPTO_ALG_TYPE_HASH_MASK	0x0000000e  #define CRYPTO_ALG_TYPE_AHASH_MASK	0x0000000c @@ -61,6 +62,14 @@  #define CRYPTO_ALG_GENIV		0x00000200  /* + * Set if the algorithm has passed automated run-time testing.  Note that + * if there is no run-time testing for a given algorithm it is considered + * to have passed. + */ + +#define CRYPTO_ALG_TESTED		0x00000400 + +/*   * Transform masks and values (for crt_flags).   */  #define CRYPTO_TFM_REQ_MASK		0x000fff00 @@ -105,6 +114,7 @@ struct crypto_aead;  struct crypto_blkcipher;  struct crypto_hash;  struct crypto_ahash; +struct crypto_rng;  struct crypto_tfm;  struct crypto_type;  struct aead_givcrypt_request; @@ -290,6 +300,15 @@ struct compress_alg {  			      unsigned int slen, u8 *dst, unsigned int *dlen);  }; +struct rng_alg { +	int (*rng_make_random)(struct crypto_rng *tfm, u8 *rdata, +			       unsigned int dlen); +	int (*rng_reset)(struct crypto_rng *tfm, u8 *seed, unsigned int slen); + +	unsigned int seedsize; +}; + +  #define cra_ablkcipher	cra_u.ablkcipher  #define cra_aead	cra_u.aead  #define cra_blkcipher	cra_u.blkcipher @@ -298,6 +317,7 @@ struct compress_alg {  #define cra_hash	cra_u.hash  #define cra_ahash	cra_u.ahash  #define cra_compress	cra_u.compress +#define cra_rng		cra_u.rng  struct crypto_alg {  	struct list_head cra_list; @@ -325,6 +345,7 @@ struct crypto_alg {  		struct hash_alg hash;  		struct ahash_alg ahash;  		struct compress_alg compress; +		struct rng_alg rng;  	} cra_u;  	int (*cra_init)(struct crypto_tfm *tfm); @@ -430,6 +451,12 @@ struct compress_tfm {  	                      u8 *dst, unsigned int *dlen);  }; +struct rng_tfm { +	int (*rng_gen_random)(struct crypto_rng *tfm, u8 *rdata, +			      unsigned int dlen); +	int (*rng_reset)(struct crypto_rng *tfm, u8 *seed, unsigned int slen); +}; +  #define crt_ablkcipher	crt_u.ablkcipher  #define crt_aead	crt_u.aead  #define crt_blkcipher	crt_u.blkcipher @@ -437,6 +464,7 @@ struct compress_tfm {  #define crt_hash	crt_u.hash  #define crt_ahash	crt_u.ahash  #define crt_compress	crt_u.compress +#define crt_rng		crt_u.rng  struct crypto_tfm { @@ -450,6 +478,7 @@ struct crypto_tfm {  		struct hash_tfm hash;  		struct ahash_tfm ahash;  		struct compress_tfm compress; +		struct rng_tfm rng;  	} crt_u;  	struct crypto_alg *__crt_alg; @@ -481,6 +510,10 @@ struct crypto_hash {  	struct crypto_tfm base;  }; +struct crypto_rng { +	struct crypto_tfm base; +}; +  enum {  	CRYPTOA_UNSPEC,  	CRYPTOA_ALG, @@ -515,6 +548,8 @@ struct crypto_tfm *crypto_alloc_tfm(const char *alg_name, u32 tfm_flags);  struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask);  void crypto_free_tfm(struct crypto_tfm *tfm); +int alg_test(const char *driver, const char *alg, u32 type, u32 mask); +  /*   * Transform helpers which query the underlying algorithm.   */  |