Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/tomcrypt/src/headers/tomcrypt_cipher.h
5971 views
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
10
/* ---- SYMMETRIC KEY STUFF -----
11
*
12
* We put each of the ciphers scheduled keys in their own structs then we put all of
13
* the key formats in one union. This makes the function prototypes easier to use.
14
*/
15
#ifdef LTC_BLOWFISH
16
struct blowfish_key {
17
ulong32 S[4][256];
18
ulong32 K[18];
19
};
20
#endif
21
22
#ifdef LTC_RC5
23
struct rc5_key {
24
int rounds;
25
ulong32 K[50];
26
};
27
#endif
28
29
#ifdef LTC_RC6
30
struct rc6_key {
31
ulong32 K[44];
32
};
33
#endif
34
35
#ifdef LTC_SAFERP
36
struct saferp_key {
37
unsigned char K[33][16];
38
long rounds;
39
};
40
#endif
41
42
#ifdef LTC_RIJNDAEL
43
struct rijndael_key {
44
ulong32 eK[60], dK[60];
45
int Nr;
46
};
47
#endif
48
49
#ifdef LTC_KSEED
50
struct kseed_key {
51
ulong32 K[32], dK[32];
52
};
53
#endif
54
55
#ifdef LTC_KASUMI
56
struct kasumi_key {
57
ulong32 KLi1[8], KLi2[8],
58
KOi1[8], KOi2[8], KOi3[8],
59
KIi1[8], KIi2[8], KIi3[8];
60
};
61
#endif
62
63
#ifdef LTC_XTEA
64
struct xtea_key {
65
unsigned long A[32], B[32];
66
};
67
#endif
68
69
#ifdef LTC_TWOFISH
70
#ifndef LTC_TWOFISH_SMALL
71
struct twofish_key {
72
ulong32 S[4][256], K[40];
73
};
74
#else
75
struct twofish_key {
76
ulong32 K[40];
77
unsigned char S[32], start;
78
};
79
#endif
80
#endif
81
82
#ifdef LTC_SAFER
83
#define LTC_SAFER_K64_DEFAULT_NOF_ROUNDS 6
84
#define LTC_SAFER_K128_DEFAULT_NOF_ROUNDS 10
85
#define LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS 8
86
#define LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS 10
87
#define LTC_SAFER_MAX_NOF_ROUNDS 13
88
#define LTC_SAFER_BLOCK_LEN 8
89
#define LTC_SAFER_KEY_LEN (1 + LTC_SAFER_BLOCK_LEN * (1 + 2 * LTC_SAFER_MAX_NOF_ROUNDS))
90
typedef unsigned char safer_block_t[LTC_SAFER_BLOCK_LEN];
91
typedef unsigned char safer_key_t[LTC_SAFER_KEY_LEN];
92
struct safer_key { safer_key_t key; };
93
#endif
94
95
#ifdef LTC_RC2
96
struct rc2_key { unsigned xkey[64]; };
97
#endif
98
99
#ifdef LTC_DES
100
struct des_key {
101
ulong32 ek[32], dk[32];
102
};
103
104
struct des3_key {
105
ulong32 ek[3][32], dk[3][32];
106
};
107
#endif
108
109
#ifdef LTC_CAST5
110
struct cast5_key {
111
ulong32 K[32], keylen;
112
};
113
#endif
114
115
#ifdef LTC_NOEKEON
116
struct noekeon_key {
117
ulong32 K[4], dK[4];
118
};
119
#endif
120
121
#ifdef LTC_SKIPJACK
122
struct skipjack_key {
123
unsigned char key[10];
124
};
125
#endif
126
127
#ifdef LTC_KHAZAD
128
struct khazad_key {
129
ulong64 roundKeyEnc[8 + 1];
130
ulong64 roundKeyDec[8 + 1];
131
};
132
#endif
133
134
#ifdef LTC_ANUBIS
135
struct anubis_key {
136
int keyBits;
137
int R;
138
ulong32 roundKeyEnc[18 + 1][4];
139
ulong32 roundKeyDec[18 + 1][4];
140
};
141
#endif
142
143
#ifdef LTC_MULTI2
144
struct multi2_key {
145
int N;
146
ulong32 uk[8];
147
};
148
#endif
149
150
#ifdef LTC_CAMELLIA
151
struct camellia_key {
152
int R;
153
ulong64 kw[4], k[24], kl[6];
154
};
155
#endif
156
157
typedef union Symmetric_key {
158
#ifdef LTC_DES
159
struct des_key des;
160
struct des3_key des3;
161
#endif
162
#ifdef LTC_RC2
163
struct rc2_key rc2;
164
#endif
165
#ifdef LTC_SAFER
166
struct safer_key safer;
167
#endif
168
#ifdef LTC_TWOFISH
169
struct twofish_key twofish;
170
#endif
171
#ifdef LTC_BLOWFISH
172
struct blowfish_key blowfish;
173
#endif
174
#ifdef LTC_RC5
175
struct rc5_key rc5;
176
#endif
177
#ifdef LTC_RC6
178
struct rc6_key rc6;
179
#endif
180
#ifdef LTC_SAFERP
181
struct saferp_key saferp;
182
#endif
183
#ifdef LTC_RIJNDAEL
184
struct rijndael_key rijndael;
185
#endif
186
#ifdef LTC_XTEA
187
struct xtea_key xtea;
188
#endif
189
#ifdef LTC_CAST5
190
struct cast5_key cast5;
191
#endif
192
#ifdef LTC_NOEKEON
193
struct noekeon_key noekeon;
194
#endif
195
#ifdef LTC_SKIPJACK
196
struct skipjack_key skipjack;
197
#endif
198
#ifdef LTC_KHAZAD
199
struct khazad_key khazad;
200
#endif
201
#ifdef LTC_ANUBIS
202
struct anubis_key anubis;
203
#endif
204
#ifdef LTC_KSEED
205
struct kseed_key kseed;
206
#endif
207
#ifdef LTC_KASUMI
208
struct kasumi_key kasumi;
209
#endif
210
#ifdef LTC_MULTI2
211
struct multi2_key multi2;
212
#endif
213
#ifdef LTC_CAMELLIA
214
struct camellia_key camellia;
215
#endif
216
void *data;
217
} symmetric_key;
218
219
#ifdef LTC_ECB_MODE
220
/** A block cipher ECB structure */
221
typedef struct {
222
/** The index of the cipher chosen */
223
int cipher,
224
/** The block size of the given cipher */
225
blocklen;
226
/** The scheduled key */
227
symmetric_key key;
228
} symmetric_ECB;
229
#endif
230
231
#ifdef LTC_CFB_MODE
232
/** A block cipher CFB structure */
233
typedef struct {
234
/** The index of the cipher chosen */
235
int cipher,
236
/** The block size of the given cipher */
237
blocklen,
238
/** The padding offset */
239
padlen;
240
/** The current IV */
241
unsigned char IV[MAXBLOCKSIZE],
242
/** The pad used to encrypt/decrypt */
243
pad[MAXBLOCKSIZE];
244
/** The scheduled key */
245
symmetric_key key;
246
} symmetric_CFB;
247
#endif
248
249
#ifdef LTC_OFB_MODE
250
/** A block cipher OFB structure */
251
typedef struct {
252
/** The index of the cipher chosen */
253
int cipher,
254
/** The block size of the given cipher */
255
blocklen,
256
/** The padding offset */
257
padlen;
258
/** The current IV */
259
unsigned char IV[MAXBLOCKSIZE];
260
/** The scheduled key */
261
symmetric_key key;
262
} symmetric_OFB;
263
#endif
264
265
#ifdef LTC_CBC_MODE
266
/** A block cipher CBC structure */
267
typedef struct {
268
/** The index of the cipher chosen */
269
int cipher,
270
/** The block size of the given cipher */
271
blocklen;
272
/** The current IV */
273
unsigned char IV[MAXBLOCKSIZE];
274
/** The scheduled key */
275
symmetric_key key;
276
} symmetric_CBC;
277
#endif
278
279
280
#ifdef LTC_CTR_MODE
281
/** A block cipher CTR structure */
282
typedef struct {
283
/** The index of the cipher chosen */
284
int cipher,
285
/** The block size of the given cipher */
286
blocklen,
287
/** The padding offset */
288
padlen,
289
/** The mode (endianess) of the CTR, 0==little, 1==big */
290
mode,
291
/** counter width */
292
ctrlen;
293
294
/** The counter */
295
unsigned char ctr[MAXBLOCKSIZE],
296
/** The pad used to encrypt/decrypt */
297
pad[MAXBLOCKSIZE];
298
/** The scheduled key */
299
symmetric_key key;
300
} symmetric_CTR;
301
#endif
302
303
304
#ifdef LTC_LRW_MODE
305
/** A LRW structure */
306
typedef struct {
307
/** The index of the cipher chosen (must be a 128-bit block cipher) */
308
int cipher;
309
310
/** The current IV */
311
unsigned char IV[16],
312
313
/** the tweak key */
314
tweak[16],
315
316
/** The current pad, it's the product of the first 15 bytes against the tweak key */
317
pad[16];
318
319
/** The scheduled symmetric key */
320
symmetric_key key;
321
322
#ifdef LTC_LRW_TABLES
323
/** The pre-computed multiplication table */
324
unsigned char PC[16][256][16];
325
#endif
326
} symmetric_LRW;
327
#endif
328
329
#ifdef LTC_F8_MODE
330
/** A block cipher F8 structure */
331
typedef struct {
332
/** The index of the cipher chosen */
333
int cipher,
334
/** The block size of the given cipher */
335
blocklen,
336
/** The padding offset */
337
padlen;
338
/** The current IV */
339
unsigned char IV[MAXBLOCKSIZE],
340
MIV[MAXBLOCKSIZE];
341
/** Current block count */
342
ulong32 blockcnt;
343
/** The scheduled key */
344
symmetric_key key;
345
} symmetric_F8;
346
#endif
347
348
349
/** cipher descriptor table, last entry has "name == NULL" to mark the end of table */
350
extern struct ltc_cipher_descriptor {
351
/** name of cipher */
352
const char *name;
353
/** internal ID */
354
unsigned char ID;
355
/** min keysize (octets) */
356
int min_key_length,
357
/** max keysize (octets) */
358
max_key_length,
359
/** block size (octets) */
360
block_length,
361
/** default number of rounds */
362
default_rounds;
363
/** Setup the cipher
364
@param key The input symmetric key
365
@param keylen The length of the input key (octets)
366
@param num_rounds The requested number of rounds (0==default)
367
@param skey [out] The destination of the scheduled key
368
@return CRYPT_OK if successful
369
*/
370
int (*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
371
/** Encrypt a block
372
@param pt The plaintext
373
@param ct [out] The ciphertext
374
@param skey The scheduled key
375
@return CRYPT_OK if successful
376
*/
377
int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
378
/** Decrypt a block
379
@param ct The ciphertext
380
@param pt [out] The plaintext
381
@param skey The scheduled key
382
@return CRYPT_OK if successful
383
*/
384
int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
385
/** Test the block cipher
386
@return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
387
*/
388
int (*test)(void);
389
390
/** Terminate the context
391
@param skey The scheduled key
392
*/
393
void (*done)(symmetric_key *skey);
394
395
/** Determine a key size
396
@param keysize [in/out] The size of the key desired and the suggested size
397
@return CRYPT_OK if successful
398
*/
399
int (*keysize)(int *keysize);
400
401
/** Accelerators **/
402
/** Accelerated ECB encryption
403
@param pt Plaintext
404
@param ct Ciphertext
405
@param blocks The number of complete blocks to process
406
@param skey The scheduled key context
407
@return CRYPT_OK if successful
408
*/
409
int (*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey);
410
411
/** Accelerated ECB decryption
412
@param pt Plaintext
413
@param ct Ciphertext
414
@param blocks The number of complete blocks to process
415
@param skey The scheduled key context
416
@return CRYPT_OK if successful
417
*/
418
int (*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey);
419
420
/** Accelerated CBC encryption
421
@param pt Plaintext
422
@param ct Ciphertext
423
@param blocks The number of complete blocks to process
424
@param IV The initial value (input/output)
425
@param skey The scheduled key context
426
@return CRYPT_OK if successful
427
*/
428
int (*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey);
429
430
/** Accelerated CBC decryption
431
@param pt Plaintext
432
@param ct Ciphertext
433
@param blocks The number of complete blocks to process
434
@param IV The initial value (input/output)
435
@param skey The scheduled key context
436
@return CRYPT_OK if successful
437
*/
438
int (*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey);
439
440
/** Accelerated CTR encryption
441
@param pt Plaintext
442
@param ct Ciphertext
443
@param blocks The number of complete blocks to process
444
@param IV The initial value (input/output)
445
@param mode little or big endian counter (mode=0 or mode=1)
446
@param skey The scheduled key context
447
@return CRYPT_OK if successful
448
*/
449
int (*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey);
450
451
/** Accelerated LRW
452
@param pt Plaintext
453
@param ct Ciphertext
454
@param blocks The number of complete blocks to process
455
@param IV The initial value (input/output)
456
@param tweak The LRW tweak
457
@param skey The scheduled key context
458
@return CRYPT_OK if successful
459
*/
460
int (*accel_lrw_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey);
461
462
/** Accelerated LRW
463
@param ct Ciphertext
464
@param pt Plaintext
465
@param blocks The number of complete blocks to process
466
@param IV The initial value (input/output)
467
@param tweak The LRW tweak
468
@param skey The scheduled key context
469
@return CRYPT_OK if successful
470
*/
471
int (*accel_lrw_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey);
472
473
/** Accelerated CCM packet (one-shot)
474
@param key The secret key to use
475
@param keylen The length of the secret key (octets)
476
@param uskey A previously scheduled key [optional can be NULL]
477
@param nonce The session nonce [use once]
478
@param noncelen The length of the nonce
479
@param header The header for the session
480
@param headerlen The length of the header (octets)
481
@param pt [out] The plaintext
482
@param ptlen The length of the plaintext (octets)
483
@param ct [out] The ciphertext
484
@param tag [out] The destination tag
485
@param taglen [in/out] The max size and resulting size of the authentication tag
486
@param direction Encrypt or Decrypt direction (0 or 1)
487
@return CRYPT_OK if successful
488
*/
489
int (*accel_ccm_memory)(
490
const unsigned char *key, unsigned long keylen,
491
symmetric_key *uskey,
492
const unsigned char *nonce, unsigned long noncelen,
493
const unsigned char *header, unsigned long headerlen,
494
unsigned char *pt, unsigned long ptlen,
495
unsigned char *ct,
496
unsigned char *tag, unsigned long *taglen,
497
int direction);
498
499
/** Accelerated GCM packet (one shot)
500
@param key The secret key
501
@param keylen The length of the secret key
502
@param IV The initialization vector
503
@param IVlen The length of the initialization vector
504
@param adata The additional authentication data (header)
505
@param adatalen The length of the adata
506
@param pt The plaintext
507
@param ptlen The length of the plaintext (ciphertext length is the same)
508
@param ct The ciphertext
509
@param tag [out] The MAC tag
510
@param taglen [in/out] The MAC tag length
511
@param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT)
512
@return CRYPT_OK on success
513
*/
514
int (*accel_gcm_memory)(
515
const unsigned char *key, unsigned long keylen,
516
const unsigned char *IV, unsigned long IVlen,
517
const unsigned char *adata, unsigned long adatalen,
518
unsigned char *pt, unsigned long ptlen,
519
unsigned char *ct,
520
unsigned char *tag, unsigned long *taglen,
521
int direction);
522
523
/** Accelerated one shot LTC_OMAC
524
@param key The secret key
525
@param keylen The key length (octets)
526
@param in The message
527
@param inlen Length of message (octets)
528
@param out [out] Destination for tag
529
@param outlen [in/out] Initial and final size of out
530
@return CRYPT_OK on success
531
*/
532
int (*omac_memory)(
533
const unsigned char *key, unsigned long keylen,
534
const unsigned char *in, unsigned long inlen,
535
unsigned char *out, unsigned long *outlen);
536
537
/** Accelerated one shot XCBC
538
@param key The secret key
539
@param keylen The key length (octets)
540
@param in The message
541
@param inlen Length of message (octets)
542
@param out [out] Destination for tag
543
@param outlen [in/out] Initial and final size of out
544
@return CRYPT_OK on success
545
*/
546
int (*xcbc_memory)(
547
const unsigned char *key, unsigned long keylen,
548
const unsigned char *in, unsigned long inlen,
549
unsigned char *out, unsigned long *outlen);
550
551
/** Accelerated one shot F9
552
@param key The secret key
553
@param keylen The key length (octets)
554
@param in The message
555
@param inlen Length of message (octets)
556
@param out [out] Destination for tag
557
@param outlen [in/out] Initial and final size of out
558
@return CRYPT_OK on success
559
@remark Requires manual padding
560
*/
561
int (*f9_memory)(
562
const unsigned char *key, unsigned long keylen,
563
const unsigned char *in, unsigned long inlen,
564
unsigned char *out, unsigned long *outlen);
565
566
/** Accelerated XTS encryption
567
@param pt Plaintext
568
@param ct Ciphertext
569
@param blocks The number of complete blocks to process
570
@param tweak The 128-bit encryption tweak (input/output).
571
The tweak should not be encrypted on input, but
572
next tweak will be copied encrypted on output.
573
@param skey1 The first scheduled key context
574
@param skey2 The second scheduled key context
575
@return CRYPT_OK if successful
576
*/
577
int (*accel_xts_encrypt)(const unsigned char *pt, unsigned char *ct,
578
unsigned long blocks, unsigned char *tweak, symmetric_key *skey1,
579
symmetric_key *skey2);
580
581
/** Accelerated XTS decryption
582
@param ct Ciphertext
583
@param pt Plaintext
584
@param blocks The number of complete blocks to process
585
@param tweak The 128-bit encryption tweak (input/output).
586
The tweak should not be encrypted on input, but
587
next tweak will be copied encrypted on output.
588
@param skey1 The first scheduled key context
589
@param skey2 The second scheduled key context
590
@return CRYPT_OK if successful
591
*/
592
int (*accel_xts_decrypt)(const unsigned char *ct, unsigned char *pt,
593
unsigned long blocks, unsigned char *tweak, symmetric_key *skey1,
594
symmetric_key *skey2);
595
} cipher_descriptor[];
596
597
#ifdef LTC_BLOWFISH
598
int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
599
int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
600
int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
601
int blowfish_test(void);
602
void blowfish_done(symmetric_key *skey);
603
int blowfish_keysize(int *keysize);
604
extern const struct ltc_cipher_descriptor blowfish_desc;
605
#endif
606
607
#ifdef LTC_RC5
608
int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
609
int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
610
int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
611
int rc5_test(void);
612
void rc5_done(symmetric_key *skey);
613
int rc5_keysize(int *keysize);
614
extern const struct ltc_cipher_descriptor rc5_desc;
615
#endif
616
617
#ifdef LTC_RC6
618
int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
619
int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
620
int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
621
int rc6_test(void);
622
void rc6_done(symmetric_key *skey);
623
int rc6_keysize(int *keysize);
624
extern const struct ltc_cipher_descriptor rc6_desc;
625
#endif
626
627
#ifdef LTC_RC2
628
int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
629
int rc2_setup_ex(const unsigned char *key, int keylen, int bits, int num_rounds, symmetric_key *skey);
630
int rc2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
631
int rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
632
int rc2_test(void);
633
void rc2_done(symmetric_key *skey);
634
int rc2_keysize(int *keysize);
635
extern const struct ltc_cipher_descriptor rc2_desc;
636
#endif
637
638
#ifdef LTC_SAFERP
639
int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
640
int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
641
int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
642
int saferp_test(void);
643
void saferp_done(symmetric_key *skey);
644
int saferp_keysize(int *keysize);
645
extern const struct ltc_cipher_descriptor saferp_desc;
646
#endif
647
648
#ifdef LTC_SAFER
649
int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
650
int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
651
int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
652
int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
653
int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);
654
int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);
655
int safer_k64_test(void);
656
int safer_sk64_test(void);
657
int safer_sk128_test(void);
658
void safer_done(symmetric_key *skey);
659
int safer_64_keysize(int *keysize);
660
int safer_128_keysize(int *keysize);
661
extern const struct ltc_cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc;
662
#endif
663
664
#ifdef LTC_RIJNDAEL
665
666
/* make aes an alias */
667
#define aes_setup rijndael_setup
668
#define aes_ecb_encrypt rijndael_ecb_encrypt
669
#define aes_ecb_decrypt rijndael_ecb_decrypt
670
#define aes_test rijndael_test
671
#define aes_done rijndael_done
672
#define aes_keysize rijndael_keysize
673
674
#define aes_enc_setup rijndael_enc_setup
675
#define aes_enc_ecb_encrypt rijndael_enc_ecb_encrypt
676
#define aes_enc_keysize rijndael_enc_keysize
677
678
int rijndael_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
679
int rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
680
int rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
681
int rijndael_test(void);
682
void rijndael_done(symmetric_key *skey);
683
int rijndael_keysize(int *keysize);
684
int rijndael_enc_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
685
int rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
686
void rijndael_enc_done(symmetric_key *skey);
687
int rijndael_enc_keysize(int *keysize);
688
extern const struct ltc_cipher_descriptor rijndael_desc, aes_desc;
689
extern const struct ltc_cipher_descriptor rijndael_enc_desc, aes_enc_desc;
690
#endif
691
692
#ifdef LTC_XTEA
693
int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
694
int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
695
int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
696
int xtea_test(void);
697
void xtea_done(symmetric_key *skey);
698
int xtea_keysize(int *keysize);
699
extern const struct ltc_cipher_descriptor xtea_desc;
700
#endif
701
702
#ifdef LTC_TWOFISH
703
int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
704
int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
705
int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
706
int twofish_test(void);
707
void twofish_done(symmetric_key *skey);
708
int twofish_keysize(int *keysize);
709
extern const struct ltc_cipher_descriptor twofish_desc;
710
#endif
711
712
#ifdef LTC_DES
713
int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
714
int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
715
int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
716
int des_test(void);
717
void des_done(symmetric_key *skey);
718
int des_keysize(int *keysize);
719
int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
720
int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
721
int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
722
int des3_test(void);
723
void des3_done(symmetric_key *skey);
724
int des3_keysize(int *keysize);
725
extern const struct ltc_cipher_descriptor des_desc, des3_desc;
726
#endif
727
728
#ifdef LTC_CAST5
729
int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
730
int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
731
int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
732
int cast5_test(void);
733
void cast5_done(symmetric_key *skey);
734
int cast5_keysize(int *keysize);
735
extern const struct ltc_cipher_descriptor cast5_desc;
736
#endif
737
738
#ifdef LTC_NOEKEON
739
int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
740
int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
741
int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
742
int noekeon_test(void);
743
void noekeon_done(symmetric_key *skey);
744
int noekeon_keysize(int *keysize);
745
extern const struct ltc_cipher_descriptor noekeon_desc;
746
#endif
747
748
#ifdef LTC_SKIPJACK
749
int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
750
int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
751
int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
752
int skipjack_test(void);
753
void skipjack_done(symmetric_key *skey);
754
int skipjack_keysize(int *keysize);
755
extern const struct ltc_cipher_descriptor skipjack_desc;
756
#endif
757
758
#ifdef LTC_KHAZAD
759
int khazad_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
760
int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
761
int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
762
int khazad_test(void);
763
void khazad_done(symmetric_key *skey);
764
int khazad_keysize(int *keysize);
765
extern const struct ltc_cipher_descriptor khazad_desc;
766
#endif
767
768
#ifdef LTC_ANUBIS
769
int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
770
int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
771
int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
772
int anubis_test(void);
773
void anubis_done(symmetric_key *skey);
774
int anubis_keysize(int *keysize);
775
extern const struct ltc_cipher_descriptor anubis_desc;
776
#endif
777
778
#ifdef LTC_KSEED
779
int kseed_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
780
int kseed_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
781
int kseed_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
782
int kseed_test(void);
783
void kseed_done(symmetric_key *skey);
784
int kseed_keysize(int *keysize);
785
extern const struct ltc_cipher_descriptor kseed_desc;
786
#endif
787
788
#ifdef LTC_KASUMI
789
int kasumi_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
790
int kasumi_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
791
int kasumi_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
792
int kasumi_test(void);
793
void kasumi_done(symmetric_key *skey);
794
int kasumi_keysize(int *keysize);
795
extern const struct ltc_cipher_descriptor kasumi_desc;
796
#endif
797
798
799
#ifdef LTC_MULTI2
800
int multi2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
801
int multi2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
802
int multi2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
803
int multi2_test(void);
804
void multi2_done(symmetric_key *skey);
805
int multi2_keysize(int *keysize);
806
extern const struct ltc_cipher_descriptor multi2_desc;
807
#endif
808
809
#ifdef LTC_CAMELLIA
810
int camellia_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
811
int camellia_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
812
int camellia_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
813
int camellia_test(void);
814
void camellia_done(symmetric_key *skey);
815
int camellia_keysize(int *keysize);
816
extern const struct ltc_cipher_descriptor camellia_desc;
817
#endif
818
819
#ifdef LTC_ECB_MODE
820
int ecb_start(int cipher, const unsigned char *key,
821
int keylen, int num_rounds, symmetric_ECB *ecb);
822
int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_ECB *ecb);
823
int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_ECB *ecb);
824
int ecb_done(symmetric_ECB *ecb);
825
#endif
826
827
#ifdef LTC_CFB_MODE
828
int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key,
829
int keylen, int num_rounds, symmetric_CFB *cfb);
830
int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CFB *cfb);
831
int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CFB *cfb);
832
int cfb_getiv(unsigned char *IV, unsigned long *len, symmetric_CFB *cfb);
833
int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb);
834
int cfb_done(symmetric_CFB *cfb);
835
#endif
836
837
#ifdef LTC_OFB_MODE
838
int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key,
839
int keylen, int num_rounds, symmetric_OFB *ofb);
840
int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb);
841
int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb);
842
int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb);
843
int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb);
844
int ofb_done(symmetric_OFB *ofb);
845
#endif
846
847
#ifdef LTC_CBC_MODE
848
int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key,
849
int keylen, int num_rounds, symmetric_CBC *cbc);
850
int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CBC *cbc);
851
int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CBC *cbc);
852
int cbc_getiv(unsigned char *IV, unsigned long *len, symmetric_CBC *cbc);
853
int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc);
854
int cbc_done(symmetric_CBC *cbc);
855
#endif
856
857
#ifdef LTC_CTR_MODE
858
859
#define CTR_COUNTER_LITTLE_ENDIAN 0x0000
860
#define CTR_COUNTER_BIG_ENDIAN 0x1000
861
#define LTC_CTR_RFC3686 0x2000
862
863
int ctr_start( int cipher,
864
const unsigned char *IV,
865
const unsigned char *key, int keylen,
866
int num_rounds, int ctr_mode,
867
symmetric_CTR *ctr);
868
int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr);
869
int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr);
870
int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr);
871
int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr);
872
int ctr_done(symmetric_CTR *ctr);
873
int ctr_test(void);
874
#endif
875
876
#ifdef LTC_LRW_MODE
877
878
#define LRW_ENCRYPT LTC_ENCRYPT
879
#define LRW_DECRYPT LTC_DECRYPT
880
881
int lrw_start( int cipher,
882
const unsigned char *IV,
883
const unsigned char *key, int keylen,
884
const unsigned char *tweak,
885
int num_rounds,
886
symmetric_LRW *lrw);
887
int lrw_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_LRW *lrw);
888
int lrw_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_LRW *lrw);
889
int lrw_getiv(unsigned char *IV, unsigned long *len, symmetric_LRW *lrw);
890
int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw);
891
int lrw_done(symmetric_LRW *lrw);
892
int lrw_test(void);
893
894
/* don't call */
895
int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, int mode, symmetric_LRW *lrw);
896
#endif
897
898
#ifdef LTC_F8_MODE
899
int f8_start( int cipher, const unsigned char *IV,
900
const unsigned char *key, int keylen,
901
const unsigned char *salt_key, int skeylen,
902
int num_rounds, symmetric_F8 *f8);
903
int f8_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_F8 *f8);
904
int f8_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_F8 *f8);
905
int f8_getiv(unsigned char *IV, unsigned long *len, symmetric_F8 *f8);
906
int f8_setiv(const unsigned char *IV, unsigned long len, symmetric_F8 *f8);
907
int f8_done(symmetric_F8 *f8);
908
int f8_test_mode(void);
909
#endif
910
911
#ifdef LTC_XTS_MODE
912
typedef struct {
913
symmetric_key key1, key2;
914
int cipher;
915
} symmetric_xts;
916
917
int xts_start( int cipher,
918
const unsigned char *key1,
919
const unsigned char *key2,
920
unsigned long keylen,
921
int num_rounds,
922
symmetric_xts *xts);
923
924
int xts_encrypt(
925
const unsigned char *pt, unsigned long ptlen,
926
unsigned char *ct,
927
unsigned char *tweak,
928
symmetric_xts *xts);
929
int xts_decrypt(
930
const unsigned char *ct, unsigned long ptlen,
931
unsigned char *pt,
932
unsigned char *tweak,
933
symmetric_xts *xts);
934
935
void xts_done(symmetric_xts *xts);
936
int xts_test(void);
937
void xts_mult_x(unsigned char *I);
938
#endif
939
940
int find_cipher(const char *name);
941
int find_cipher_any(const char *name, int blocklen, int keylen);
942
int find_cipher_id(unsigned char ID);
943
int register_cipher(const struct ltc_cipher_descriptor *cipher);
944
int unregister_cipher(const struct ltc_cipher_descriptor *cipher);
945
int register_all_ciphers(void);
946
int cipher_is_valid(int idx);
947
948
LTC_MUTEX_PROTO(ltc_cipher_mutex)
949
950
/* ---- stream ciphers ---- */
951
952
#ifdef LTC_CHACHA
953
954
typedef struct {
955
ulong32 input[16];
956
unsigned char kstream[64];
957
unsigned long ksleft;
958
unsigned long ivlen;
959
int rounds;
960
} chacha_state;
961
962
int chacha_setup(chacha_state *st, const unsigned char *key, unsigned long keylen, int rounds);
963
int chacha_ivctr32(chacha_state *st, const unsigned char *iv, unsigned long ivlen, ulong32 counter);
964
int chacha_ivctr64(chacha_state *st, const unsigned char *iv, unsigned long ivlen, ulong64 counter);
965
int chacha_crypt(chacha_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out);
966
int chacha_keystream(chacha_state *st, unsigned char *out, unsigned long outlen);
967
int chacha_done(chacha_state *st);
968
int chacha_test(void);
969
970
#endif /* LTC_CHACHA */
971
972
#ifdef LTC_RC4_STREAM
973
974
typedef struct {
975
unsigned int x, y;
976
unsigned char buf[256];
977
} rc4_state;
978
979
int rc4_stream_setup(rc4_state *st, const unsigned char *key, unsigned long keylen);
980
int rc4_stream_crypt(rc4_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out);
981
int rc4_stream_keystream(rc4_state *st, unsigned char *out, unsigned long outlen);
982
int rc4_stream_done(rc4_state *st);
983
int rc4_stream_test(void);
984
985
#endif /* LTC_RC4_STREAM */
986
987
#ifdef LTC_SOBER128_STREAM
988
989
typedef struct {
990
ulong32 R[17], /* Working storage for the shift register */
991
initR[17], /* saved register contents */
992
konst, /* key dependent constant */
993
sbuf; /* partial word encryption buffer */
994
int nbuf; /* number of part-word stream bits buffered */
995
} sober128_state;
996
997
int sober128_stream_setup(sober128_state *st, const unsigned char *key, unsigned long keylen);
998
int sober128_stream_setiv(sober128_state *st, const unsigned char *iv, unsigned long ivlen);
999
int sober128_stream_crypt(sober128_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out);
1000
int sober128_stream_keystream(sober128_state *st, unsigned char *out, unsigned long outlen);
1001
int sober128_stream_done(sober128_state *st);
1002
int sober128_stream_test(void);
1003
1004
#endif /* LTC_SOBER128_STREAM */
1005
1006