LibLogicalAccess  2.5.0
An Open Source RFID Library
Loading...
Searching...
No Matches
tomcrypt_cipher.h
Go to the documentation of this file.
1#include "logicalaccess/plugins/crypto/lla_crypto_api.hpp"
2
3/* ---- SYMMETRIC KEY STUFF -----
4 *
5 * We put each of the ciphers scheduled keys in their own structs then we put all of
6 * the key formats in one union. This makes the function prototypes easier to use.
7 */
8#ifdef LTC_BLOWFISH
9struct blowfish_key {
10 ulong32 S[4][256];
11 ulong32 K[18];
12};
13#endif
14
15#ifdef LTC_RC5
16struct rc5_key {
17 int rounds;
18 ulong32 K[50];
19};
20#endif
21
22#ifdef LTC_RC6
23struct rc6_key {
24 ulong32 K[44];
25};
26#endif
27
28#ifdef LTC_SAFERP
29struct saferp_key {
30 unsigned char K[33][16];
31 long rounds;
32};
33#endif
34
35#ifdef LTC_RIJNDAEL
36struct rijndael_key {
37 ulong32 eK[60], dK[60];
38 int Nr;
39};
40#endif
41
42#ifdef LTC_KSEED
43struct kseed_key {
44 ulong32 K[32], dK[32];
45};
46#endif
47
48#ifdef LTC_KASUMI
49struct kasumi_key {
50 ulong32 KLi1[8], KLi2[8],
51 KOi1[8], KOi2[8], KOi3[8],
52 KIi1[8], KIi2[8], KIi3[8];
53};
54#endif
55
56#ifdef LTC_XTEA
57struct xtea_key {
58 unsigned long A[32], B[32];
59};
60#endif
61
62#ifdef LTC_TWOFISH
63#ifndef LTC_TWOFISH_SMALL
64struct twofish_key {
65 ulong32 S[4][256], K[40];
66};
67#else
68struct twofish_key {
69 ulong32 K[40];
70 unsigned char S[32], start;
71};
72#endif
73#endif
74
75#ifdef LTC_SAFER
76#define LTC_SAFER_K64_DEFAULT_NOF_ROUNDS 6
77#define LTC_SAFER_K128_DEFAULT_NOF_ROUNDS 10
78#define LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS 8
79#define LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS 10
80#define LTC_SAFER_MAX_NOF_ROUNDS 13
81#define LTC_SAFER_BLOCK_LEN 8
82#define LTC_SAFER_KEY_LEN (1 + LTC_SAFER_BLOCK_LEN * (1 + 2 * LTC_SAFER_MAX_NOF_ROUNDS))
83typedef unsigned char safer_block_t[LTC_SAFER_BLOCK_LEN];
84typedef unsigned char safer_key_t[LTC_SAFER_KEY_LEN];
85struct safer_key { safer_key_t key; };
86#endif
87
88#ifdef LTC_RC2
89struct rc2_key { unsigned xkey[64]; };
90#endif
91
92#ifdef LTC_DES
93struct des_key {
94 ulong32 ek[32], dk[32];
95};
96
97struct des3_key {
98 ulong32 ek[3][32], dk[3][32];
99};
100#endif
101
102#ifdef LTC_CAST5
103struct cast5_key {
104 ulong32 K[32], keylen;
105};
106#endif
107
108#ifdef LTC_NOEKEON
109struct noekeon_key {
110 ulong32 K[4], dK[4];
111};
112#endif
113
114#ifdef LTC_SKIPJACK
115struct skipjack_key {
116 unsigned char key[10];
117};
118#endif
119
120#ifdef LTC_KHAZAD
121struct khazad_key {
122 ulong64 roundKeyEnc[8 + 1];
123 ulong64 roundKeyDec[8 + 1];
124};
125#endif
126
127#ifdef LTC_ANUBIS
128struct anubis_key {
129 int keyBits;
130 int R;
131 ulong32 roundKeyEnc[18 + 1][4];
132 ulong32 roundKeyDec[18 + 1][4];
133};
134#endif
135
136#ifdef LTC_MULTI2
137struct multi2_key {
138 int N;
139 ulong32 uk[8];
140};
141#endif
142
143#ifdef LTC_CAMELLIA
144struct camellia_key {
145 int R;
146 ulong64 kw[4], k[24], kl[6];
147};
148#endif
149
150typedef union Symmetric_key {
151#ifdef LTC_DES
152 struct des_key des;
153 struct des3_key des3;
154#endif
155#ifdef LTC_RC2
156 struct rc2_key rc2;
157#endif
158#ifdef LTC_SAFER
159 struct safer_key safer;
160#endif
161#ifdef LTC_TWOFISH
162 struct twofish_key twofish;
163#endif
164#ifdef LTC_BLOWFISH
165 struct blowfish_key blowfish;
166#endif
167#ifdef LTC_RC5
168 struct rc5_key rc5;
169#endif
170#ifdef LTC_RC6
171 struct rc6_key rc6;
172#endif
173#ifdef LTC_SAFERP
174 struct saferp_key saferp;
175#endif
176#ifdef LTC_RIJNDAEL
177 struct rijndael_key rijndael;
178#endif
179#ifdef LTC_XTEA
180 struct xtea_key xtea;
181#endif
182#ifdef LTC_CAST5
183 struct cast5_key cast5;
184#endif
185#ifdef LTC_NOEKEON
186 struct noekeon_key noekeon;
187#endif
188#ifdef LTC_SKIPJACK
189 struct skipjack_key skipjack;
190#endif
191#ifdef LTC_KHAZAD
192 struct khazad_key khazad;
193#endif
194#ifdef LTC_ANUBIS
195 struct anubis_key anubis;
196#endif
197#ifdef LTC_KSEED
198 struct kseed_key kseed;
199#endif
200#ifdef LTC_KASUMI
201 struct kasumi_key kasumi;
202#endif
203#ifdef LTC_MULTI2
204 struct multi2_key multi2;
205#endif
206#ifdef LTC_CAMELLIA
207 struct camellia_key camellia;
208#endif
209 void *data;
211
212#ifdef LTC_ECB_MODE
214typedef struct {
216 int cipher,
218 blocklen;
220 symmetric_key key;
221} symmetric_ECB;
222#endif
223
224#ifdef LTC_CFB_MODE
226typedef struct {
228 int cipher,
230 blocklen,
232 padlen;
234 unsigned char IV[MAXBLOCKSIZE],
236 pad[MAXBLOCKSIZE];
238 symmetric_key key;
239} symmetric_CFB;
240#endif
241
242#ifdef LTC_OFB_MODE
244typedef struct {
246 int cipher,
248 blocklen,
250 padlen;
252 unsigned char IV[MAXBLOCKSIZE];
254 symmetric_key key;
255} symmetric_OFB;
256#endif
257
258#ifdef LTC_CBC_MODE
260typedef struct {
262 int cipher,
264 blocklen;
266 unsigned char IV[MAXBLOCKSIZE];
268 symmetric_key key;
269} symmetric_CBC;
270#endif
271
272#ifdef LTC_CTR_MODE
274typedef struct {
276 int cipher,
278 blocklen,
280 padlen,
282 mode,
284 ctrlen;
285
287 unsigned char ctr[MAXBLOCKSIZE],
289 pad[MAXBLOCKSIZE];
291 symmetric_key key;
292} symmetric_CTR;
293#endif
294
295#ifdef LTC_LRW_MODE
297typedef struct {
299 int cipher;
300
302 unsigned char IV[16],
303
305 tweak[16],
306
308 pad[16];
309
311 symmetric_key key;
312
313#ifdef LRW_TABLES
315 unsigned char PC[16][256][16];
316#endif
317} symmetric_LRW;
318#endif
319
320#ifdef LTC_F8_MODE
322typedef struct {
324 int cipher,
326 blocklen,
328 padlen;
330 unsigned char IV[MAXBLOCKSIZE],
331 MIV[MAXBLOCKSIZE];
333 ulong32 blockcnt;
335 symmetric_key key;
336} symmetric_F8;
337#endif
338
340LLA_CRYPTO_API extern struct ltc_cipher_descriptor
341{
343 char *name;
345 unsigned char ID;
361 int(*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
368 int(*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
375 int(*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
379 int(*test)(void);
380
384 void(*done)(symmetric_key *skey);
385
390 int(*keysize)(int *keysize);
391
400 int(*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey);
401
409 int(*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey);
410
419 int(*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey);
420
429 int(*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey);
430
440 int(*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey);
441
451 int(*accel_lrw_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey);
452
462 int(*accel_lrw_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey);
463
481 const unsigned char *key, unsigned long keylen,
482 symmetric_key *uskey,
483 const unsigned char *nonce, unsigned long noncelen,
484 const unsigned char *header, unsigned long headerlen,
485 unsigned char *pt, unsigned long ptlen,
486 unsigned char *ct,
487 unsigned char *tag, unsigned long *taglen,
488 int direction);
489
506 const unsigned char *key, unsigned long keylen,
507 const unsigned char *IV, unsigned long IVlen,
508 const unsigned char *adata, unsigned long adatalen,
509 unsigned char *pt, unsigned long ptlen,
510 unsigned char *ct,
511 unsigned char *tag, unsigned long *taglen,
512 int direction);
513
524 const unsigned char *key, unsigned long keylen,
525 const unsigned char *in, unsigned long inlen,
526 unsigned char *out, unsigned long *outlen);
527
538 const unsigned char *key, unsigned long keylen,
539 const unsigned char *in, unsigned long inlen,
540 unsigned char *out, unsigned long *outlen);
541
553 const unsigned char *key, unsigned long keylen,
554 const unsigned char *in, unsigned long inlen,
555 unsigned char *out, unsigned long *outlen);
557
558#ifdef LTC_BLOWFISH
559int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
560int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
561int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
562int blowfish_test(void);
563void blowfish_done(symmetric_key *skey);
564int blowfish_keysize(int *keysize);
565extern const struct ltc_cipher_descriptor blowfish_desc;
566#endif
567
568#ifdef LTC_RC5
569int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
570int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
571int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
572int rc5_test(void);
573void rc5_done(symmetric_key *skey);
574int rc5_keysize(int *keysize);
575extern const struct ltc_cipher_descriptor rc5_desc;
576#endif
577
578#ifdef LTC_RC6
579int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
580int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
581int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
582int rc6_test(void);
583void rc6_done(symmetric_key *skey);
584int rc6_keysize(int *keysize);
585extern const struct ltc_cipher_descriptor rc6_desc;
586#endif
587
588#ifdef LTC_RC2
589int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
590int rc2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
591int rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
592int rc2_test(void);
593void rc2_done(symmetric_key *skey);
594int rc2_keysize(int *keysize);
595extern const struct ltc_cipher_descriptor rc2_desc;
596#endif
597
598#ifdef LTC_SAFERP
599int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
600int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
601int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
602int saferp_test(void);
603void saferp_done(symmetric_key *skey);
604int saferp_keysize(int *keysize);
605extern const struct ltc_cipher_descriptor saferp_desc;
606#endif
607
608#ifdef LTC_SAFER
609int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
610int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
611int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
612int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
613int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);
614int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);
615int safer_k64_test(void);
616int safer_sk64_test(void);
617int safer_sk128_test(void);
618void safer_done(symmetric_key *skey);
619int safer_64_keysize(int *keysize);
620int safer_128_keysize(int *keysize);
621extern const struct ltc_cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc;
622#endif
623
624#ifdef LTC_RIJNDAEL
625
626/* make aes an alias */
627#define aes_setup rijndael_setup
628#define aes_ecb_encrypt rijndael_ecb_encrypt
629#define aes_ecb_decrypt rijndael_ecb_decrypt
630#define aes_test rijndael_test
631#define aes_done rijndael_done
632#define aes_keysize rijndael_keysize
633
634#define aes_enc_setup rijndael_enc_setup
635#define aes_enc_ecb_encrypt rijndael_enc_ecb_encrypt
636#define aes_enc_keysize rijndael_enc_keysize
637
638int rijndael_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
639int rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
640int rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
641int rijndael_test(void);
642void rijndael_done(symmetric_key *skey);
643int rijndael_keysize(int *keysize);
644int rijndael_enc_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
645int rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
646void rijndael_enc_done(symmetric_key *skey);
647int rijndael_enc_keysize(int *keysize);
648extern const struct ltc_cipher_descriptor rijndael_desc, aes_desc;
649extern const struct ltc_cipher_descriptor rijndael_enc_desc, aes_enc_desc;
650#endif
651
652#ifdef LTC_XTEA
653int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
654int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
655int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
656int xtea_test(void);
657void xtea_done(symmetric_key *skey);
658int xtea_keysize(int *keysize);
659extern const struct ltc_cipher_descriptor xtea_desc;
660#endif
661
662#ifdef LTC_TWOFISH
663int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
664int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
665int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
666int twofish_test(void);
667void twofish_done(symmetric_key *skey);
668int twofish_keysize(int *keysize);
669extern const struct ltc_cipher_descriptor twofish_desc;
670#endif
671
672#ifdef LTC_DES
673LLA_CRYPTO_API int des_setup(const unsigned char *key, int keylen, int num_rounds,
674 symmetric_key *skey);
675LLA_CRYPTO_API int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct,
676 symmetric_key *skey);
677LLA_CRYPTO_API int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt,
678 symmetric_key *skey);
679int des_test(void);
680LLA_CRYPTO_API void des_done(symmetric_key *skey);
681int des_keysize(int *keysize);
682LLA_CRYPTO_API int des3_setup(const unsigned char *key, int keylen, int num_rounds,
683 symmetric_key *skey);
684LLA_CRYPTO_API int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct,
685 symmetric_key *skey);
686LLA_CRYPTO_API int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt,
687 symmetric_key *skey);
688int des3_test(void);
689LLA_CRYPTO_API void des3_done(symmetric_key *skey);
690LLA_CRYPTO_API int des3_keysize(int *keysize);
691
692LLA_CRYPTO_API extern const struct ltc_cipher_descriptor des_desc;
693LLA_CRYPTO_API extern const struct ltc_cipher_descriptor des3_desc;
694#endif
695
696#ifdef LTC_CAST5
697int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
698int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
699int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
700int cast5_test(void);
701void cast5_done(symmetric_key *skey);
702int cast5_keysize(int *keysize);
703extern const struct ltc_cipher_descriptor cast5_desc;
704#endif
705
706#ifdef LTC_NOEKEON
707int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
708int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
709int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
710int noekeon_test(void);
711void noekeon_done(symmetric_key *skey);
712int noekeon_keysize(int *keysize);
713extern const struct ltc_cipher_descriptor noekeon_desc;
714#endif
715
716#ifdef LTC_SKIPJACK
717int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
718int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
719int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
720int skipjack_test(void);
721void skipjack_done(symmetric_key *skey);
722int skipjack_keysize(int *keysize);
723extern const struct ltc_cipher_descriptor skipjack_desc;
724#endif
725
726#ifdef LTC_KHAZAD
727int khazad_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
728int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
729int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
730int khazad_test(void);
731void khazad_done(symmetric_key *skey);
732int khazad_keysize(int *keysize);
733extern const struct ltc_cipher_descriptor khazad_desc;
734#endif
735
736#ifdef LTC_ANUBIS
737int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
738int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
739int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
740int anubis_test(void);
741void anubis_done(symmetric_key *skey);
742int anubis_keysize(int *keysize);
743extern const struct ltc_cipher_descriptor anubis_desc;
744#endif
745
746#ifdef LTC_KSEED
747int kseed_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
748int kseed_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
749int kseed_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
750int kseed_test(void);
751void kseed_done(symmetric_key *skey);
752int kseed_keysize(int *keysize);
753extern const struct ltc_cipher_descriptor kseed_desc;
754#endif
755
756#ifdef LTC_KASUMI
757int kasumi_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
758int kasumi_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
759int kasumi_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
760int kasumi_test(void);
761void kasumi_done(symmetric_key *skey);
762int kasumi_keysize(int *keysize);
763extern const struct ltc_cipher_descriptor kasumi_desc;
764#endif
765
766#ifdef LTC_MULTI2
767int multi2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
768int multi2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
769int multi2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
770int multi2_test(void);
771void multi2_done(symmetric_key *skey);
772int multi2_keysize(int *keysize);
773extern const struct ltc_cipher_descriptor multi2_desc;
774#endif
775
776#ifdef LTC_CAMELLIA
777int camellia_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
778int camellia_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
779int camellia_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
780int camellia_test(void);
781void camellia_done(symmetric_key *skey);
782int camellia_keysize(int *keysize);
783extern const struct ltc_cipher_descriptor camellia_desc;
784#endif
785
786#ifdef LTC_ECB_MODE
787int ecb_start(int cipher, const unsigned char *key,
788 int keylen, int num_rounds, symmetric_ECB *ecb);
789int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_ECB *ecb);
790int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_ECB *ecb);
791int ecb_done(symmetric_ECB *ecb);
792#endif
793
794#ifdef LTC_CFB_MODE
795int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key,
796 int keylen, int num_rounds, symmetric_CFB *cfb);
797int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CFB *cfb);
798int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CFB *cfb);
799int cfb_getiv(unsigned char *IV, unsigned long *len, symmetric_CFB *cfb);
800int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb);
801int cfb_done(symmetric_CFB *cfb);
802#endif
803
804#ifdef LTC_OFB_MODE
805int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key,
806 int keylen, int num_rounds, symmetric_OFB *ofb);
807int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb);
808int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb);
809int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb);
810int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb);
811int ofb_done(symmetric_OFB *ofb);
812#endif
813
814#ifdef LTC_CBC_MODE
815int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key,
816 int keylen, int num_rounds, symmetric_CBC *cbc);
817int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CBC *cbc);
818int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CBC *cbc);
819int cbc_getiv(unsigned char *IV, unsigned long *len, symmetric_CBC *cbc);
820int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc);
821int cbc_done(symmetric_CBC *cbc);
822#endif
823
824#ifdef LTC_CTR_MODE
825
826#define CTR_COUNTER_LITTLE_ENDIAN 0x0000
827#define CTR_COUNTER_BIG_ENDIAN 0x1000
828#define LTC_CTR_RFC3686 0x2000
829
830int ctr_start(int cipher,
831 const unsigned char *IV,
832 const unsigned char *key, int keylen,
833 int num_rounds, int ctr_mode,
834 symmetric_CTR *ctr);
835int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr);
836int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr);
837int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr);
838int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr);
839int ctr_done(symmetric_CTR *ctr);
840int ctr_test(void);
841#endif
842
843#ifdef LTC_LRW_MODE
844
845#define LRW_ENCRYPT 0
846#define LRW_DECRYPT 1
847
848int lrw_start(int cipher,
849 const unsigned char *IV,
850 const unsigned char *key, int keylen,
851 const unsigned char *tweak,
852 int num_rounds,
853 symmetric_LRW *lrw);
854int lrw_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_LRW *lrw);
855int lrw_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_LRW *lrw);
856int lrw_getiv(unsigned char *IV, unsigned long *len, symmetric_LRW *lrw);
857int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw);
858int lrw_done(symmetric_LRW *lrw);
859int lrw_test(void);
860
861/* don't call */
862int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, int mode, symmetric_LRW *lrw);
863#endif
864
865#ifdef LTC_F8_MODE
866int f8_start(int cipher, const unsigned char *IV,
867 const unsigned char *key, int keylen,
868 const unsigned char *salt_key, int skeylen,
869 int num_rounds, symmetric_F8 *f8);
870int f8_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_F8 *f8);
871int f8_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_F8 *f8);
872int f8_getiv(unsigned char *IV, unsigned long *len, symmetric_F8 *f8);
873int f8_setiv(const unsigned char *IV, unsigned long len, symmetric_F8 *f8);
874int f8_done(symmetric_F8 *f8);
875int f8_test_mode(void);
876#endif
877
878#ifdef LTC_XTS_MODE
879typedef struct {
880 symmetric_key key1, key2;
881 int cipher;
882} symmetric_xts;
883
884int xts_start(int cipher,
885 const unsigned char *key1,
886 const unsigned char *key2,
887 unsigned long keylen,
888 int num_rounds,
889 symmetric_xts *xts);
890
891int xts_encrypt(
892 const unsigned char *pt, unsigned long ptlen,
893 unsigned char *ct,
894 const unsigned char *tweak,
895 symmetric_xts *xts);
896int xts_decrypt(
897 const unsigned char *ct, unsigned long ptlen,
898 unsigned char *pt,
899 const unsigned char *tweak,
900 symmetric_xts *xts);
901
902void xts_done(symmetric_xts *xts);
903int xts_test(void);
904void xts_mult_x(unsigned char *I);
905#endif
906
907LLA_CRYPTO_API int find_cipher(const char *name);
908int find_cipher_any(const char *name, int blocklen, int keylen);
909int find_cipher_id(unsigned char ID);
910LLA_CRYPTO_API int register_cipher(const struct ltc_cipher_descriptor *cipher);
911LLA_CRYPTO_API int unregister_cipher(const struct ltc_cipher_descriptor *cipher);
912LLA_CRYPTO_API int cipher_is_valid(int idx);
913
914LTC_MUTEX_PROTO(ltc_cipher_mutex)
915
916/* $Source$ */
917/* $Revision$ */
918/* $Date$ */
Definition: tomcrypt_cipher.h:341
int(* test)(void)
Definition: tomcrypt_cipher.h:379
char * name
Definition: tomcrypt_cipher.h:343
void(* done)(symmetric_key *skey)
Definition: tomcrypt_cipher.h:384
int(* accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey)
Definition: tomcrypt_cipher.h:400
int max_key_length
Definition: tomcrypt_cipher.h:349
int(* ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
Definition: tomcrypt_cipher.h:375
int(* setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
Definition: tomcrypt_cipher.h:361
int default_rounds
Definition: tomcrypt_cipher.h:353
int(* accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey)
Definition: tomcrypt_cipher.h:409
int(* accel_lrw_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey)
Definition: tomcrypt_cipher.h:462
int(* accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey)
Definition: tomcrypt_cipher.h:440
int(* ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
Definition: tomcrypt_cipher.h:368
int(* accel_gcm_memory)(const unsigned char *key, unsigned long keylen, const unsigned char *IV, unsigned long IVlen, const unsigned char *adata, unsigned long adatalen, unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tag, unsigned long *taglen, int direction)
Definition: tomcrypt_cipher.h:505
unsigned char ID
Definition: tomcrypt_cipher.h:345
int(* keysize)(int *keysize)
Definition: tomcrypt_cipher.h:390
int(* xcbc_memory)(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen)
Definition: tomcrypt_cipher.h:537
int(* accel_ccm_memory)(const unsigned char *key, unsigned long keylen, symmetric_key *uskey, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen, unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tag, unsigned long *taglen, int direction)
Definition: tomcrypt_cipher.h:480
int min_key_length
Definition: tomcrypt_cipher.h:347
int(* accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey)
Definition: tomcrypt_cipher.h:429
int(* omac_memory)(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen)
Definition: tomcrypt_cipher.h:523
int(* f9_memory)(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen)
Definition: tomcrypt_cipher.h:552
int(* accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey)
Definition: tomcrypt_cipher.h:419
int block_length
Definition: tomcrypt_cipher.h:351
int(* accel_lrw_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey)
Definition: tomcrypt_cipher.h:451
#define MAXBLOCKSIZE
Definition: tomcrypt.h:34
int find_cipher_any(const char *name, int blocklen, int keylen)
Definition: crypt_find_cipher_any.cpp:25
union Symmetric_key symmetric_key
LLA_CRYPTO_API int unregister_cipher(const struct ltc_cipher_descriptor *cipher)
Definition: crypt_unregister_cipher.cpp:23
LLA_CRYPTO_API struct ltc_cipher_descriptor cipher_descriptor[]
LLA_CRYPTO_API int register_cipher(const struct ltc_cipher_descriptor *cipher)
Definition: crypt_register_cipher.cpp:23
int find_cipher_id(unsigned char ID)
Definition: crypt_find_cipher_id.cpp:23
LLA_CRYPTO_API int cipher_is_valid(int idx)
Definition: crypt_cipher_is_valid.cpp:23
LLA_CRYPTO_API int find_cipher(const char *name)
Definition: crypt_find_cipher.cpp:23
#define LTC_MUTEX_PROTO(x)
Definition: tomcrypt_custom.h:416
unsigned long ulong32
Definition: tomcrypt_macros.h:16
unsigned long long ulong64
Definition: tomcrypt_macros.h:7
Definition: tomcrypt_cipher.h:150
void * data
Definition: tomcrypt_cipher.h:209