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