2 * RNG: Random Number Generator algorithms under the crypto API
4 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
16 #include <linux/crypto.h>
18 extern struct crypto_rng
*crypto_default_rng
;
20 int crypto_get_default_rng(void);
21 void crypto_put_default_rng(void);
23 static inline struct crypto_rng
*__crypto_rng_cast(struct crypto_tfm
*tfm
)
25 return (struct crypto_rng
*)tfm
;
28 static inline struct crypto_rng
*crypto_alloc_rng(const char *alg_name
,
31 type
&= ~CRYPTO_ALG_TYPE_MASK
;
32 type
|= CRYPTO_ALG_TYPE_RNG
;
33 mask
|= CRYPTO_ALG_TYPE_MASK
;
35 return __crypto_rng_cast(crypto_alloc_base(alg_name
, type
, mask
));
38 static inline struct crypto_tfm
*crypto_rng_tfm(struct crypto_rng
*tfm
)
43 static inline struct rng_alg
*crypto_rng_alg(struct crypto_rng
*tfm
)
45 return &crypto_rng_tfm(tfm
)->__crt_alg
->cra_rng
;
48 static inline struct rng_tfm
*crypto_rng_crt(struct crypto_rng
*tfm
)
50 return &crypto_rng_tfm(tfm
)->crt_rng
;
53 static inline void crypto_free_rng(struct crypto_rng
*tfm
)
55 crypto_free_tfm(crypto_rng_tfm(tfm
));
58 static inline int crypto_rng_get_bytes(struct crypto_rng
*tfm
,
59 u8
*rdata
, unsigned int dlen
)
61 return crypto_rng_crt(tfm
)->rng_gen_random(tfm
, rdata
, dlen
);
64 static inline int crypto_rng_reset(struct crypto_rng
*tfm
,
65 u8
*seed
, unsigned int slen
)
67 return crypto_rng_crt(tfm
)->rng_reset(tfm
, seed
, slen
);
70 static inline int crypto_rng_seedsize(struct crypto_rng
*tfm
)
72 return crypto_rng_alg(tfm
)->seedsize
;