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