Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/include/crypto/rng.h
10817 views
1
/*
2
* RNG: Random Number Generator algorithms under the crypto API
3
*
4
* Copyright (c) 2008 Neil Horman <[email protected]>
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
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
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
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
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
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
return crypto_rng_alg(tfm)->seedsize;
73
}
74
75
#endif
76
77