|
|
1.1 ! root 1: /* Copyright (c) 1993 Colin Plumb. This code may be freely ! 2: distributed under the terms of the GNU General Public Licence. */ ! 3: ! 4: /* This was developed using Borland C for the IBM PC */ ! 5: ! 6: #include "idea.h" ! 7: #include <stdio.h> ! 8: #include <time.h> ! 9: ! 10: #define RAND16 (rand() ^ rand() << 1) ! 11: ! 12: uint16 huge bigbuf1[32764]; ! 13: uint16 huge bigbuf2[32764]; ! 14: ! 15: void ! 16: timetest(uint16 iv[4], uint16 *key) ! 17: { ! 18: clock_t start, finish; ! 19: uint16 iv2[4]; ! 20: uint16 i; ! 21: ! 22: iv2[0]=iv[0]; iv2[1]=iv[1]; iv2[2]=iv[2]; iv2[3]=iv[3]; ! 23: ! 24: printf("Starting time test.\n"); ! 25: ! 26: start = clock(); ! 27: #if 0 ! 28: IdeaCFB(iv, key, bigbuf1, bigbuf2, 8192); ! 29: IdeaCFB(iv, key, bigbuf2, bigbuf1, 8192); ! 30: IdeaCFBx(iv2, key, bigbuf1, bigbuf2, 8192); ! 31: IdeaCFBx(iv2, key, bigbuf2, bigbuf1, 8192); ! 32: #else ! 33: for (i = 0; i < 32; i++) { ! 34: IdeaCFB(iv, key, bigbuf1, bigbuf2, 8192); ! 35: IdeaCFBx(iv, key, bigbuf2, bigbuf2, 8192); ! 36: } ! 37: #endif ! 38: finish = clock(); ! 39: printf("%4x / %4x %4x / %4x %4x / %4x %4x / %4x\n", ! 40: iv[0], iv2[0], iv[1], iv2[1], iv[2], iv2[2], iv[3], iv2[3]); ! 41: finish -= start; ! 42: printf("Time taken for 64 64K buffers (4096 K): %lu clocks, %f seconds\n", ! 43: finish, (float)finish/CLK_TCK); ! 44: } ! 45: ! 46: int ! 47: main(int argc, char **argv) ! 48: { ! 49: ulong j; ! 50: uint16 a, b, c, d, i; ! 51: uint16 key[KEYSIZE], in[4], out1[4], out2[4], out3[4]; ! 52: uint16 buf1[8], buf2[8], buf3[8]; ! 53: ! 54: if (argc < 2) ! 55: srand((unsigned)time(0)); ! 56: else { ! 57: argv++; /* suppress silly warning */ ! 58: srand(argc); ! 59: } ! 60: ! 61: printf("Starting to test...\n"); ! 62: for (j = 0; j < 10000; j++) { ! 63: if (j % 100 == 0) ! 64: printf("%5lu\r", j); ! 65: a = RAND16; ! 66: b = RAND16; ! 67: c = Mul(a,b); ! 68: d = Mul2(a,b); ! 69: if (c != d) ! 70: printf("%u * %u = %u / %u\n", a, b, c, d); ! 71: ! 72: for (i = 0; i < 4; i++) ! 73: in[i] = RAND16; ! 74: for (i = 0; i < KEYSIZE; i++) ! 75: key[i] = RAND16; ! 76: Idea(in, out1, key); ! 77: #if 0 ! 78: Idea2(in, out2, key); ! 79: Idea3(in, out3, key); ! 80: #else ! 81: for (i = 0; i < 4; i++) ! 82: out3[i] = out2[i] = in[i]; ! 83: IdeaCFB(out2, key, buf1, buf1, 1); /* buf1 args are dummies */ ! 84: IdeaCFBx(out3, key, buf1, buf1, 1); ! 85: #endif ! 86: Idea3(in, out3, key); ! 87: for (i = 0; i < 4; i++) ! 88: if (out1[i] != out2[i] || out2[i] != out3[i]) { ! 89: printf("Unequal for j = %lu\n", j); ! 90: for (i = 0; i < 4; i++) ! 91: printf("%4x - %4x / %4x / %4x %4x\n", ! 92: in[i], out1[i], out2[i], out3[i], key[i]); ! 93: break; ! 94: } ! 95: for (i = 0; i < 8; i++) ! 96: buf1[i] = RAND16; ! 97: IdeaCFB(out2, key, buf1, buf2, 3); ! 98: IdeaCFBx(out3, key, buf2, buf3, 3); ! 99: a = 0; ! 100: for (i = 0; i < 4; i++) ! 101: if (out2[i] != out3[i]) ! 102: a = 1; ! 103: for (i = 0; i < 8; i++) ! 104: if (buf1[i] != buf3[i]) ! 105: a = 1; ! 106: if (a) { ! 107: printf("CFB problem for j = %lu\n", j); ! 108: for (i = 0; i < 4; i++) ! 109: printf("%4x / %4x = %4x %4x\n", ! 110: out1[i], out2[i], out3[i], key[i]); ! 111: for (i = 0; i < 8; i++) ! 112: printf("%4x -> %4x -> %4x %4x\n", ! 113: buf1[i], buf2[i], buf3[i], key[i+4]); ! 114: } ! 115: } /* for (j) */ ! 116: timetest(in, key); ! 117: return 0; ! 118: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.