1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <tomcrypt_test.h> 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectprng_state yarrow_prng; 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstruct list results[100]; 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint no_results; 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint sorter(const void *a, const void *b) 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project const struct list *A, *B; 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project A = a; 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project B = b; 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (A->avg < B->avg) return -1; 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (A->avg > B->avg) return 1; 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 0; 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid tally_results(int type) 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int x; 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* qsort the results */ 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project qsort(results, no_results, sizeof(struct list), &sorter); 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n"); 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (type == 0) { 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < no_results; x++) { 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%-20s: Schedule at %6lu\n", cipher_descriptor[results[x].id].name, (unsigned long)results[x].spd1); 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else if (type == 1) { 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < no_results; x++) { 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ("%-20s[%3d]: Encrypt at %5lu, Decrypt at %5lu\n", cipher_descriptor[results[x].id].name, cipher_descriptor[results[x].id].ID, results[x].spd1, results[x].spd2); 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < no_results; x++) { 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ("%-20s: Process at %5lu\n", hash_descriptor[results[x].id].name, results[x].spd1 / 1000); 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* RDTSC from Scott Duplichan */ 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectulong64 rdtsc (void) 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #if defined __GNUC__ && !defined(LTC_NO_ASM) 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #ifdef INTEL_CC 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 a; 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm ( " rdtsc ":"=A"(a)); 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return a; 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #elif defined(__i386__) || defined(__x86_64__) 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 a; 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm __volatile__ ("rdtsc\nmovl %%eax,(%0)\nmovl %%edx,4(%0)\n"::"r"(&a):"%eax","%edx"); 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return a; 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #elif defined(LTC_PPC32) || defined(TFM_PPC32) 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long a, b; 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project __asm__ __volatile__ ("mftbu %1 \nmftb %0\n":"=r"(a), "=r"(b)); 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return (((ulong64)b) << 32ULL) | ((ulong64)a); 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #elif defined(__ia64__) /* gcc-IA64 version */ 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long result; 60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project __asm__ __volatile__("mov %0=ar.itc" : "=r"(result) :: "memory"); 61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project while (__builtin_expect ((int) result == -1, 0)) 62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project __asm__ __volatile__("mov %0=ar.itc" : "=r"(result) :: "memory"); 63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return result; 64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #elif defined(__sparc__) 65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #if defined(__arch64__) 66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 a; 67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project asm volatile("rd %%tick,%0" : "=r" (a)); 68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return a; 69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #else 70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register unsigned long x, y; 71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project __asm__ __volatile__ ("rd %%tick, %0; clruw %0, %1; srlx %0, 32, %0" : "=r" (x), "=r" (y) : "0" (x), "1" (y)); 72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return ((unsigned long long) x << 32) | y; 73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #endif 74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #else 75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return XCLOCK(); 76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #endif 77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* Microsoft and Intel Windows compilers */ 79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #elif defined _M_IX86 && !defined(LTC_NO_ASM) 80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project __asm rdtsc 81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #elif defined _M_AMD64 && !defined(LTC_NO_ASM) 82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return __rdtsc (); 83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #elif defined _M_IA64 && !defined(LTC_NO_ASM) 84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #if defined __INTEL_COMPILER 85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #include <ia64intrin.h> 86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #endif 87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return __getReg (3116); 88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #else 89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return XCLOCK(); 90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #endif 91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic ulong64 timer, skew = 0; 94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid t_start(void) 96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project timer = rdtsc(); 98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectulong64 t_read(void) 101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return rdtsc() - timer; 103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid init_timer(void) 106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 c1, c2, t1, t2, t3; 108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long y1; 109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < TIMES*100; y1++) { 112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t3 = t_read(); 115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = (t_read() - t1)>>1; 116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1) ? t1 : c1; 118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2) ? t2 : c2; 119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project skew = c2 - c1; 121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Clock Skew: %lu\n", (unsigned long)skew); 122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid reg_algs(void) 125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err; 127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RIJNDAEL 128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&aes_desc); 129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef BLOWFISH 131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&blowfish_desc); 132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef XTEA 134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&xtea_desc); 135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RC5 137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&rc5_desc); 138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RC6 140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&rc6_desc); 141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SAFERP 143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&saferp_desc); 144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef TWOFISH 146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&twofish_desc); 147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SAFER 149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&safer_k64_desc); 150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&safer_sk64_desc); 151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&safer_k128_desc); 152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&safer_sk128_desc); 153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RC2 155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&rc2_desc); 156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef DES 158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&des_desc); 159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&des3_desc); 160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef CAST5 162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&cast5_desc); 163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef NOEKEON 165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&noekeon_desc); 166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SKIPJACK 168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&skipjack_desc); 169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef KHAZAD 171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&khazad_desc); 172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ANUBIS 174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&anubis_desc); 175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef KSEED 177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&kseed_desc); 178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_KASUMI 180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_cipher (&kasumi_desc); 181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef TIGER 184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&tiger_desc); 185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MD2 187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&md2_desc); 188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MD4 190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&md4_desc); 191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MD5 193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&md5_desc); 194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA1 196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha1_desc); 197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA224 199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha224_desc); 200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA256 202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha256_desc); 203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA384 205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha384_desc); 206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SHA512 208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&sha512_desc); 209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RIPEMD128 211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&rmd128_desc); 212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RIPEMD160 214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&rmd160_desc); 215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RIPEMD256 217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&rmd256_desc); 218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RIPEMD320 220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&rmd320_desc); 221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef WHIRLPOOL 223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash (&whirlpool_desc); 224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef CHC_HASH 226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project register_hash(&chc_desc); 227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = chc_register(register_cipher(&aes_desc))) != CRYPT_OK) { 228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "chc_register error: %s\n", error_to_string(err)); 229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 232f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 233f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 234f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef YARROW 235f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #error This demo requires Yarrow. 236f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 237f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectregister_prng(&yarrow_desc); 238f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef FORTUNA 239f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectregister_prng(&fortuna_desc); 240f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 241f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef RC4 242f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectregister_prng(&rc4_desc); 243f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 244f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef SOBER128 245f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectregister_prng(&sober128_desc); 246f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 247f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 248f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) { 249f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "rng_make_prng failed: %s\n", error_to_string(err)); 250f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 251f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 252f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 253f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 254f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 255f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint time_keysched(void) 256f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 257f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y1; 258f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, c1; 259f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project symmetric_key skey; 260f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int kl; 261f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int (*func) (const unsigned char *, int , int , symmetric_key *); 262f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char key[MAXBLOCKSIZE]; 263f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 264f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nKey Schedule Time Trials for the Symmetric Ciphers:\n(Times are cycles per key)\n"); 265f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project no_results = 0; 266f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; cipher_descriptor[x].name != NULL; x++) { 267f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1(k) func(k, kl, 0, &skey); 268f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 269f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project func = cipher_descriptor[x].setup; 270f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project kl = cipher_descriptor[x].min_key_length; 271f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (ulong64)-1; 272f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < KTIMES; y1++) { 273f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project yarrow_read(key, kl, &yarrow_prng); 274f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 275f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1(key); 276f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 277f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1) ? c1 : t1; 278f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 279f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = c1 - skew; 280f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd1 = results[no_results].avg = t1; 281f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results++].id = x; 282f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "."); fflush(stdout); 283f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 284f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 285f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 286f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project tally_results(0); 287f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 288f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 0; 289f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 290f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 291f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint time_cipher(void) 292f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 293f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y1; 294f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2, c1, c2, a1, a2; 295f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project symmetric_ECB ecb; 296f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char key[MAXBLOCKSIZE], pt[4096]; 297f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err; 298f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 299f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nECB Time Trials for the Symmetric Ciphers:\n"); 300f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project no_results = 0; 301f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; cipher_descriptor[x].name != NULL; x++) { 302f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ecb_start(x, key, cipher_descriptor[x].min_key_length, 0, &ecb); 303f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 304f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* sanity check on cipher */ 305f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = cipher_descriptor[x].test()) != CRYPT_OK) { 306f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nERROR: Cipher %s failed self-test %s\n", cipher_descriptor[x].name, error_to_string(err)); 307f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 308f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 309f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 310f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 ecb_encrypt(pt, pt, sizeof(pt), &ecb); 311f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 312f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 313f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 314f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < 100; y1++) { 315f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 316f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1; 317f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 318f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 319f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = t_read(); 320f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 -= t1; 321f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 322f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1 ? c1 : t1); 323f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2 ? c2 : t2); 324f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 325f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project a1 = c2 - c1 - skew; 326f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 327f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 328f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 329f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 ecb_decrypt(pt, pt, sizeof(pt), &ecb); 330f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 331f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 332f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 333f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < 100; y1++) { 334f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 335f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1; 336f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 337f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 338f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = t_read(); 339f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 -= t1; 340f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 341f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1 ? c1 : t1); 342f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2 ? c2 : t2); 343f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 344f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project a2 = c2 - c1 - skew; 345f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ecb_done(&ecb); 346f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 347f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].id = x; 348f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd1 = a1/(sizeof(pt)/cipher_descriptor[x].block_length); 349f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); 350f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; 351f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++no_results; 352f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "."); fflush(stdout); 353f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 354f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 355f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 356f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 357f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project tally_results(1); 358f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 359f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 0; 360f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 361f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 362f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_CBC_MODE 363f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint time_cipher2(void) 364f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 365f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y1; 366f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2, c1, c2, a1, a2; 367f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project symmetric_CBC cbc; 368f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char key[MAXBLOCKSIZE], pt[4096]; 369f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err; 370f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 371f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nCBC Time Trials for the Symmetric Ciphers:\n"); 372f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project no_results = 0; 373f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; cipher_descriptor[x].name != NULL; x++) { 374f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cbc_start(x, pt, key, cipher_descriptor[x].min_key_length, 0, &cbc); 375f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 376f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* sanity check on cipher */ 377f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = cipher_descriptor[x].test()) != CRYPT_OK) { 378f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nERROR: Cipher %s failed self-test %s\n", cipher_descriptor[x].name, error_to_string(err)); 379f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 380f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 381f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 382f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 cbc_encrypt(pt, pt, sizeof(pt), &cbc); 383f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 384f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 385f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 386f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < 100; y1++) { 387f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 388f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1; 389f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 390f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 391f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = t_read(); 392f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 -= t1; 393f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 394f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1 ? c1 : t1); 395f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2 ? c2 : t2); 396f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 397f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project a1 = c2 - c1 - skew; 398f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 399f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 400f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 401f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 cbc_decrypt(pt, pt, sizeof(pt), &cbc); 402f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 403f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 404f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 405f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < 100; y1++) { 406f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 407f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1; 408f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 409f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 410f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = t_read(); 411f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 -= t1; 412f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 413f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1 ? c1 : t1); 414f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2 ? c2 : t2); 415f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 416f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project a2 = c2 - c1 - skew; 417f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cbc_done(&cbc); 418f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 419f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].id = x; 420f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd1 = a1/(sizeof(pt)/cipher_descriptor[x].block_length); 421f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); 422f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; 423f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++no_results; 424f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "."); fflush(stdout); 425f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 426f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 427f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 428f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 429f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project tally_results(1); 430f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 431f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 0; 432f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 433f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 434f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint time_cipher2(void) { fprintf(stderr, "NO CBC\n"); return 0; } 435f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 436f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 437f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_CTR_MODE 438f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint time_cipher3(void) 439f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 440f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y1; 441f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2, c1, c2, a1, a2; 442f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project symmetric_CTR ctr; 443f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char key[MAXBLOCKSIZE], pt[4096]; 444f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err; 445f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 446f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nCTR Time Trials for the Symmetric Ciphers:\n"); 447f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project no_results = 0; 448f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; cipher_descriptor[x].name != NULL; x++) { 449f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ctr_start(x, pt, key, cipher_descriptor[x].min_key_length, 0, CTR_COUNTER_LITTLE_ENDIAN, &ctr); 450f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 451f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* sanity check on cipher */ 452f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = cipher_descriptor[x].test()) != CRYPT_OK) { 453f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nERROR: Cipher %s failed self-test %s\n", cipher_descriptor[x].name, error_to_string(err)); 454f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 455f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 456f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 457f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 ctr_encrypt(pt, pt, sizeof(pt), &ctr); 458f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 459f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 460f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 461f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < 100; y1++) { 462f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 463f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1; 464f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 465f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 466f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = t_read(); 467f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 -= t1; 468f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 469f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1 ? c1 : t1); 470f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2 ? c2 : t2); 471f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 472f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project a1 = c2 - c1 - skew; 473f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 474f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 475f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 476f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 ctr_decrypt(pt, pt, sizeof(pt), &ctr); 477f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 478f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 479f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 480f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < 100; y1++) { 481f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 482f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1; 483f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 484f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 485f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = t_read(); 486f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 -= t1; 487f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 488f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1 ? c1 : t1); 489f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2 ? c2 : t2); 490f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 491f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project a2 = c2 - c1 - skew; 492f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ctr_done(&ctr); 493f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 494f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].id = x; 495f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd1 = a1/(sizeof(pt)/cipher_descriptor[x].block_length); 496f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); 497f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; 498f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++no_results; 499f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "."); fflush(stdout); 500f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 501f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 502f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 503f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 504f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project tally_results(1); 505f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 506f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 0; 507f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 508f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 509f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint time_cipher3(void) { fprintf(stderr, "NO CTR\n"); return 0; } 510f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 511f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 512f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_LRW_MODE 513f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint time_cipher4(void) 514f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 515f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y1; 516f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2, c1, c2, a1, a2; 517f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project symmetric_LRW lrw; 518f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char key[MAXBLOCKSIZE], pt[4096]; 519f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err; 520f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 521f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nLRW Time Trials for the Symmetric Ciphers:\n"); 522f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project no_results = 0; 523f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; cipher_descriptor[x].name != NULL; x++) { 524f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (cipher_descriptor[x].block_length != 16) continue; 525f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project lrw_start(x, pt, key, cipher_descriptor[x].min_key_length, key, 0, &lrw); 526f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 527f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* sanity check on cipher */ 528f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = cipher_descriptor[x].test()) != CRYPT_OK) { 529f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nERROR: Cipher %s failed self-test %s\n", cipher_descriptor[x].name, error_to_string(err)); 530f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 531f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 532f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 533f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 lrw_encrypt(pt, pt, sizeof(pt), &lrw); 534f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 535f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 536f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 537f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < 100; y1++) { 538f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 539f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1; 540f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 541f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 542f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = t_read(); 543f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 -= t1; 544f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 545f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1 ? c1 : t1); 546f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2 ? c2 : t2); 547f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 548f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project a1 = c2 - c1 - skew; 549f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 550f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 551f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 552f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 lrw_decrypt(pt, pt, sizeof(pt), &lrw); 553f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 554f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 555f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 556f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < 100; y1++) { 557f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 558f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1; 559f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 560f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 561f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = t_read(); 562f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 -= t1; 563f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 564f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1 ? c1 : t1); 565f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2 ? c2 : t2); 566f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 567f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project a2 = c2 - c1 - skew; 568f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 569f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project lrw_done(&lrw); 570f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 571f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].id = x; 572f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd1 = a1/(sizeof(pt)/cipher_descriptor[x].block_length); 573f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); 574f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; 575f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++no_results; 576f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "."); fflush(stdout); 577f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 578f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 579f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 580f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 581f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project tally_results(1); 582f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 583f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 0; 584f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 585f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 586f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint time_cipher4(void) { fprintf(stderr, "NO LRW\n"); return 0; } 587f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 588f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 589f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 590f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint time_hash(void) 591f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 592f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y1, len; 593f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2, c1, c2; 594f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project hash_state md; 595f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int (*func)(hash_state *, const unsigned char *, unsigned long), err; 596f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char pt[MAXBLOCKSIZE]; 597f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 598f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 599f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nHASH Time Trials for:\n"); 600f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project no_results = 0; 601f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; hash_descriptor[x].name != NULL; x++) { 602f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 603f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* sanity check on hash */ 604f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = hash_descriptor[x].test()) != CRYPT_OK) { 605f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nERROR: Hash %s failed self-test %s\n", hash_descriptor[x].name, error_to_string(err)); 606f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 607f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 608f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 609f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project hash_descriptor[x].init(&md); 610f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 611f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 func(&md,pt,len); 612f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 613f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 614f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project func = hash_descriptor[x].process; 615f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len = hash_descriptor[x].blocksize; 616f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 617f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = c2 = (ulong64)-1; 618f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y1 = 0; y1 < TIMES; y1++) { 619f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 620f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO1; 621f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 622f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 623f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = t_read() - t1; 624f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c1 = (t1 > c1) ? c1 : t1; 625f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project c2 = (t2 > c2) ? c2 : t2; 626f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 627f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = c2 - c1 - skew; 628f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = ((t1 * CONST64(1000))) / ((ulong64)hash_descriptor[x].blocksize); 629f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].id = x; 630f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project results[no_results].spd1 = results[no_results].avg = t1; 631f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++no_results; 632f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "."); fflush(stdout); 633f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 634f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 635f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 636f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project tally_results(2); 637f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 638f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 0; 639f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 640f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 641f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef MPI 642f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*#warning you need an mp_rand!!!*/ 643f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 644f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MPI 645f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_mult(void) 646f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 647f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2; 648f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y; 649f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project void *a, *b, *c; 650f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 651f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Timing Multiplying:\n"); 652f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_init_multi(&a,&b,&c,NULL); 653f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 128/DIGIT_BIT; x <= 1536/DIGIT_BIT; x += 128/DIGIT_BIT) { 654f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_rand(&a, x); 655f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_rand(&b, x); 656f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 657f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 mp_mul(&a, &b, &c); 658f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1; DO1; 659f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 660f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 661f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < TIMES; y++) { 662f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 663f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 664f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 665f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = (t_read() - t1)>>1; 666f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 667f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 668f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%4lu bits: %9llu cycles\n", x*DIGIT_BIT, t2); 669f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 670f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_clear_multi(&a,&b,&c,NULL); 671f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 672f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 673f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 674f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 675f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 676f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_sqr(void) 677f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 678f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2; 679f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y; 680f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_int a, b; 681f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 682f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Timing Squaring:\n"); 683f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_init_multi(&a,&b,NULL); 684f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 128/DIGIT_BIT; x <= 1536/DIGIT_BIT; x += 128/DIGIT_BIT) { 685f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_rand(&a, x); 686f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 687f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 mp_sqr(&a, &b); 688f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1; DO1; 689f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 690f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 691f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < TIMES; y++) { 692f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 693f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 694f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 695f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = (t_read() - t1)>>1; 696f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 697f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 698f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%4lu bits: %9llu cycles\n", x*DIGIT_BIT, t2); 699f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 700f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_clear_multi(&a,&b,NULL); 701f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 702f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 703f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 704f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 705f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 706f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_mult(void) { fprintf(stderr, "NO MULT\n"); } 707f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_sqr(void) { fprintf(stderr, "NO SQR\n"); } 708f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 709f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 710f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_prng(void) 711f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 712f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2; 713f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char buf[4096]; 714f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project prng_state tprng; 715f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y; 716f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err; 717f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 718f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Timing PRNGs (cycles/byte output, cycles add_entropy (32 bytes) :\n"); 719f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; prng_descriptor[x].name != NULL; x++) { 720f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 721f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* sanity check on prng */ 722f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = prng_descriptor[x].test()) != CRYPT_OK) { 723f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nERROR: PRNG %s failed self-test %s\n", prng_descriptor[x].name, error_to_string(err)); 724f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 725f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 726f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 727f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project prng_descriptor[x].start(&tprng); 728f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project zeromem(buf, 256); 729f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project prng_descriptor[x].add_entropy(buf, 256, &tprng); 730f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project prng_descriptor[x].ready(&tprng); 731f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 732f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 733f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 if (prng_descriptor[x].read(buf, 4096, &tprng) != 4096) { fprintf(stderr, "\n\nERROR READ != 4096\n\n"); exit(EXIT_FAILURE); } 734f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 735f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 10000; y++) { 736f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 737f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 738f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 739f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = (t_read() - t1)>>1; 740f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 741f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 742f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%20s: %5llu ", prng_descriptor[x].name, t2>>12); 743f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 744f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 745f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 746f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO1 prng_descriptor[x].start(&tprng); prng_descriptor[x].add_entropy(buf, 32, &tprng); prng_descriptor[x].ready(&tprng); prng_descriptor[x].done(&tprng); 747f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DO2 DO1 DO1 748f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 10000; y++) { 749f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 750f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 751f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO2; 752f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = (t_read() - t1)>>1; 753f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 754f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 755f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%5llu\n", t2); 756f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO2 757f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#undef DO1 758f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 759f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 760f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 761f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 762f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MDSA 763f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* time various DSA operations */ 764f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_dsa(void) 765f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 766f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project dsa_key key; 767f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2; 768f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y; 769f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err; 770f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const struct { 771f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int group, modulus; 772f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} groups[] = { 773f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 20, 96 }, 774f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 20, 128 }, 775f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 24, 192 }, 776f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 28, 256 }, 777f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 32, 512 } 778f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}; 779f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 780f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < (sizeof(groups)/sizeof(groups[0])); x++) { 781f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 782f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 4; y++) { 783f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 784f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 785f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = dsa_make_key(&yarrow_prng, find_prng("yarrow"), groups[x].group, groups[x].modulus, &key)) != CRYPT_OK) { 786f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\ndsa_make_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 787f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 788f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 789f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 790f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 791f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 792f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 793f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 2; 794f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 795f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 796f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (y < 3) { 797f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project dsa_free(&key); 798f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 799f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 800f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 2; 801f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "DSA-(%lu, %lu) make_key took %15llu cycles\n", (unsigned long)groups[x].group*8, (unsigned long)groups[x].modulus*8, t2); 802f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 803f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 804f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 805f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 806f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 807f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MRSA 808f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* time various RSA operations */ 809f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_rsa(void) 810f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 811f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project rsa_key key; 812f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2; 813f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char buf[2][2048]; 814f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y, z, zzz; 815f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err, zz, stat; 816f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 817f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 1024; x <= 2048; x += 256) { 818f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 819f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 4; y++) { 820f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 821f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 822f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = rsa_make_key(&yarrow_prng, find_prng("yarrow"), x/8, 65537, &key)) != CRYPT_OK) { 823f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nrsa_make_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 824f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 825f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 826f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 827f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 828f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 829f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 830f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 2; 831f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 832f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 833f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 834f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (y < 3) { 835f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project rsa_free(&key); 836f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 837f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 838f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 2; 839f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "RSA-%lu make_key took %15llu cycles\n", x, t2); 840f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 841f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 842f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 16; y++) { 843f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 844f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 845f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = sizeof(buf[1]); 846f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = rsa_encrypt_key(buf[0], 32, buf[1], &z, (const unsigned char *)"testprog", 8, &yarrow_prng, 847f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project find_prng("yarrow"), find_hash("sha1"), 848f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &key)) != CRYPT_OK) { 849f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nrsa_encrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 850f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 851f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 852f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 853f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 854f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 855f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 4; 856f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 857f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 858f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 859f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 4; 860f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "RSA-%lu encrypt_key took %15llu cycles\n", x, t2); 861f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 862f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 863f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 2048; y++) { 864f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 865f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 866f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project zzz = sizeof(buf[0]); 867f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = rsa_decrypt_key(buf[1], z, buf[0], &zzz, (const unsigned char *)"testprog", 8, find_hash("sha1"), 868f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &zz, &key)) != CRYPT_OK) { 869f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nrsa_decrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 870f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 871f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 872f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 873f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 874f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 875f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 11; 876f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 877f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 878f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 879f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 11; 880f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "RSA-%lu decrypt_key took %15llu cycles\n", x, t2); 881f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 882f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 883f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 256; y++) { 884f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 885f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 886f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = sizeof(buf[1]); 887f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = rsa_sign_hash(buf[0], 20, buf[1], &z, &yarrow_prng, 888f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project find_prng("yarrow"), find_hash("sha1"), 8, &key)) != CRYPT_OK) { 889f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nrsa_sign_hash says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 890f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 891f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 892f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 893f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 894f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 895f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 8; 896f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 897f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 898f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 899f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 8; 900f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "RSA-%lu sign_hash took %15llu cycles\n", x, t2); 901f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 902f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 903f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 2048; y++) { 904f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 905f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 906f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = rsa_verify_hash(buf[1], z, buf[0], 20, find_hash("sha1"), 8, &stat, &key)) != CRYPT_OK) { 907f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nrsa_verify_hash says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 908f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 909f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 910f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (stat == 0) { 911f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nrsa_verify_hash for RSA-%lu failed to verify signature(%lu)\n", x, y); 912f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 913f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 914f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 915f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 916f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 917f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 11; 918f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 919f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 920f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 921f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 11; 922f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "RSA-%lu verify_hash took %15llu cycles\n", x, t2); 923f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\n"); 924f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project rsa_free(&key); 925f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 926f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 927f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 928f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_rsa(void) { fprintf(stderr, "NO RSA\n"); } 929f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 930f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 931f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MKAT 932f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* time various KAT operations */ 933f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_katja(void) 934f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 935f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_key key; 936f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2; 937f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char buf[2][4096]; 938f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, y, z, zzz; 939f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err, zz; 940f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 941f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 1024; x <= 2048; x += 256) { 942f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 943f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 4; y++) { 944f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 945f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 946f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = katja_make_key(&yarrow_prng, find_prng("yarrow"), x/8, &key)) != CRYPT_OK) { 947f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nkatja_make_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 948f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 949f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 950f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 951f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 952f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 953f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (y < 3) { 954f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&key); 955f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 956f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 957f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 2; 958f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Katja-%lu make_key took %15llu cycles\n", x, t2); 959f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 960f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 961f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 16; y++) { 962f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 963f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 964f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = sizeof(buf[1]); 965f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = katja_encrypt_key(buf[0], 32, buf[1], &z, "testprog", 8, &yarrow_prng, 966f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project find_prng("yarrow"), find_hash("sha1"), 967f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &key)) != CRYPT_OK) { 968f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nkatja_encrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 969f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 970f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 971f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 972f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 973f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 974f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 4; 975f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Katja-%lu encrypt_key took %15llu cycles\n", x, t2); 976f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 977f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 978f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 2048; y++) { 979f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 980f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 981f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project zzz = sizeof(buf[0]); 982f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = katja_decrypt_key(buf[1], z, buf[0], &zzz, "testprog", 8, find_hash("sha1"), 983f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &zz, &key)) != CRYPT_OK) { 984f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nkatja_decrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 985f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 986f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 987f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 988f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 989f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 990f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 11; 991f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Katja-%lu decrypt_key took %15llu cycles\n", x, t2); 992f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 993f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 994f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&key); 995f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 996f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 997f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 998f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_katja(void) { fprintf(stderr, "NO Katja\n"); } 999f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1000f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1001f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MECC 1002f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* time various ECC operations */ 1003f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_ecc(void) 1004f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 1005f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ecc_key key; 1006f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2; 1007f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char buf[2][256]; 1008f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long i, w, x, y, z; 1009f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err, stat; 1010f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project static unsigned long sizes[] = { 1011f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC112 1012f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project112/8, 1013f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1014f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC128 1015f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project128/8, 1016f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1017f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC160 1018f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project160/8, 1019f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1020f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC192 1021f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project192/8, 1022f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1023f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC224 1024f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project224/8, 1025f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1026f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC256 1027f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project256/8, 1028f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1029f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC384 1030f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project384/8, 1031f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1032f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC521 1033f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project521/8, 1034f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1035f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project100000}; 1036f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1037f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = sizes[i=0]; x < 100000; x = sizes[++i]) { 1038f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 1039f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 256; y++) { 1040f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1041f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1042f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = ecc_make_key(&yarrow_prng, find_prng("yarrow"), x, &key)) != CRYPT_OK) { 1043f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\necc_make_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 1044f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1045f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1046f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1047f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 1048f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1049f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 1050f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 8; 1051f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 1052f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1053f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1054f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (y < 255) { 1055f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ecc_free(&key); 1056f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1057f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1058f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 8; 1059f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "ECC-%lu make_key took %15llu cycles\n", x*8, t2); 1060f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1061f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 1062f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 256; y++) { 1063f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1064f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1065f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = sizeof(buf[1]); 1066f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = ecc_encrypt_key(buf[0], 20, buf[1], &z, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), 1067f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &key)) != CRYPT_OK) { 1068f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\necc_encrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 1069f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1070f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1071f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1072f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 1073f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 1074f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 8; 1075f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 1076f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1077f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1078f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 8; 1079f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "ECC-%lu encrypt_key took %15llu cycles\n", x*8, t2); 1080f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1081f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 1082f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 256; y++) { 1083f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1084f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1085f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project w = 20; 1086f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = ecc_decrypt_key(buf[1], z, buf[0], &w, &key)) != CRYPT_OK) { 1087f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\necc_decrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 1088f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1089f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1090f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1091f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 1092f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 1093f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 8; 1094f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 1095f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1096f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1097f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 8; 1098f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "ECC-%lu decrypt_key took %15llu cycles\n", x*8, t2); 1099f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 1101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 256; y++) { 1102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = sizeof(buf[1]); 1105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = ecc_sign_hash(buf[0], 20, buf[1], &z, &yarrow_prng, 1106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project find_prng("yarrow"), &key)) != CRYPT_OK) { 1107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\necc_sign_hash says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 1108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 1112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 1113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 8; 1114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 1115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 8; 1118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "ECC-%lu sign_hash took %15llu cycles\n", x*8, t2); 1119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = 0; 1121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (y = 0; y < 256; y++) { 1122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = ecc_verify_hash(buf[1], z, buf[0], 20, &stat, &key)) != CRYPT_OK) { 1125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\necc_verify_hash says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); 1126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (stat == 0) { 1129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\necc_verify_hash for ECC-%lu failed to verify signature(%lu)\n", x*8, y); 1130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 += t1; 1134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PROFILE 1135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 <<= 8; 1136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 1137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 >>= 8; 1140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "ECC-%lu verify_hash took %15llu cycles\n", x*8, t2); 1141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\n"); 1143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ecc_free(&key); 1144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 1146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 1147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_ecc(void) { fprintf(stderr, "NO ECC\n"); } 1148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_macs_(unsigned long MAC_SIZE) 1151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 1152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char *buf, key[16], tag[16]; 1153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2; 1154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, z; 1155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err, cipher_idx, hash_idx; 1156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nMAC Timings (cycles/byte on %luKB blocks):\n", MAC_SIZE); 1158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project buf = XMALLOC(MAC_SIZE*1024); 1160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (buf == NULL) { 1161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nout of heap yo\n\n"); 1162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cipher_idx = find_cipher("aes"); 1166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project hash_idx = find_hash("sha1"); 1167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (cipher_idx == -1 || hash_idx == -1) { 1169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Warning the MAC tests requires AES and SHA1 to operate... so sorry\n"); 1170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return; 1171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project yarrow_read(buf, MAC_SIZE*1024, &yarrow_prng); 1174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project yarrow_read(key, 16, &yarrow_prng); 1175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_OMAC 1177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = omac_memory(cipher_idx, key, 16, buf, MAC_SIZE*1024, tag, &z)) != CRYPT_OK) { 1183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nomac error... %s\n", error_to_string(err)); 1184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "OMAC-%s\t\t%9llu\n", cipher_descriptor[cipher_idx].name, t2/(ulong64)(MAC_SIZE*1024)); 1190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_XCBC 1193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = xcbc_memory(cipher_idx, key, 16, buf, MAC_SIZE*1024, tag, &z)) != CRYPT_OK) { 1199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nxcbc error... %s\n", error_to_string(err)); 1200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "XCBC-%s\t\t%9llu\n", cipher_descriptor[cipher_idx].name, t2/(ulong64)(MAC_SIZE*1024)); 1206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_F9_MODE 1209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = f9_memory(cipher_idx, key, 16, buf, MAC_SIZE*1024, tag, &z)) != CRYPT_OK) { 1215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nF9 error... %s\n", error_to_string(err)); 1216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "F9-%s\t\t\t%9llu\n", cipher_descriptor[cipher_idx].name, t2/(ulong64)(MAC_SIZE*1024)); 1222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_PMAC 1225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = pmac_memory(cipher_idx, key, 16, buf, MAC_SIZE*1024, tag, &z)) != CRYPT_OK) { 1231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\npmac error... %s\n", error_to_string(err)); 1232f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1233f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1234f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1235f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1236f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1237f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "PMAC-AES\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); 1238f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1239f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1240f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef PELICAN 1241f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1242f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1243f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1244f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1245f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1246f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = pelican_memory(key, 16, buf, MAC_SIZE*1024, tag)) != CRYPT_OK) { 1247f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\npelican error... %s\n", error_to_string(err)); 1248f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1249f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1250f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1251f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1252f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1253f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "PELICAN \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); 1254f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1255f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1256f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_HMAC 1257f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1258f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1259f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1260f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1261f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1262f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = hmac_memory(hash_idx, key, 16, buf, MAC_SIZE*1024, tag, &z)) != CRYPT_OK) { 1263f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nhmac error... %s\n", error_to_string(err)); 1264f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1265f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1266f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1267f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1268f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1269f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "HMAC-%s\t\t%9llu\n", hash_descriptor[hash_idx].name, t2/(ulong64)(MAC_SIZE*1024)); 1270f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1271f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1272f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project XFREE(buf); 1273f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 1274f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1275f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_macs(void) 1276f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 1277f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project time_macs_(1); 1278f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project time_macs_(4); 1279f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project time_macs_(32); 1280f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 1281f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1282f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_encmacs_(unsigned long MAC_SIZE) 1283f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 1284f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char *buf, IV[16], key[16], tag[16]; 1285f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ulong64 t1, t2; 1286f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x, z; 1287f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int err, cipher_idx; 1288f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project symmetric_key skey; 1289f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1290f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nENC+MAC Timings (zero byte AAD, 16 byte IV, cycles/byte on %luKB blocks):\n", MAC_SIZE); 1291f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1292f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project buf = XMALLOC(MAC_SIZE*1024); 1293f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (buf == NULL) { 1294f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n\nout of heap yo\n\n"); 1295f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1296f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1297f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1298f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cipher_idx = find_cipher("aes"); 1299f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1300f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project yarrow_read(buf, MAC_SIZE*1024, &yarrow_prng); 1301f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project yarrow_read(key, 16, &yarrow_prng); 1302f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project yarrow_read(IV, 16, &yarrow_prng); 1303f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1304f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef EAX_MODE 1305f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1306f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1307f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1308f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1309f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1310f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = eax_encrypt_authenticate_memory(cipher_idx, key, 16, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, tag, &z)) != CRYPT_OK) { 1311f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nEAX error... %s\n", error_to_string(err)); 1312f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1313f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1314f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1315f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1316f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1317f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "EAX \t\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); 1318f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1319f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1320f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef OCB_MODE 1321f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1322f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1323f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1324f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1325f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1326f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = ocb_encrypt_authenticate_memory(cipher_idx, key, 16, IV, buf, MAC_SIZE*1024, buf, tag, &z)) != CRYPT_OK) { 1327f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nOCB error... %s\n", error_to_string(err)); 1328f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1329f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1330f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1331f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1332f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1333f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "OCB \t\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); 1334f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1335f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1336f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef CCM_MODE 1337f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1338f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1339f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1340f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1341f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1342f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = ccm_memory(cipher_idx, key, 16, NULL, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, tag, &z, CCM_ENCRYPT)) != CRYPT_OK) { 1343f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nCCM error... %s\n", error_to_string(err)); 1344f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1345f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1346f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1347f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1348f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1349f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "CCM (no-precomp) \t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); 1350f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1351f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cipher_descriptor[cipher_idx].setup(key, 16, 0, &skey); 1352f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1353f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1354f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1355f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1356f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1357f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = ccm_memory(cipher_idx, key, 16, &skey, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, tag, &z, CCM_ENCRYPT)) != CRYPT_OK) { 1358f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nCCM error... %s\n", error_to_string(err)); 1359f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1360f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1361f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1362f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1363f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1364f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "CCM (precomp) \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); 1365f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cipher_descriptor[cipher_idx].done(&skey); 1366f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1367f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1368f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef GCM_MODE 1369f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1370f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 100; x++) { 1371f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1372f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1373f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1374f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = gcm_memory(cipher_idx, key, 16, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, tag, &z, GCM_ENCRYPT)) != CRYPT_OK) { 1375f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nGCM error... %s\n", error_to_string(err)); 1376f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1377f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1378f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1379f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1380f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1381f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "GCM (no-precomp)\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); 1382f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1383f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project { 1384f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project gcm_state gcm 1385f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef GCM_TABLES_SSE2 1386f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project__attribute__ ((aligned (16))) 1387f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1388f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project; 1389f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1390f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = gcm_init(&gcm, cipher_idx, key, 16)) != CRYPT_OK) { fprintf(stderr, "gcm_init: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } 1391f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t2 = -1; 1392f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < 10000; x++) { 1393f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t_start(); 1394f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read(); 1395f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project z = 16; 1396f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = gcm_reset(&gcm)) != CRYPT_OK) { 1397f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); 1398f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1399f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1400f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = gcm_add_iv(&gcm, IV, 16)) != CRYPT_OK) { 1401f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); 1402f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1403f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1404f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = gcm_add_aad(&gcm, NULL, 0)) != CRYPT_OK) { 1405f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); 1406f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1407f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1408f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = gcm_process(&gcm, buf, MAC_SIZE*1024, buf, GCM_ENCRYPT)) != CRYPT_OK) { 1409f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); 1410f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1411f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1412f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1413f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ((err = gcm_done(&gcm, tag, &z)) != CRYPT_OK) { 1414f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); 1415f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project exit(EXIT_FAILURE); 1416f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1417f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t1 = t_read() - t1; 1418f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (t1 < t2) t2 = t1; 1419f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1420f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "GCM (precomp)\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); 1421f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 1422f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1423f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 1424f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1425f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 1426f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1427f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid time_encmacs(void) 1428f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 1429f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project time_encmacs_(1); 1430f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project time_encmacs_(4); 1431f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project time_encmacs_(32); 1432f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 1433f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 1434f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/testprof/x86_prof.c,v $ */ 1435f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.51 $ */ 1436f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/11/21 00:10:18 $ */ 1437