Blame view
include/linux/random.h
2.87 KB
1da177e4c
|
1 2 3 4 5 |
/* * include/linux/random.h * * Include file for the random number generator. */ |
1da177e4c
|
6 7 |
#ifndef _LINUX_RANDOM_H #define _LINUX_RANDOM_H |
607ca46e9
|
8 |
#include <uapi/linux/random.h> |
1da177e4c
|
9 |
|
a2080a67a
|
10 |
extern void add_device_randomness(const void *, unsigned int); |
1da177e4c
|
11 12 |
extern void add_input_randomness(unsigned int type, unsigned int code, unsigned int value); |
775f4b297
|
13 |
extern void add_interrupt_randomness(int irq, int irq_flags); |
1da177e4c
|
14 15 |
extern void get_random_bytes(void *buf, int nbytes); |
c2557a303
|
16 |
extern void get_random_bytes_arch(void *buf, int nbytes); |
1da177e4c
|
17 |
void generate_random_uuid(unsigned char uuid_out[16]); |
47d06e532
|
18 |
extern int random_int_secret_init(void); |
1da177e4c
|
19 |
|
1da177e4c
|
20 |
#ifndef MODULE |
540473208
|
21 |
extern const struct file_operations random_fops, urandom_fops; |
1da177e4c
|
22 23 24 25 |
#endif unsigned int get_random_int(void); unsigned long randomize_range(unsigned long start, unsigned long end, unsigned long len); |
496f2f93b
|
26 |
u32 prandom_u32(void); |
6582c665d
|
27 |
void prandom_bytes(void *buf, int nbytes); |
496f2f93b
|
28 |
void prandom_seed(u32 seed); |
4af712e8d
|
29 |
void prandom_reseed_late(void); |
aaa248f6c
|
30 |
|
38e9efcdb
|
31 |
struct rnd_state { |
a98814cef
|
32 |
__u32 s1, s2, s3, s4; |
38e9efcdb
|
33 |
}; |
a98814cef
|
34 |
u32 prandom_u32_state(struct rnd_state *state); |
6582c665d
|
35 |
void prandom_bytes_state(struct rnd_state *state, void *buf, int nbytes); |
5960164fd
|
36 |
|
f337db64a
|
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
/** * prandom_u32_max - returns a pseudo-random number in interval [0, ep_ro) * @ep_ro: right open interval endpoint * * Returns a pseudo-random number that is in interval [0, ep_ro). Note * that the result depends on PRNG being well distributed in [0, ~0U] * u32 space. Here we use maximally equidistributed combined Tausworthe * generator, that is, prandom_u32(). This is useful when requesting a * random index of an array containing ep_ro elements, for example. * * Returns: pseudo-random number in interval [0, ep_ro) */ static inline u32 prandom_u32_max(u32 ep_ro) { return (u32)(((u64) prandom_u32() * ep_ro) >> 32); } |
5960164fd
|
53 54 55 56 57 58 59 60 61 |
/* * Handle minimum values for seeds */ static inline u32 __seed(u32 x, u32 m) { return (x < m) ? x + m : x; } /** |
496f2f93b
|
62 |
* prandom_seed_state - set seed for prandom_u32_state(). |
5960164fd
|
63 64 65 |
* @state: pointer to state structure to receive the seed. * @seed: arbitrary 64-bit value to use as a seed. */ |
496f2f93b
|
66 |
static inline void prandom_seed_state(struct rnd_state *state, u64 seed) |
5960164fd
|
67 68 |
{ u32 i = (seed >> 32) ^ (seed << 10) ^ seed; |
a98814cef
|
69 70 71 72 |
state->s1 = __seed(i, 2U); state->s2 = __seed(i, 8U); state->s3 = __seed(i, 16U); state->s4 = __seed(i, 128U); |
5960164fd
|
73 |
} |
63d771732
|
74 75 76 77 78 79 80 81 82 83 84 |
#ifdef CONFIG_ARCH_RANDOM # include <asm/archrandom.h> #else static inline int arch_get_random_long(unsigned long *v) { return 0; } static inline int arch_get_random_int(unsigned int *v) { return 0; } |
7b878d4b4
|
85 86 87 88 |
static inline int arch_has_random(void) { return 0; } |
d20f78d25
|
89 90 91 92 93 94 95 96 |
static inline int arch_get_random_seed_long(unsigned long *v) { return 0; } static inline int arch_get_random_seed_int(unsigned int *v) { return 0; } |
7b878d4b4
|
97 98 99 100 |
static inline int arch_has_random_seed(void) { return 0; } |
63d771732
|
101 |
#endif |
055dc21a1
|
102 103 104 105 106 |
/* Pseudo random number generator from numerical recipes. */ static inline u32 next_pseudo_random32(u32 seed) { return seed * 1664525 + 1013904223; } |
1da177e4c
|
107 |
#endif /* _LINUX_RANDOM_H */ |