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