Mercurial > dropbear
comparison libtomcrypt/src/misc/crypt/crypt_sizes.c @ 1471:6dba84798cd5
Update to libtomcrypt 1.18.1, merged with Dropbear changes
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Fri, 09 Feb 2018 21:44:05 +0800 |
parents | |
children | e9dba7abd939 |
comparison
equal
deleted
inserted
replaced
1470:8bba51a55704 | 1471:6dba84798cd5 |
---|---|
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis | |
2 * | |
3 * LibTomCrypt is a library that provides various cryptographic | |
4 * algorithms in a highly modular and flexible manner. | |
5 * | |
6 * The library is free for all purposes without any express | |
7 * guarantee it works. | |
8 */ | |
9 #include "tomcrypt.h" | |
10 | |
11 /** | |
12 @file crypt_sizes.c | |
13 | |
14 Make various struct sizes available to dynamic languages | |
15 like Python - Larry Bugbee, February 2013 | |
16 | |
17 LB - Dec 2013 - revised to include compiler define options | |
18 */ | |
19 | |
20 | |
21 typedef struct { | |
22 const char *name; | |
23 const unsigned int size; | |
24 } crypt_size; | |
25 | |
26 #define _SZ_STRINGIFY_S(s) { #s, sizeof(struct s) } | |
27 #define _SZ_STRINGIFY_T(s) { #s, sizeof(s) } | |
28 | |
29 static const crypt_size _crypt_sizes[] = { | |
30 /* hash state sizes */ | |
31 _SZ_STRINGIFY_S(ltc_hash_descriptor), | |
32 _SZ_STRINGIFY_T(hash_state), | |
33 #ifdef LTC_CHC_HASH | |
34 _SZ_STRINGIFY_S(chc_state), | |
35 #endif | |
36 #ifdef LTC_WHIRLPOOL | |
37 _SZ_STRINGIFY_S(whirlpool_state), | |
38 #endif | |
39 #ifdef LTC_SHA3 | |
40 _SZ_STRINGIFY_S(sha3_state), | |
41 #endif | |
42 #ifdef LTC_SHA512 | |
43 _SZ_STRINGIFY_S(sha512_state), | |
44 #endif | |
45 #ifdef LTC_SHA256 | |
46 _SZ_STRINGIFY_S(sha256_state), | |
47 #endif | |
48 #ifdef LTC_SHA1 | |
49 _SZ_STRINGIFY_S(sha1_state), | |
50 #endif | |
51 #ifdef LTC_MD5 | |
52 _SZ_STRINGIFY_S(md5_state), | |
53 #endif | |
54 #ifdef LTC_MD4 | |
55 _SZ_STRINGIFY_S(md4_state), | |
56 #endif | |
57 #ifdef LTC_MD2 | |
58 _SZ_STRINGIFY_S(md2_state), | |
59 #endif | |
60 #ifdef LTC_TIGER | |
61 _SZ_STRINGIFY_S(tiger_state), | |
62 #endif | |
63 #ifdef LTC_RIPEMD128 | |
64 _SZ_STRINGIFY_S(rmd128_state), | |
65 #endif | |
66 #ifdef LTC_RIPEMD160 | |
67 _SZ_STRINGIFY_S(rmd160_state), | |
68 #endif | |
69 #ifdef LTC_RIPEMD256 | |
70 _SZ_STRINGIFY_S(rmd256_state), | |
71 #endif | |
72 #ifdef LTC_RIPEMD320 | |
73 _SZ_STRINGIFY_S(rmd320_state), | |
74 #endif | |
75 #ifdef LTC_BLAKE2S | |
76 _SZ_STRINGIFY_S(blake2s_state), | |
77 #endif | |
78 #ifdef LTC_BLAKE2B | |
79 _SZ_STRINGIFY_S(blake2b_state), | |
80 #endif | |
81 | |
82 /* block cipher key sizes */ | |
83 _SZ_STRINGIFY_S(ltc_cipher_descriptor), | |
84 _SZ_STRINGIFY_T(symmetric_key), | |
85 #ifdef LTC_ANUBIS | |
86 _SZ_STRINGIFY_S(anubis_key), | |
87 #endif | |
88 #ifdef LTC_CAMELLIA | |
89 _SZ_STRINGIFY_S(camellia_key), | |
90 #endif | |
91 #ifdef LTC_BLOWFISH | |
92 _SZ_STRINGIFY_S(blowfish_key), | |
93 #endif | |
94 #ifdef LTC_CAST5 | |
95 _SZ_STRINGIFY_S(cast5_key), | |
96 #endif | |
97 #ifdef LTC_DES | |
98 _SZ_STRINGIFY_S(des_key), | |
99 _SZ_STRINGIFY_S(des3_key), | |
100 #endif | |
101 #ifdef LTC_KASUMI | |
102 _SZ_STRINGIFY_S(kasumi_key), | |
103 #endif | |
104 #ifdef LTC_KHAZAD | |
105 _SZ_STRINGIFY_S(khazad_key), | |
106 #endif | |
107 #ifdef LTC_KSEED | |
108 _SZ_STRINGIFY_S(kseed_key), | |
109 #endif | |
110 #ifdef LTC_MULTI2 | |
111 _SZ_STRINGIFY_S(multi2_key), | |
112 #endif | |
113 #ifdef LTC_NOEKEON | |
114 _SZ_STRINGIFY_S(noekeon_key), | |
115 #endif | |
116 #ifdef LTC_RC2 | |
117 _SZ_STRINGIFY_S(rc2_key), | |
118 #endif | |
119 #ifdef LTC_RC5 | |
120 _SZ_STRINGIFY_S(rc5_key), | |
121 #endif | |
122 #ifdef LTC_RC6 | |
123 _SZ_STRINGIFY_S(rc6_key), | |
124 #endif | |
125 #ifdef LTC_SKIPJACK | |
126 _SZ_STRINGIFY_S(skipjack_key), | |
127 #endif | |
128 #ifdef LTC_XTEA | |
129 _SZ_STRINGIFY_S(xtea_key), | |
130 #endif | |
131 #ifdef LTC_RIJNDAEL | |
132 _SZ_STRINGIFY_S(rijndael_key), | |
133 #endif | |
134 #ifdef LTC_SAFER | |
135 _SZ_STRINGIFY_S(safer_key), | |
136 #endif | |
137 #ifdef LTC_SAFERP | |
138 _SZ_STRINGIFY_S(saferp_key), | |
139 #endif | |
140 #ifdef LTC_TWOFISH | |
141 _SZ_STRINGIFY_S(twofish_key), | |
142 #endif | |
143 | |
144 /* mode sizes */ | |
145 #ifdef LTC_ECB_MODE | |
146 _SZ_STRINGIFY_T(symmetric_ECB), | |
147 #endif | |
148 #ifdef LTC_CFB_MODE | |
149 _SZ_STRINGIFY_T(symmetric_CFB), | |
150 #endif | |
151 #ifdef LTC_OFB_MODE | |
152 _SZ_STRINGIFY_T(symmetric_OFB), | |
153 #endif | |
154 #ifdef LTC_CBC_MODE | |
155 _SZ_STRINGIFY_T(symmetric_CBC), | |
156 #endif | |
157 #ifdef LTC_CTR_MODE | |
158 _SZ_STRINGIFY_T(symmetric_CTR), | |
159 #endif | |
160 #ifdef LTC_LRW_MODE | |
161 _SZ_STRINGIFY_T(symmetric_LRW), | |
162 #endif | |
163 #ifdef LTC_F8_MODE | |
164 _SZ_STRINGIFY_T(symmetric_F8), | |
165 #endif | |
166 #ifdef LTC_XTS_MODE | |
167 _SZ_STRINGIFY_T(symmetric_xts), | |
168 #endif | |
169 | |
170 /* stream cipher sizes */ | |
171 #ifdef LTC_CHACHA | |
172 _SZ_STRINGIFY_T(chacha_state), | |
173 #endif | |
174 #ifdef LTC_RC4_STREAM | |
175 _SZ_STRINGIFY_T(rc4_state), | |
176 #endif | |
177 #ifdef LTC_SOBER128_STREAM | |
178 _SZ_STRINGIFY_T(sober128_state), | |
179 #endif | |
180 | |
181 /* MAC sizes -- no states for ccm, lrw */ | |
182 #ifdef LTC_HMAC | |
183 _SZ_STRINGIFY_T(hmac_state), | |
184 #endif | |
185 #ifdef LTC_OMAC | |
186 _SZ_STRINGIFY_T(omac_state), | |
187 #endif | |
188 #ifdef LTC_PMAC | |
189 _SZ_STRINGIFY_T(pmac_state), | |
190 #endif | |
191 #ifdef LTC_POLY1305 | |
192 _SZ_STRINGIFY_T(poly1305_state), | |
193 #endif | |
194 #ifdef LTC_EAX_MODE | |
195 _SZ_STRINGIFY_T(eax_state), | |
196 #endif | |
197 #ifdef LTC_OCB_MODE | |
198 _SZ_STRINGIFY_T(ocb_state), | |
199 #endif | |
200 #ifdef LTC_OCB3_MODE | |
201 _SZ_STRINGIFY_T(ocb3_state), | |
202 #endif | |
203 #ifdef LTC_CCM_MODE | |
204 _SZ_STRINGIFY_T(ccm_state), | |
205 #endif | |
206 #ifdef LTC_GCM_MODE | |
207 _SZ_STRINGIFY_T(gcm_state), | |
208 #endif | |
209 #ifdef LTC_PELICAN | |
210 _SZ_STRINGIFY_T(pelican_state), | |
211 #endif | |
212 #ifdef LTC_XCBC | |
213 _SZ_STRINGIFY_T(xcbc_state), | |
214 #endif | |
215 #ifdef LTC_F9_MODE | |
216 _SZ_STRINGIFY_T(f9_state), | |
217 #endif | |
218 #ifdef LTC_CHACHA20POLY1305_MODE | |
219 _SZ_STRINGIFY_T(chacha20poly1305_state), | |
220 #endif | |
221 | |
222 /* asymmetric keys */ | |
223 #ifdef LTC_MRSA | |
224 _SZ_STRINGIFY_T(rsa_key), | |
225 #endif | |
226 #ifdef LTC_MDSA | |
227 _SZ_STRINGIFY_T(dsa_key), | |
228 #endif | |
229 #ifdef LTC_MDH | |
230 _SZ_STRINGIFY_T(dh_key), | |
231 #endif | |
232 #ifdef LTC_MECC | |
233 _SZ_STRINGIFY_T(ltc_ecc_set_type), | |
234 _SZ_STRINGIFY_T(ecc_point), | |
235 _SZ_STRINGIFY_T(ecc_key), | |
236 #endif | |
237 #ifdef LTC_MKAT | |
238 _SZ_STRINGIFY_T(katja_key), | |
239 #endif | |
240 | |
241 /* DER handling */ | |
242 #ifdef LTC_DER | |
243 _SZ_STRINGIFY_T(ltc_asn1_list), /* a list entry */ | |
244 _SZ_STRINGIFY_T(ltc_utctime), | |
245 _SZ_STRINGIFY_T(ltc_generalizedtime), | |
246 #endif | |
247 | |
248 /* prng state sizes */ | |
249 _SZ_STRINGIFY_S(ltc_prng_descriptor), | |
250 _SZ_STRINGIFY_T(prng_state), | |
251 #ifdef LTC_FORTUNA | |
252 _SZ_STRINGIFY_S(fortuna_prng), | |
253 #endif | |
254 #ifdef LTC_CHACHA20_PRNG | |
255 _SZ_STRINGIFY_S(chacha20_prng), | |
256 #endif | |
257 #ifdef LTC_RC4 | |
258 _SZ_STRINGIFY_S(rc4_prng), | |
259 #endif | |
260 #ifdef LTC_SOBER128 | |
261 _SZ_STRINGIFY_S(sober128_prng), | |
262 #endif | |
263 #ifdef LTC_YARROW | |
264 _SZ_STRINGIFY_S(yarrow_prng), | |
265 #endif | |
266 /* sprng has no state as it uses other potentially available sources */ | |
267 /* like /dev/random. See Developers Guide for more info. */ | |
268 | |
269 #ifdef LTC_ADLER32 | |
270 _SZ_STRINGIFY_T(adler32_state), | |
271 #endif | |
272 #ifdef LTC_CRC32 | |
273 _SZ_STRINGIFY_T(crc32_state), | |
274 #endif | |
275 | |
276 _SZ_STRINGIFY_T(ltc_mp_digit), | |
277 _SZ_STRINGIFY_T(ltc_math_descriptor) | |
278 | |
279 }; | |
280 | |
281 /* crypt_get_size() | |
282 * sizeout will be the size (bytes) of the named struct or union | |
283 * return -1 if named item not found | |
284 */ | |
285 int crypt_get_size(const char* namein, unsigned int *sizeout) { | |
286 int i; | |
287 int count = sizeof(_crypt_sizes) / sizeof(_crypt_sizes[0]); | |
288 for (i=0; i<count; i++) { | |
289 if (XSTRCMP(_crypt_sizes[i].name, namein) == 0) { | |
290 *sizeout = _crypt_sizes[i].size; | |
291 return 0; | |
292 } | |
293 } | |
294 return -1; | |
295 } | |
296 | |
297 /* crypt_list_all_sizes() | |
298 * if names_list is NULL, names_list_size will be the minimum | |
299 * size needed to receive the complete names_list | |
300 * if names_list is NOT NULL, names_list must be the addr with | |
301 * sufficient memory allocated into which the names_list | |
302 * is to be written. Also, the value in names_list_size | |
303 * sets the upper bound of the number of characters to be | |
304 * written. | |
305 * a -1 return value signifies insufficient space made available | |
306 */ | |
307 int crypt_list_all_sizes(char *names_list, unsigned int *names_list_size) { | |
308 int i; | |
309 unsigned int total_len = 0; | |
310 char number[32], *ptr; | |
311 int number_len; | |
312 int count = sizeof(_crypt_sizes) / sizeof(_crypt_sizes[0]); | |
313 | |
314 /* calculate amount of memory required for the list */ | |
315 for (i=0; i<count; i++) { | |
316 total_len += (unsigned int)strlen(_crypt_sizes[i].name) + 1; | |
317 /* the above +1 is for the commas */ | |
318 number_len = snprintf(number, sizeof(number), "%u", _crypt_sizes[i].size); | |
319 if ((number_len < 0) || | |
320 ((unsigned int)number_len >= sizeof(number))) | |
321 return -1; | |
322 total_len += (unsigned int)strlen(number) + 1; | |
323 /* this last +1 is for newlines (and ending NULL) */ | |
324 } | |
325 | |
326 if (names_list == NULL) { | |
327 *names_list_size = total_len; | |
328 } else { | |
329 if (total_len > *names_list_size) { | |
330 return -1; | |
331 } | |
332 /* build the names list */ | |
333 ptr = names_list; | |
334 for (i=0; i<count; i++) { | |
335 strcpy(ptr, _crypt_sizes[i].name); | |
336 ptr += strlen(_crypt_sizes[i].name); | |
337 strcpy(ptr, ","); | |
338 ptr += 1; | |
339 | |
340 number_len = snprintf(number, sizeof(number), "%u", _crypt_sizes[i].size); | |
341 strcpy(ptr, number); | |
342 ptr += number_len; | |
343 strcpy(ptr, "\n"); | |
344 ptr += 1; | |
345 } | |
346 /* to remove the trailing new-line */ | |
347 ptr -= 1; | |
348 *ptr = 0; | |
349 } | |
350 return 0; | |
351 } | |
352 | |
353 | |
354 /* ref: $Format:%D$ */ | |
355 /* git commit: $Format:%H$ */ | |
356 /* commit time: $Format:%ai$ */ |