Branch data Line data Source code
1 : : /*
2 : : * RNG: Random Number Generator algorithms under the crypto API
3 : : *
4 : : * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
5 : : *
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)
9 : : * any later version.
10 : : *
11 : : */
12 : :
13 : : #ifndef _CRYPTO_RNG_H
14 : : #define _CRYPTO_RNG_H
15 : :
16 : : #include <linux/crypto.h>
17 : :
18 : : extern struct crypto_rng *crypto_default_rng;
19 : :
20 : : int crypto_get_default_rng(void);
21 : : void crypto_put_default_rng(void);
22 : :
23 : : static inline struct crypto_rng *__crypto_rng_cast(struct crypto_tfm *tfm)
24 : : {
25 : : return (struct crypto_rng *)tfm;
26 : : }
27 : :
28 : : static inline struct crypto_rng *crypto_alloc_rng(const char *alg_name,
29 : : u32 type, u32 mask)
30 : : {
31 : : type &= ~CRYPTO_ALG_TYPE_MASK;
32 : : type |= CRYPTO_ALG_TYPE_RNG;
33 : : mask |= CRYPTO_ALG_TYPE_MASK;
34 : :
35 : 0 : return __crypto_rng_cast(crypto_alloc_base(alg_name, type, mask));
36 : : }
37 : :
38 : : static inline struct crypto_tfm *crypto_rng_tfm(struct crypto_rng *tfm)
39 : : {
40 : : return &tfm->base;
41 : : }
42 : :
43 : : static inline struct rng_alg *crypto_rng_alg(struct crypto_rng *tfm)
44 : : {
45 : 0 : return &crypto_rng_tfm(tfm)->__crt_alg->cra_rng;
46 : : }
47 : :
48 : : static inline struct rng_tfm *crypto_rng_crt(struct crypto_rng *tfm)
49 : : {
50 : : return &crypto_rng_tfm(tfm)->crt_rng;
51 : : }
52 : :
53 : : static inline void crypto_free_rng(struct crypto_rng *tfm)
54 : : {
55 : 0 : crypto_free_tfm(crypto_rng_tfm(tfm));
56 : : }
57 : :
58 : : static inline int crypto_rng_get_bytes(struct crypto_rng *tfm,
59 : : u8 *rdata, unsigned int dlen)
60 : : {
61 : 0 : return crypto_rng_crt(tfm)->rng_gen_random(tfm, rdata, dlen);
62 : : }
63 : :
64 : : static inline int crypto_rng_reset(struct crypto_rng *tfm,
65 : : u8 *seed, unsigned int slen)
66 : : {
67 : 0 : return crypto_rng_crt(tfm)->rng_reset(tfm, seed, slen);
68 : : }
69 : :
70 : : static inline int crypto_rng_seedsize(struct crypto_rng *tfm)
71 : : {
72 : 0 : return crypto_rng_alg(tfm)->seedsize;
73 : : }
74 : :
75 : : #endif
|