Mercurial > dropbear
comparison libtomcrypt/src/headers/tomcrypt_cipher.h @ 399:a707e6148060
merge of '5fdf69ca60d1683cdd9f4c2595134bed26394834'
and '6b61c50f4cf888bea302ac8fcf5dbb573b443251'
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sat, 03 Feb 2007 08:20:34 +0000 |
parents | 0cbe8f6dbf9e |
children | f849a5ca2efc |
comparison
equal
deleted
inserted
replaced
394:17d097fc111c | 399:a707e6148060 |
---|---|
1 /* ---- SYMMETRIC KEY STUFF ----- | |
2 * | |
3 * We put each of the ciphers scheduled keys in their own structs then we put all of | |
4 * the key formats in one union. This makes the function prototypes easier to use. | |
5 */ | |
6 #ifdef BLOWFISH | |
7 struct blowfish_key { | |
8 ulong32 S[4][256]; | |
9 ulong32 K[18]; | |
10 }; | |
11 #endif | |
12 | |
13 #ifdef RC5 | |
14 struct rc5_key { | |
15 int rounds; | |
16 ulong32 K[50]; | |
17 }; | |
18 #endif | |
19 | |
20 #ifdef RC6 | |
21 struct rc6_key { | |
22 ulong32 K[44]; | |
23 }; | |
24 #endif | |
25 | |
26 #ifdef SAFERP | |
27 struct saferp_key { | |
28 unsigned char K[33][16]; | |
29 long rounds; | |
30 }; | |
31 #endif | |
32 | |
33 #ifdef RIJNDAEL | |
34 struct rijndael_key { | |
35 ulong32 eK[60], dK[60]; | |
36 int Nr; | |
37 }; | |
38 #endif | |
39 | |
40 #ifdef KSEED | |
41 struct kseed_key { | |
42 ulong32 K[32], dK[32]; | |
43 }; | |
44 #endif | |
45 | |
46 #ifdef LTC_KASUMI | |
47 struct kasumi_key { | |
48 ulong32 KLi1[8], KLi2[8], | |
49 KOi1[8], KOi2[8], KOi3[8], | |
50 KIi1[8], KIi2[8], KIi3[8]; | |
51 }; | |
52 #endif | |
53 | |
54 #ifdef XTEA | |
55 struct xtea_key { | |
56 unsigned long A[32], B[32]; | |
57 }; | |
58 #endif | |
59 | |
60 #ifdef TWOFISH | |
61 #ifndef TWOFISH_SMALL | |
62 struct twofish_key { | |
63 ulong32 S[4][256], K[40]; | |
64 }; | |
65 #else | |
66 struct twofish_key { | |
67 ulong32 K[40]; | |
68 unsigned char S[32], start; | |
69 }; | |
70 #endif | |
71 #endif | |
72 | |
73 #ifdef SAFER | |
74 #define SAFER_K64_DEFAULT_NOF_ROUNDS 6 | |
75 #define SAFER_K128_DEFAULT_NOF_ROUNDS 10 | |
76 #define SAFER_SK64_DEFAULT_NOF_ROUNDS 8 | |
77 #define SAFER_SK128_DEFAULT_NOF_ROUNDS 10 | |
78 #define SAFER_MAX_NOF_ROUNDS 13 | |
79 #define SAFER_BLOCK_LEN 8 | |
80 #define SAFER_KEY_LEN (1 + SAFER_BLOCK_LEN * (1 + 2 * SAFER_MAX_NOF_ROUNDS)) | |
81 typedef unsigned char safer_block_t[SAFER_BLOCK_LEN]; | |
82 typedef unsigned char safer_key_t[SAFER_KEY_LEN]; | |
83 struct safer_key { safer_key_t key; }; | |
84 #endif | |
85 | |
86 #ifdef RC2 | |
87 struct rc2_key { unsigned xkey[64]; }; | |
88 #endif | |
89 | |
90 #ifdef DES | |
91 struct des_key { | |
92 ulong32 ek[32], dk[32]; | |
93 }; | |
94 | |
95 struct des3_key { | |
96 ulong32 ek[3][32], dk[3][32]; | |
97 }; | |
98 #endif | |
99 | |
100 #ifdef CAST5 | |
101 struct cast5_key { | |
102 ulong32 K[32], keylen; | |
103 }; | |
104 #endif | |
105 | |
106 #ifdef NOEKEON | |
107 struct noekeon_key { | |
108 ulong32 K[4], dK[4]; | |
109 }; | |
110 #endif | |
111 | |
112 #ifdef SKIPJACK | |
113 struct skipjack_key { | |
114 unsigned char key[10]; | |
115 }; | |
116 #endif | |
117 | |
118 #ifdef KHAZAD | |
119 struct khazad_key { | |
120 ulong64 roundKeyEnc[8 + 1]; | |
121 ulong64 roundKeyDec[8 + 1]; | |
122 }; | |
123 #endif | |
124 | |
125 #ifdef ANUBIS | |
126 struct anubis_key { | |
127 int keyBits; | |
128 int R; | |
129 ulong32 roundKeyEnc[18 + 1][4]; | |
130 ulong32 roundKeyDec[18 + 1][4]; | |
131 }; | |
132 #endif | |
133 | |
134 typedef union Symmetric_key { | |
135 #ifdef DES | |
136 struct des_key des; | |
137 struct des3_key des3; | |
138 #endif | |
139 #ifdef RC2 | |
140 struct rc2_key rc2; | |
141 #endif | |
142 #ifdef SAFER | |
143 struct safer_key safer; | |
144 #endif | |
145 #ifdef TWOFISH | |
146 struct twofish_key twofish; | |
147 #endif | |
148 #ifdef BLOWFISH | |
149 struct blowfish_key blowfish; | |
150 #endif | |
151 #ifdef RC5 | |
152 struct rc5_key rc5; | |
153 #endif | |
154 #ifdef RC6 | |
155 struct rc6_key rc6; | |
156 #endif | |
157 #ifdef SAFERP | |
158 struct saferp_key saferp; | |
159 #endif | |
160 #ifdef RIJNDAEL | |
161 struct rijndael_key rijndael; | |
162 #endif | |
163 #ifdef XTEA | |
164 struct xtea_key xtea; | |
165 #endif | |
166 #ifdef CAST5 | |
167 struct cast5_key cast5; | |
168 #endif | |
169 #ifdef NOEKEON | |
170 struct noekeon_key noekeon; | |
171 #endif | |
172 #ifdef SKIPJACK | |
173 struct skipjack_key skipjack; | |
174 #endif | |
175 #ifdef KHAZAD | |
176 struct khazad_key khazad; | |
177 #endif | |
178 #ifdef ANUBIS | |
179 struct anubis_key anubis; | |
180 #endif | |
181 #ifdef KSEED | |
182 struct kseed_key kseed; | |
183 #endif | |
184 #ifdef LTC_KASUMI | |
185 struct kasumi_key kasumi; | |
186 #endif | |
187 void *data; | |
188 } symmetric_key; | |
189 | |
190 #ifdef LTC_ECB_MODE | |
191 /** A block cipher ECB structure */ | |
192 typedef struct { | |
193 /** The index of the cipher chosen */ | |
194 int cipher, | |
195 /** The block size of the given cipher */ | |
196 blocklen; | |
197 /** The scheduled key */ | |
198 symmetric_key key; | |
199 } symmetric_ECB; | |
200 #endif | |
201 | |
202 #ifdef LTC_CFB_MODE | |
203 /** A block cipher CFB structure */ | |
204 typedef struct { | |
205 /** The index of the cipher chosen */ | |
206 int cipher, | |
207 /** The block size of the given cipher */ | |
208 blocklen, | |
209 /** The padding offset */ | |
210 padlen; | |
211 /** The current IV */ | |
212 unsigned char IV[MAXBLOCKSIZE], | |
213 /** The pad used to encrypt/decrypt */ | |
214 pad[MAXBLOCKSIZE]; | |
215 /** The scheduled key */ | |
216 symmetric_key key; | |
217 } symmetric_CFB; | |
218 #endif | |
219 | |
220 #ifdef LTC_OFB_MODE | |
221 /** A block cipher OFB structure */ | |
222 typedef struct { | |
223 /** The index of the cipher chosen */ | |
224 int cipher, | |
225 /** The block size of the given cipher */ | |
226 blocklen, | |
227 /** The padding offset */ | |
228 padlen; | |
229 /** The current IV */ | |
230 unsigned char IV[MAXBLOCKSIZE]; | |
231 /** The scheduled key */ | |
232 symmetric_key key; | |
233 } symmetric_OFB; | |
234 #endif | |
235 | |
236 #ifdef LTC_CBC_MODE | |
237 /** A block cipher CBC structure */ | |
238 typedef struct { | |
239 /** The index of the cipher chosen */ | |
240 int cipher, | |
241 /** The block size of the given cipher */ | |
242 blocklen; | |
243 /** The current IV */ | |
244 unsigned char IV[MAXBLOCKSIZE]; | |
245 /** The scheduled key */ | |
246 symmetric_key key; | |
247 } symmetric_CBC; | |
248 #endif | |
249 | |
250 | |
251 #ifdef LTC_CTR_MODE | |
252 /** A block cipher CTR structure */ | |
253 typedef struct { | |
254 /** The index of the cipher chosen */ | |
255 int cipher, | |
256 /** The block size of the given cipher */ | |
257 blocklen, | |
258 /** The padding offset */ | |
259 padlen, | |
260 /** The mode (endianess) of the CTR, 0==little, 1==big */ | |
261 mode; | |
262 /** The counter */ | |
263 unsigned char ctr[MAXBLOCKSIZE], | |
264 /** The pad used to encrypt/decrypt */ | |
265 pad[MAXBLOCKSIZE]; | |
266 /** The scheduled key */ | |
267 symmetric_key key; | |
268 } symmetric_CTR; | |
269 #endif | |
270 | |
271 | |
272 #ifdef LTC_LRW_MODE | |
273 /** A LRW structure */ | |
274 typedef struct { | |
275 /** The index of the cipher chosen (must be a 128-bit block cipher) */ | |
276 int cipher; | |
277 | |
278 /** The current IV */ | |
279 unsigned char IV[16], | |
280 | |
281 /** the tweak key */ | |
282 tweak[16], | |
283 | |
284 /** The current pad, it's the product of the first 15 bytes against the tweak key */ | |
285 pad[16]; | |
286 | |
287 /** The scheduled symmetric key */ | |
288 symmetric_key key; | |
289 | |
290 #ifdef LRW_TABLES | |
291 /** The pre-computed multiplication table */ | |
292 unsigned char PC[16][256][16]; | |
293 #endif | |
294 } symmetric_LRW; | |
295 #endif | |
296 | |
297 #ifdef LTC_F8_MODE | |
298 /** A block cipher F8 structure */ | |
299 typedef struct { | |
300 /** The index of the cipher chosen */ | |
301 int cipher, | |
302 /** The block size of the given cipher */ | |
303 blocklen, | |
304 /** The padding offset */ | |
305 padlen; | |
306 /** The current IV */ | |
307 unsigned char IV[MAXBLOCKSIZE], | |
308 MIV[MAXBLOCKSIZE]; | |
309 /** Current block count */ | |
310 ulong32 blockcnt; | |
311 /** The scheduled key */ | |
312 symmetric_key key; | |
313 } symmetric_F8; | |
314 #endif | |
315 | |
316 | |
317 /** cipher descriptor table, last entry has "name == NULL" to mark the end of table */ | |
318 extern struct ltc_cipher_descriptor { | |
319 /** name of cipher */ | |
320 char *name; | |
321 /** internal ID */ | |
322 unsigned char ID; | |
323 /** min keysize (octets) */ | |
324 int min_key_length, | |
325 /** max keysize (octets) */ | |
326 max_key_length, | |
327 /** block size (octets) */ | |
328 block_length, | |
329 /** default number of rounds */ | |
330 default_rounds; | |
331 /** Setup the cipher | |
332 @param key The input symmetric key | |
333 @param keylen The length of the input key (octets) | |
334 @param num_rounds The requested number of rounds (0==default) | |
335 @param skey [out] The destination of the scheduled key | |
336 @return CRYPT_OK if successful | |
337 */ | |
338 int (*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
339 /** Encrypt a block | |
340 @param pt The plaintext | |
341 @param ct [out] The ciphertext | |
342 @param skey The scheduled key | |
343 @return CRYPT_OK if successful | |
344 */ | |
345 int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
346 /** Decrypt a block | |
347 @param ct The ciphertext | |
348 @param pt [out] The plaintext | |
349 @param skey The scheduled key | |
350 @return CRYPT_OK if successful | |
351 */ | |
352 int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
353 /** Test the block cipher | |
354 @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled | |
355 */ | |
356 int (*test)(void); | |
357 | |
358 /** Terminate the context | |
359 @param skey The scheduled key | |
360 */ | |
361 void (*done)(symmetric_key *skey); | |
362 | |
363 /** Determine a key size | |
364 @param keysize [in/out] The size of the key desired and the suggested size | |
365 @return CRYPT_OK if successful | |
366 */ | |
367 int (*keysize)(int *keysize); | |
368 | |
369 /** Accelerators **/ | |
370 /** Accelerated ECB encryption | |
371 @param pt Plaintext | |
372 @param ct Ciphertext | |
373 @param blocks The number of complete blocks to process | |
374 @param skey The scheduled key context | |
375 @return CRYPT_OK if successful | |
376 */ | |
377 int (*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey); | |
378 | |
379 /** Accelerated ECB decryption | |
380 @param pt Plaintext | |
381 @param ct Ciphertext | |
382 @param blocks The number of complete blocks to process | |
383 @param skey The scheduled key context | |
384 @return CRYPT_OK if successful | |
385 */ | |
386 int (*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey); | |
387 | |
388 /** Accelerated CBC encryption | |
389 @param pt Plaintext | |
390 @param ct Ciphertext | |
391 @param blocks The number of complete blocks to process | |
392 @param IV The initial value (input/output) | |
393 @param skey The scheduled key context | |
394 @return CRYPT_OK if successful | |
395 */ | |
396 int (*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey); | |
397 | |
398 /** Accelerated CBC decryption | |
399 @param pt Plaintext | |
400 @param ct Ciphertext | |
401 @param blocks The number of complete blocks to process | |
402 @param IV The initial value (input/output) | |
403 @param skey The scheduled key context | |
404 @return CRYPT_OK if successful | |
405 */ | |
406 int (*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey); | |
407 | |
408 /** Accelerated CTR encryption | |
409 @param pt Plaintext | |
410 @param ct Ciphertext | |
411 @param blocks The number of complete blocks to process | |
412 @param IV The initial value (input/output) | |
413 @param mode little or big endian counter (mode=0 or mode=1) | |
414 @param skey The scheduled key context | |
415 @return CRYPT_OK if successful | |
416 */ | |
417 int (*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey); | |
418 | |
419 /** Accelerated LRW | |
420 @param pt Plaintext | |
421 @param ct Ciphertext | |
422 @param blocks The number of complete blocks to process | |
423 @param IV The initial value (input/output) | |
424 @param tweak The LRW tweak | |
425 @param skey The scheduled key context | |
426 @return CRYPT_OK if successful | |
427 */ | |
428 int (*accel_lrw_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey); | |
429 | |
430 /** Accelerated LRW | |
431 @param ct Ciphertext | |
432 @param pt Plaintext | |
433 @param blocks The number of complete blocks to process | |
434 @param IV The initial value (input/output) | |
435 @param tweak The LRW tweak | |
436 @param skey The scheduled key context | |
437 @return CRYPT_OK if successful | |
438 */ | |
439 int (*accel_lrw_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey); | |
440 | |
441 /** Accelerated CCM packet (one-shot) | |
442 @param key The secret key to use | |
443 @param keylen The length of the secret key (octets) | |
444 @param uskey A previously scheduled key [optional can be NULL] | |
445 @param nonce The session nonce [use once] | |
446 @param noncelen The length of the nonce | |
447 @param header The header for the session | |
448 @param headerlen The length of the header (octets) | |
449 @param pt [out] The plaintext | |
450 @param ptlen The length of the plaintext (octets) | |
451 @param ct [out] The ciphertext | |
452 @param tag [out] The destination tag | |
453 @param taglen [in/out] The max size and resulting size of the authentication tag | |
454 @param direction Encrypt or Decrypt direction (0 or 1) | |
455 @return CRYPT_OK if successful | |
456 */ | |
457 int (*accel_ccm_memory)( | |
458 const unsigned char *key, unsigned long keylen, | |
459 symmetric_key *uskey, | |
460 const unsigned char *nonce, unsigned long noncelen, | |
461 const unsigned char *header, unsigned long headerlen, | |
462 unsigned char *pt, unsigned long ptlen, | |
463 unsigned char *ct, | |
464 unsigned char *tag, unsigned long *taglen, | |
465 int direction); | |
466 | |
467 /** Accelerated GCM packet (one shot) | |
468 @param key The secret key | |
469 @param keylen The length of the secret key | |
470 @param IV The initial vector | |
471 @param IVlen The length of the initial vector | |
472 @param adata The additional authentication data (header) | |
473 @param adatalen The length of the adata | |
474 @param pt The plaintext | |
475 @param ptlen The length of the plaintext (ciphertext length is the same) | |
476 @param ct The ciphertext | |
477 @param tag [out] The MAC tag | |
478 @param taglen [in/out] The MAC tag length | |
479 @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) | |
480 @return CRYPT_OK on success | |
481 */ | |
482 int (*accel_gcm_memory)( | |
483 const unsigned char *key, unsigned long keylen, | |
484 const unsigned char *IV, unsigned long IVlen, | |
485 const unsigned char *adata, unsigned long adatalen, | |
486 unsigned char *pt, unsigned long ptlen, | |
487 unsigned char *ct, | |
488 unsigned char *tag, unsigned long *taglen, | |
489 int direction); | |
490 | |
491 /** Accelerated one shot OMAC | |
492 @param key The secret key | |
493 @param keylen The key length (octets) | |
494 @param in The message | |
495 @param inlen Length of message (octets) | |
496 @param out [out] Destination for tag | |
497 @param outlen [in/out] Initial and final size of out | |
498 @return CRYPT_OK on success | |
499 */ | |
500 int (*omac_memory)( | |
501 const unsigned char *key, unsigned long keylen, | |
502 const unsigned char *in, unsigned long inlen, | |
503 unsigned char *out, unsigned long *outlen); | |
504 | |
505 /** Accelerated one shot XCBC | |
506 @param key The secret key | |
507 @param keylen The key length (octets) | |
508 @param in The message | |
509 @param inlen Length of message (octets) | |
510 @param out [out] Destination for tag | |
511 @param outlen [in/out] Initial and final size of out | |
512 @return CRYPT_OK on success | |
513 */ | |
514 int (*xcbc_memory)( | |
515 const unsigned char *key, unsigned long keylen, | |
516 const unsigned char *in, unsigned long inlen, | |
517 unsigned char *out, unsigned long *outlen); | |
518 | |
519 /** Accelerated one shot F9 | |
520 @param key The secret key | |
521 @param keylen The key length (octets) | |
522 @param in The message | |
523 @param inlen Length of message (octets) | |
524 @param out [out] Destination for tag | |
525 @param outlen [in/out] Initial and final size of out | |
526 @return CRYPT_OK on success | |
527 @remark Requires manual padding | |
528 */ | |
529 int (*f9_memory)( | |
530 const unsigned char *key, unsigned long keylen, | |
531 const unsigned char *in, unsigned long inlen, | |
532 unsigned char *out, unsigned long *outlen); | |
533 } cipher_descriptor[]; | |
534 | |
535 #ifdef BLOWFISH | |
536 int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
537 int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
538 int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
539 int blowfish_test(void); | |
540 void blowfish_done(symmetric_key *skey); | |
541 int blowfish_keysize(int *keysize); | |
542 extern const struct ltc_cipher_descriptor blowfish_desc; | |
543 #endif | |
544 | |
545 #ifdef RC5 | |
546 int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
547 int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
548 int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
549 int rc5_test(void); | |
550 void rc5_done(symmetric_key *skey); | |
551 int rc5_keysize(int *keysize); | |
552 extern const struct ltc_cipher_descriptor rc5_desc; | |
553 #endif | |
554 | |
555 #ifdef RC6 | |
556 int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
557 int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
558 int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
559 int rc6_test(void); | |
560 void rc6_done(symmetric_key *skey); | |
561 int rc6_keysize(int *keysize); | |
562 extern const struct ltc_cipher_descriptor rc6_desc; | |
563 #endif | |
564 | |
565 #ifdef RC2 | |
566 int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
567 int rc2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
568 int rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
569 int rc2_test(void); | |
570 void rc2_done(symmetric_key *skey); | |
571 int rc2_keysize(int *keysize); | |
572 extern const struct ltc_cipher_descriptor rc2_desc; | |
573 #endif | |
574 | |
575 #ifdef SAFERP | |
576 int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
577 int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
578 int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
579 int saferp_test(void); | |
580 void saferp_done(symmetric_key *skey); | |
581 int saferp_keysize(int *keysize); | |
582 extern const struct ltc_cipher_descriptor saferp_desc; | |
583 #endif | |
584 | |
585 #ifdef SAFER | |
586 int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
587 int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
588 int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
589 int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
590 int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); | |
591 int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); | |
592 int safer_k64_test(void); | |
593 int safer_sk64_test(void); | |
594 int safer_sk128_test(void); | |
595 void safer_done(symmetric_key *skey); | |
596 int safer_64_keysize(int *keysize); | |
597 int safer_128_keysize(int *keysize); | |
598 extern const struct ltc_cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc; | |
599 #endif | |
600 | |
601 #ifdef RIJNDAEL | |
602 | |
603 /* make aes an alias */ | |
604 #define aes_setup rijndael_setup | |
605 #define aes_ecb_encrypt rijndael_ecb_encrypt | |
606 #define aes_ecb_decrypt rijndael_ecb_decrypt | |
607 #define aes_test rijndael_test | |
608 #define aes_done rijndael_done | |
609 #define aes_keysize rijndael_keysize | |
610 | |
611 #define aes_enc_setup rijndael_enc_setup | |
612 #define aes_enc_ecb_encrypt rijndael_enc_ecb_encrypt | |
613 #define aes_enc_keysize rijndael_enc_keysize | |
614 | |
615 int rijndael_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
616 int rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
617 int rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
618 int rijndael_test(void); | |
619 void rijndael_done(symmetric_key *skey); | |
620 int rijndael_keysize(int *keysize); | |
621 int rijndael_enc_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
622 int rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
623 void rijndael_enc_done(symmetric_key *skey); | |
624 int rijndael_enc_keysize(int *keysize); | |
625 extern const struct ltc_cipher_descriptor rijndael_desc, aes_desc; | |
626 extern const struct ltc_cipher_descriptor rijndael_enc_desc, aes_enc_desc; | |
627 #endif | |
628 | |
629 #ifdef XTEA | |
630 int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
631 int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
632 int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
633 int xtea_test(void); | |
634 void xtea_done(symmetric_key *skey); | |
635 int xtea_keysize(int *keysize); | |
636 extern const struct ltc_cipher_descriptor xtea_desc; | |
637 #endif | |
638 | |
639 #ifdef TWOFISH | |
640 int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
641 int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
642 int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
643 int twofish_test(void); | |
644 void twofish_done(symmetric_key *skey); | |
645 int twofish_keysize(int *keysize); | |
646 extern const struct ltc_cipher_descriptor twofish_desc; | |
647 #endif | |
648 | |
649 #ifdef DES | |
650 int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
651 int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
652 int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
653 int des_test(void); | |
654 void des_done(symmetric_key *skey); | |
655 int des_keysize(int *keysize); | |
656 int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
657 int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
658 int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
659 int des3_test(void); | |
660 void des3_done(symmetric_key *skey); | |
661 int des3_keysize(int *keysize); | |
662 extern const struct ltc_cipher_descriptor des_desc, des3_desc; | |
663 #endif | |
664 | |
665 #ifdef CAST5 | |
666 int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
667 int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
668 int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
669 int cast5_test(void); | |
670 void cast5_done(symmetric_key *skey); | |
671 int cast5_keysize(int *keysize); | |
672 extern const struct ltc_cipher_descriptor cast5_desc; | |
673 #endif | |
674 | |
675 #ifdef NOEKEON | |
676 int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
677 int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
678 int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
679 int noekeon_test(void); | |
680 void noekeon_done(symmetric_key *skey); | |
681 int noekeon_keysize(int *keysize); | |
682 extern const struct ltc_cipher_descriptor noekeon_desc; | |
683 #endif | |
684 | |
685 #ifdef SKIPJACK | |
686 int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
687 int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
688 int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
689 int skipjack_test(void); | |
690 void skipjack_done(symmetric_key *skey); | |
691 int skipjack_keysize(int *keysize); | |
692 extern const struct ltc_cipher_descriptor skipjack_desc; | |
693 #endif | |
694 | |
695 #ifdef KHAZAD | |
696 int khazad_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
697 int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
698 int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
699 int khazad_test(void); | |
700 void khazad_done(symmetric_key *skey); | |
701 int khazad_keysize(int *keysize); | |
702 extern const struct ltc_cipher_descriptor khazad_desc; | |
703 #endif | |
704 | |
705 #ifdef ANUBIS | |
706 int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
707 int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
708 int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
709 int anubis_test(void); | |
710 void anubis_done(symmetric_key *skey); | |
711 int anubis_keysize(int *keysize); | |
712 extern const struct ltc_cipher_descriptor anubis_desc; | |
713 #endif | |
714 | |
715 #ifdef KSEED | |
716 int kseed_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
717 int kseed_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
718 int kseed_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
719 int kseed_test(void); | |
720 void kseed_done(symmetric_key *skey); | |
721 int kseed_keysize(int *keysize); | |
722 extern const struct ltc_cipher_descriptor kseed_desc; | |
723 #endif | |
724 | |
725 #ifdef LTC_KASUMI | |
726 int kasumi_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); | |
727 int kasumi_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); | |
728 int kasumi_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); | |
729 int kasumi_test(void); | |
730 void kasumi_done(symmetric_key *skey); | |
731 int kasumi_keysize(int *keysize); | |
732 extern const struct ltc_cipher_descriptor kasumi_desc; | |
733 #endif | |
734 | |
735 #ifdef LTC_ECB_MODE | |
736 int ecb_start(int cipher, const unsigned char *key, | |
737 int keylen, int num_rounds, symmetric_ECB *ecb); | |
738 int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_ECB *ecb); | |
739 int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_ECB *ecb); | |
740 int ecb_done(symmetric_ECB *ecb); | |
741 #endif | |
742 | |
743 #ifdef LTC_CFB_MODE | |
744 int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, | |
745 int keylen, int num_rounds, symmetric_CFB *cfb); | |
746 int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CFB *cfb); | |
747 int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CFB *cfb); | |
748 int cfb_getiv(unsigned char *IV, unsigned long *len, symmetric_CFB *cfb); | |
749 int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb); | |
750 int cfb_done(symmetric_CFB *cfb); | |
751 #endif | |
752 | |
753 #ifdef LTC_OFB_MODE | |
754 int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, | |
755 int keylen, int num_rounds, symmetric_OFB *ofb); | |
756 int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb); | |
757 int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb); | |
758 int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb); | |
759 int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb); | |
760 int ofb_done(symmetric_OFB *ofb); | |
761 #endif | |
762 | |
763 #ifdef LTC_CBC_MODE | |
764 int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, | |
765 int keylen, int num_rounds, symmetric_CBC *cbc); | |
766 int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CBC *cbc); | |
767 int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CBC *cbc); | |
768 int cbc_getiv(unsigned char *IV, unsigned long *len, symmetric_CBC *cbc); | |
769 int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc); | |
770 int cbc_done(symmetric_CBC *cbc); | |
771 #endif | |
772 | |
773 #ifdef LTC_CTR_MODE | |
774 | |
775 #define CTR_COUNTER_LITTLE_ENDIAN 0 | |
776 #define CTR_COUNTER_BIG_ENDIAN 1 | |
777 #define LTC_CTR_RFC3686 2 | |
778 | |
779 int ctr_start( int cipher, | |
780 const unsigned char *IV, | |
781 const unsigned char *key, int keylen, | |
782 int num_rounds, int ctr_mode, | |
783 symmetric_CTR *ctr); | |
784 int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr); | |
785 int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr); | |
786 int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr); | |
787 int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr); | |
788 int ctr_done(symmetric_CTR *ctr); | |
789 int ctr_test(void); | |
790 #endif | |
791 | |
792 #ifdef LTC_LRW_MODE | |
793 | |
794 #define LRW_ENCRYPT 0 | |
795 #define LRW_DECRYPT 1 | |
796 | |
797 int lrw_start( int cipher, | |
798 const unsigned char *IV, | |
799 const unsigned char *key, int keylen, | |
800 const unsigned char *tweak, | |
801 int num_rounds, | |
802 symmetric_LRW *lrw); | |
803 int lrw_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_LRW *lrw); | |
804 int lrw_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_LRW *lrw); | |
805 int lrw_getiv(unsigned char *IV, unsigned long *len, symmetric_LRW *lrw); | |
806 int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw); | |
807 int lrw_done(symmetric_LRW *lrw); | |
808 int lrw_test(void); | |
809 | |
810 /* don't call */ | |
811 int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, int mode, symmetric_LRW *lrw); | |
812 #endif | |
813 | |
814 #ifdef LTC_F8_MODE | |
815 int f8_start( int cipher, const unsigned char *IV, | |
816 const unsigned char *key, int keylen, | |
817 const unsigned char *salt_key, int skeylen, | |
818 int num_rounds, symmetric_F8 *f8); | |
819 int f8_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_F8 *f8); | |
820 int f8_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_F8 *f8); | |
821 int f8_getiv(unsigned char *IV, unsigned long *len, symmetric_F8 *f8); | |
822 int f8_setiv(const unsigned char *IV, unsigned long len, symmetric_F8 *f8); | |
823 int f8_done(symmetric_F8 *f8); | |
824 int f8_test_mode(void); | |
825 #endif | |
826 | |
827 | |
828 int find_cipher(const char *name); | |
829 int find_cipher_any(const char *name, int blocklen, int keylen); | |
830 int find_cipher_id(unsigned char ID); | |
831 int register_cipher(const struct ltc_cipher_descriptor *cipher); | |
832 int unregister_cipher(const struct ltc_cipher_descriptor *cipher); | |
833 int cipher_is_valid(int idx); | |
834 | |
835 LTC_MUTEX_PROTO(ltc_cipher_mutex) | |
836 | |
837 /* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_cipher.h,v $ */ | |
838 /* $Revision: 1.46 $ */ | |
839 /* $Date: 2006/11/13 23:09:38 $ */ |