comparison libtomcrypt/src/headers/tomcrypt_prng.h @ 285:1b9e69c058d2

propagate from branch 'au.asn.ucc.matt.ltc.dropbear' (head 20dccfc09627970a312d77fb41dc2970b62689c3) to branch 'au.asn.ucc.matt.dropbear' (head fdf4a7a3b97ae5046139915de7e40399cceb2c01)
author Matt Johnston <matt@ucc.asn.au>
date Wed, 08 Mar 2006 13:23:58 +0000
parents
children 0cbe8f6dbf9e
comparison
equal deleted inserted replaced
281:997e6f7dc01e 285:1b9e69c058d2
1 /* ---- PRNG Stuff ---- */
2 #ifdef YARROW
3 struct yarrow_prng {
4 int cipher, hash;
5 unsigned char pool[MAXBLOCKSIZE];
6 symmetric_CTR ctr;
7 };
8 #endif
9
10 #ifdef RC4
11 struct rc4_prng {
12 int x, y;
13 unsigned char buf[256];
14 };
15 #endif
16
17 #ifdef FORTUNA
18 struct fortuna_prng {
19 hash_state pool[FORTUNA_POOLS]; /* the pools */
20
21 symmetric_key skey;
22
23 unsigned char K[32], /* the current key */
24 IV[16]; /* IV for CTR mode */
25
26 unsigned long pool_idx, /* current pool we will add to */
27 pool0_len, /* length of 0'th pool */
28 wd;
29
30 ulong64 reset_cnt; /* number of times we have reset */
31 };
32 #endif
33
34 #ifdef SOBER128
35 struct sober128_prng {
36 ulong32 R[17], /* Working storage for the shift register */
37 initR[17], /* saved register contents */
38 konst, /* key dependent constant */
39 sbuf; /* partial word encryption buffer */
40
41 int nbuf, /* number of part-word stream bits buffered */
42 flag, /* first add_entropy call or not? */
43 set; /* did we call add_entropy to set key? */
44
45 };
46 #endif
47
48 typedef union Prng_state {
49 #ifdef YARROW
50 struct yarrow_prng yarrow;
51 #endif
52 #ifdef RC4
53 struct rc4_prng rc4;
54 #endif
55 #ifdef FORTUNA
56 struct fortuna_prng fortuna;
57 #endif
58 #ifdef SOBER128
59 struct sober128_prng sober128;
60 #endif
61 } prng_state;
62
63 extern struct ltc_prng_descriptor {
64 /** Name of the PRNG */
65 char *name;
66 /** size in bytes of exported state */
67 int export_size;
68 /** Start a PRNG state
69 @param prng [out] The state to initialize
70 @return CRYPT_OK if successful
71 */
72 int (*start)(prng_state *prng);
73 /** Add entropy to the PRNG
74 @param in The entropy
75 @param inlen Length of the entropy (octets)\
76 @param prng The PRNG state
77 @return CRYPT_OK if successful
78 */
79 int (*add_entropy)(const unsigned char *in, unsigned long inlen, prng_state *prng);
80 /** Ready a PRNG state to read from
81 @param prng The PRNG state to ready
82 @return CRYPT_OK if successful
83 */
84 int (*ready)(prng_state *prng);
85 /** Read from the PRNG
86 @param out [out] Where to store the data
87 @param outlen Length of data desired (octets)
88 @param prng The PRNG state to read from
89 @return Number of octets read
90 */
91 unsigned long (*read)(unsigned char *out, unsigned long outlen, prng_state *prng);
92 /** Terminate a PRNG state
93 @param prng The PRNG state to terminate
94 @return CRYPT_OK if successful
95 */
96 int (*done)(prng_state *prng);
97 /** Export a PRNG state
98 @param out [out] The destination for the state
99 @param outlen [in/out] The max size and resulting size of the PRNG state
100 @param prng The PRNG to export
101 @return CRYPT_OK if successful
102 */
103 int (*pexport)(unsigned char *out, unsigned long *outlen, prng_state *prng);
104 /** Import a PRNG state
105 @param in The data to import
106 @param inlen The length of the data to import (octets)
107 @param prng The PRNG to initialize/import
108 @return CRYPT_OK if successful
109 */
110 int (*pimport)(const unsigned char *in, unsigned long inlen, prng_state *prng);
111 /** Self-test the PRNG
112 @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
113 */
114 int (*test)(void);
115 } prng_descriptor[];
116
117 #ifdef YARROW
118 int yarrow_start(prng_state *prng);
119 int yarrow_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
120 int yarrow_ready(prng_state *prng);
121 unsigned long yarrow_read(unsigned char *out, unsigned long outlen, prng_state *prng);
122 int yarrow_done(prng_state *prng);
123 int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
124 int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
125 int yarrow_test(void);
126 extern const struct ltc_prng_descriptor yarrow_desc;
127 #endif
128
129 #ifdef FORTUNA
130 int fortuna_start(prng_state *prng);
131 int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
132 int fortuna_ready(prng_state *prng);
133 unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state *prng);
134 int fortuna_done(prng_state *prng);
135 int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
136 int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
137 int fortuna_test(void);
138 extern const struct ltc_prng_descriptor fortuna_desc;
139 #endif
140
141 #ifdef RC4
142 int rc4_start(prng_state *prng);
143 int rc4_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
144 int rc4_ready(prng_state *prng);
145 unsigned long rc4_read(unsigned char *out, unsigned long outlen, prng_state *prng);
146 int rc4_done(prng_state *prng);
147 int rc4_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
148 int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
149 int rc4_test(void);
150 extern const struct ltc_prng_descriptor rc4_desc;
151 #endif
152
153 #ifdef SPRNG
154 int sprng_start(prng_state *prng);
155 int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
156 int sprng_ready(prng_state *prng);
157 unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng);
158 int sprng_done(prng_state *prng);
159 int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
160 int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
161 int sprng_test(void);
162 extern const struct ltc_prng_descriptor sprng_desc;
163 #endif
164
165 #ifdef SOBER128
166 int sober128_start(prng_state *prng);
167 int sober128_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng);
168 int sober128_ready(prng_state *prng);
169 unsigned long sober128_read(unsigned char *out, unsigned long outlen, prng_state *prng);
170 int sober128_done(prng_state *prng);
171 int sober128_export(unsigned char *out, unsigned long *outlen, prng_state *prng);
172 int sober128_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
173 int sober128_test(void);
174 extern const struct ltc_prng_descriptor sober128_desc;
175 #endif
176
177 int find_prng(const char *name);
178 int register_prng(const struct ltc_prng_descriptor *prng);
179 int unregister_prng(const struct ltc_prng_descriptor *prng);
180 int prng_is_valid(int idx);
181 LTC_MUTEX_PROTO(ltc_prng_mutex);
182
183 /* Slow RNG you **might** be able to use to seed a PRNG with. Be careful as this
184 * might not work on all platforms as planned
185 */
186 unsigned long rng_get_bytes(unsigned char *out,
187 unsigned long outlen,
188 void (*callback)(void));
189
190 int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void));
191
192
193 /* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_prng.h,v $ */
194 /* $Revision: 1.3 $ */
195 /* $Date: 2005/06/19 18:00:28 $ */