From a14a7371645cf62b60459e6d1c424168876d8d3b Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Mon, 3 Mar 2003 01:00:16 +0000 Subject: [PATCH] added libtomcrypt-0.76 --- aes.c | 109 +++++++++++++++++++------------------------- blowfish.c | 31 +++---------- cast5.c | 17 +------ changes | 10 +++++ crypt.pdf | Bin 340546 -> 340497 bytes crypt.tex | 2 +- demos/test.c | 2 +- des.c | 23 +--------- ecc.c | 9 ++-- makefile | 6 +-- makefile.ps2 | 2 +- md2.c | 13 ------ md4.c | 26 ++--------- md5.c | 20 ++------- mycrypt.h | 4 +- notes/tech0002.txt | 52 +++++++++++++++++++++ rc2.c | 34 ++------------ rc5.c | 31 +++---------- rc6.c | 31 +++---------- safer+.c | 110 ++++++++++++++++++--------------------------- serpent.c | 31 +++---------- sha1.c | 23 +++------- sha256.c | 23 +++------- sha384.c | 21 ++------- sha512.c | 23 +++------- tiger.c | 21 ++------- twofish.c | 106 +++++++++++++++++++------------------------ 27 files changed, 266 insertions(+), 514 deletions(-) create mode 100644 notes/tech0002.txt diff --git a/aes.c b/aes.c index 6f265a8..f8f34c9 100644 --- a/aes.c +++ b/aes.c @@ -317,73 +317,54 @@ void rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_ int rijndael_test(void) { int errno; - - static const unsigned char pt128[16] = { - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }; - static const unsigned char key128[16] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; - static const unsigned char ct128[16] = { - 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, - 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a }; - - static const unsigned char key192[24] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }; - static const unsigned char ct192[16] = { - 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, - 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 }; - - static const unsigned char key256[32] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; - static const unsigned char ct256[16] = { - 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, - 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 }; + static const struct { + int keylen; + unsigned char key[32], pt[16], ct[16]; + } tests[] = { + { 16, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, + 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a } + }, { + 24, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, + 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 } + }, { + 32, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, + 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 } + } + }; + symmetric_key key; unsigned char tmp[2][16]; + int i; + + for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) { + if ((errno = rijndael_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { + return errno; + } - if ((errno = rijndael_setup(key128, 16, 0, &key)) != CRYPT_OK) { - return errno; - } - - rijndael_ecb_encrypt(pt128, tmp[0], &key); - rijndael_ecb_decrypt(tmp[0], tmp[1], &key); - if (memcmp(tmp[0], ct128, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } - if (memcmp(tmp[1], pt128, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } - - if ((errno = rijndael_setup(key192, 24, 0, &key)) != CRYPT_OK) { - return errno; - } - - rijndael_ecb_encrypt(pt128, tmp[0], &key); - rijndael_ecb_decrypt(tmp[0], tmp[1], &key); - if (memcmp(tmp[0], ct192, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } - if (memcmp(tmp[1], pt128, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } - - if ((errno = rijndael_setup(key256, 32, 0, &key)) != CRYPT_OK) { - return errno; - } - rijndael_ecb_encrypt(pt128, tmp[0], &key); - rijndael_ecb_decrypt(tmp[0], tmp[1], &key); - if (memcmp(tmp[0], ct256, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } - if (memcmp(tmp[1], pt128, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } + rijndael_ecb_encrypt(tests[i].pt, tmp[0], &key); + rijndael_ecb_decrypt(tmp[0], tmp[1], &key); + if (memcmp(tmp[0], tests[i].ct, 16) || memcmp(tmp[1], tests[i].pt, 16)) { + return CRYPT_FAIL_TESTVECTOR; + } + } return CRYPT_OK; } diff --git a/blowfish.c b/blowfish.c index e00cec7..431ec7c 100644 --- a/blowfish.c +++ b/blowfish.c @@ -634,9 +634,9 @@ int blowfish_test(void) } }; unsigned char buf[2][8]; - int x, failed; + int x; - for (x = failed = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { + for (x = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { /* setup key */ if ((errno = blowfish_setup(tests[x].key, 8, 16, &key)) != CRYPT_OK) { return errno; @@ -647,32 +647,11 @@ int blowfish_test(void) blowfish_ecb_decrypt(buf[0], buf[1], &key); /* compare */ - if (memcmp(buf[0], tests[x].ct, 8)) { -#if 0 - int y; - printf("\nEncrypt test %d failed\n", x); - for (y = 0; y < 8; y++) printf("%02x ", buf[0][y]); - printf("\n"); -#endif - failed = 1; - } - - if (memcmp(buf[1], tests[x].pt, 8)) { -#if 0 - int y; - printf("\nDecrypt test %d failed\n", x); - for (y = 0; y < 8; y++) printf("%02x ", buf[1][y]); - printf("\n"); -#endif - failed = 1; + if (memcmp(buf[0], tests[x].ct, 8) || memcmp(buf[1], tests[x].pt, 8)) { + return CRYPT_FAIL_TESTVECTOR; } } - - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } int blowfish_keysize(int *desired_keysize) diff --git a/cast5.c b/cast5.c index 62431d7..336e921 100644 --- a/cast5.c +++ b/cast5.c @@ -583,23 +583,8 @@ int cast5_test(void) return errno; } cast5_ecb_encrypt(tests[i].pt, buf, &key); - if (memcmp(buf, tests[i].ct, 8)) { -#if 0 - int j; - printf("\n\n\nFailed encrypt test: %d\n", i); - for (j = 0; j < 8; j++) printf("%02x ", buf[j]); - printf("\n"); -#endif - return CRYPT_FAIL_TESTVECTOR; - } cast5_ecb_decrypt(buf, buf2, &key); - if (memcmp(buf2, tests[i].pt, 8)) { -#if 0 - int j; - printf("\n\n\nFailed decrypt test: %d\n", i); - for (j = 0; j < 8; j++) printf("%02x ", buf2[j]); - printf("\n"); -#endif + if (memcmp(buf, tests[i].ct, 8) || memcmp(buf2, tests[i].pt, 8)) { return CRYPT_FAIL_TESTVECTOR; } diff --git a/changes b/changes index 5988099..cd8c1f2 100644 --- a/changes +++ b/changes @@ -1,3 +1,13 @@ +Nov 25th, 2002 +v0.76 -- Updated makefiles a bit more, use "-Os" instead of "-O2" to optimize for size. Got the lib + downto 265KB using GCC 3.2 on my x86 box. + -- Updated the SAFER+, Twofish and Rijndael test vector routine to use the table driven design. + -- Updated all other test vector routines to return as soon as an error is found + -- fixed a bug in the test program where errors in the hash test routines would not be reported + correctly. I found this by temporarily changing one of the bytes of the test vectors. All the + hashes check out [the demos/test.c would still have reported an error, just the wrong one]. + + Nov 24th, 2002 v0.75 -- Fixed a flaw in hash_filehandle, it should ARGCHK that the filehandle is not NULL -- Fixed a bug where in hash_file if the call to hash_filehandle failed the open file would diff --git a/crypt.pdf b/crypt.pdf index b26f720ac5a27910becf03542dd47f0a324abff9..d76ccc47a5380e97395b86542a28be202fd536f7 100644 GIT binary patch delta 80612 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 delta 80760 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 diff --git a/crypt.tex b/crypt.tex index eb7df20..fc68be9 100644 --- a/crypt.tex +++ b/crypt.tex @@ -44,7 +44,7 @@ \def\gap{\vspace{0.5ex}} \makeindex \begin{document} -\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.75} +\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.76} \author{Tom St Denis \\ Algonquin College \\ \\ diff --git a/demos/test.c b/demos/test.c index 39d966e..ca05e31 100644 --- a/demos/test.c +++ b/demos/test.c @@ -307,7 +307,7 @@ void hash_tests(void) printf("Hash tests\n"); for (x = 0; hash_descriptor[x].name != NULL; x++) { printf(" %10s (%2d) ", hash_descriptor[x].name, hash_descriptor[x].ID); - if (hash_descriptor[x].test() != CRYPT_OK) + if ((errno = hash_descriptor[x].test()) != CRYPT_OK) printf("**failed** Reason: %s\n", error_to_string(errno)); else printf("passed\n"); diff --git a/des.c b/des.c index 6edda71..ae35bdf 100644 --- a/des.c +++ b/des.c @@ -630,7 +630,7 @@ int des_test(void) http://www.ecs.soton.ac.uk/~prw99r/ez438/vectors.txt ***/ }; - int i, failed=0; + int i; unsigned char out[8]; symmetric_key des; @@ -646,29 +646,10 @@ int des_test(void) } if (memcmp(cases[i].out, out, sizeof out) != 0) { -#if 0 - int j; - printf("DES test #%d failed!\n", cases[i].num); - - printf( "got: "); - for (j=0; j < (int)sizeof out; j++) { - printf("%02x ", out[j] & 0xff); - } - printf("\nwanted: "); - for(j=0; j < (int)sizeof out; j++) { - printf("%02x ", cases[i].out[j] & 0xff); - } - printf("\n"); -#endif - - failed++; + return CRYPT_FAIL_TESTVECTOR; } } - if(failed > 0) { - return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; } diff --git a/ecc.c b/ecc.c index e2cae85..e7ebe7d 100644 --- a/ecc.c +++ b/ecc.c @@ -251,8 +251,8 @@ static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus) if (mp_mul_2(&P->y, &tmp) != MP_OKAY) { goto error; } /* tmp = 2*y */ if (mp_invmod(&tmp, modulus, &tmp) != MP_OKAY) { goto error; } /* tmp = 1/tmp mod modulus */ if (mp_sqr(&P->x, &s) != MP_OKAY) { goto error; } /* s = x^2 */ - if (mp_mul_d(&s, 3, &s) != MP_OKAY) { goto error; } /* s = 3*(x^2) */ - if (mp_sub_d(&s, 3, &s) != MP_OKAY) { goto error; } /* s = 3*(x^2) - 3 */ + if (mp_mul_d(&s,(mp_digit)3, &s) != MP_OKAY) { goto error; } /* s = 3*(x^2) */ + if (mp_sub_d(&s,(mp_digit)3, &s) != MP_OKAY) { goto error; } /* s = 3*(x^2) - 3 */ if (mp_mulmod(&s, &tmp, modulus, &s) != MP_OKAY) { goto error; } /* s = tmp * s mod modulus */ /* Xr = s^2 - 2Xp */ @@ -565,10 +565,11 @@ static int compress_y_point(ecc_point *pt, int idx, int *result) if (mp_exptmod(&tmp, &tmp2, &p, &tmp) != MP_OKAY) { goto error; } /* tmp = (x^3 - 3x + b)^((p+1)/4) mod p */ /* if tmp equals the y point give a 0, otherwise 1 */ - if (mp_cmp(&tmp, &pt->y) == 0) + if (mp_cmp(&tmp, &pt->y) == 0) { *result = 0; - else + } else { *result = 1; + } res = CRYPT_OK; goto done; diff --git a/makefile b/makefile index 53de606..48afa64 100644 --- a/makefile +++ b/makefile @@ -9,7 +9,7 @@ # a build. This is easy to remedy though, for those that have problems. # The version -VERSION=0.75 +VERSION=0.76 #Compiler and Linker Names CC=gcc @@ -34,10 +34,10 @@ CFLAGS += -c -I./ -Wall -Wsign-compare -W -Wno-unused -Werror \ -DXCLOCKS_PER_SEC=$(XCLOCKS_PER_SEC) #optimize for SPEED (comment out SIZE/DEBUG line as well) -#CFLAGS += -O3 -fomit-frame-pointer -funroll-loops +#CFLAGS += -O3 -funroll-loops #optimize for SIZE (comment out SPEED/DEBUG line as well) -CFLAGS += -O2 +CFLAGS += -Os #compile for DEBUGGING #CFLAGS += -g3 diff --git a/makefile.ps2 b/makefile.ps2 index 932a17e..a7cc405 100644 --- a/makefile.ps2 +++ b/makefile.ps2 @@ -51,7 +51,7 @@ CFLAGS += -DNO_FILE #CFLAGS += -O3 -fomit-frame-pointer -funroll-loops #optimize for SIZE (comment out SPEED line as well) -CFLAGS += -O2 +CFLAGS += -Os #These flags control how the library gets built. diff --git a/md2.c b/md2.c index e29db7a..c26fb12 100644 --- a/md2.c +++ b/md2.c @@ -180,19 +180,6 @@ int md2_test(void) md2_process(&md, tests[i].msg, strlen(tests[i].msg)); md2_done(&md, buf); if (memcmp(buf, tests[i].md, 16)) { -#if 0 - int j; - printf("\n\nFailed test %d\n\n", i); - for (j = 0; j < 16; j++) { - printf("%02x ", buf[j]); - } - printf("\n"); - printf("Should have been\n"); - for (j = 0; j < 16; j++) { - printf("%02x ", tests[i].md[j]); - } - printf("\n"); -#endif return CRYPT_FAIL_TESTVECTOR; } } diff --git a/md4.c b/md4.c index bbf2700..6cfaeba 100644 --- a/md4.c +++ b/md4.c @@ -249,39 +249,19 @@ int md4_test(void) {0xe3, 0x3b, 0x4d, 0xdc, 0x9c, 0x38, 0xf2, 0x19, 0x9c, 0x3e, 0x7b, 0x16, 0x4f, 0xcc, 0x05, 0x36} }, }; - int i, failed; + int i; hash_state md; unsigned char digest[16]; - failed = 0; for(i = 0; i < (int)(sizeof(cases) / sizeof(cases[0])); i++) { md4_init(&md); md4_process(&md, cases[i].input, cases[i].inputlen); md4_done(&md, digest); - if(memcmp(digest, cases[i].digest, 16) != 0) { -#if 0 - int j; - printf("\nMD4 test #%d failed\n", cases[i].num); - printf( "Result: 0x"); - for(j=0; j < 16; j++) { - printf("%2x", digest[j]); - } - printf("\nCorrect: 0x"); - for(j=0; j < 16; j++) { - printf("%2x", cases[i].digest[j]); - } - printf("\n"); -#endif - failed++; - } else { -/* printf("MD4 test #%d succeeded.\n", cases[i].num); */ + if (memcmp(digest, cases[i].digest, 16) != 0) { + return CRYPT_FAIL_TESTVECTOR; } - } - if (failed) { - return CRYPT_FAIL_TESTVECTOR; } - return CRYPT_OK; } diff --git a/md5.c b/md5.c index 2baf1b6..a489f62 100644 --- a/md5.c +++ b/md5.c @@ -236,31 +236,19 @@ int md5_test(void) { NULL, { 0 } } }; - int failed, i; + int i; unsigned char tmp[16]; hash_state md; - for (failed = i = 0; tests[i].msg != NULL; i++) { + for (i = 0; tests[i].msg != NULL; i++) { md5_init(&md); md5_process(&md, tests[i].msg, strlen(tests[i].msg)); md5_done(&md, tmp); if (memcmp(tmp, tests[i].hash, 16)) { -#if 0 - int j; - printf("MD5 Test %d (len == %d) failed\nGot (as a result): ", i, strlen(tests[i].msg)); - for (j = 0; j < 16; j++) { - printf("%02x ", tmp[j]); - } - printf("\n"); -#endif - failed = 1; + return CRYPT_FAIL_TESTVECTOR; } } - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } #endif diff --git a/mycrypt.h b/mycrypt.h index 1604854..fc8eeaf 100644 --- a/mycrypt.h +++ b/mycrypt.h @@ -13,8 +13,8 @@ extern "C" { #endif /* version */ -#define CRYPT 0x0075 -#define SCRYPT "0.75" +#define CRYPT 0x0076 +#define SCRYPT "0.76" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 128 diff --git a/notes/tech0002.txt b/notes/tech0002.txt new file mode 100644 index 0000000..b9990e0 --- /dev/null +++ b/notes/tech0002.txt @@ -0,0 +1,52 @@ +Tech Note 0002 +How to avoid non-intrusive timing attacks with online computations +Tom St Denis + +Introduction +------------ + +A timing attack is when an attacker can observe a side channel of the device (in this case time). In this tech note +we consider only non-intrusive timing attacks with respect to online computations. That is an attacker can +determine when a computation (such as a public key encryption) begins and ends but cannot observe the device +directly. This is specifically important for applications which transmit data via a public network. + +Consider a Diffie-Hellman encryption which requires the sender to make up a public key "y = g^x mod p". Libtomcrypt +uses the MPI bignum library to perform the operation. The time it takes to compute y is controlled by the number +of 1 bits in the exponent 'x'. To a large extent there will be the same number of squaring operations. "1" bits in +the exponent require the sender to perform a multiplication. This means to a certain extent an attacker can +determine not only the magnitude of 'x' but the number of one bits. With this information the attacker cannot directly +learn the key used. However, good cryptography mandates the close scrutiny of any practical side channel. + +Similar logic applies to the other various routines. Fortunately for this case there is a simple solution. First, +determine the maximum time the particular operation can require. For instance, on an Athlon 1.53Ghz XP processor a +DH-768 encryption requires roughly 50 milliseconds. Take that time and round it up. Now place a delay after the call. + +For example, + +void demo(void) { + clock_t t1; + + // get initial clock + t1 = clock(); + + // some PK function + + // now delay + while (clock() < (t1 + 100)); + + // transmit data... + +} + +This code has the effect of taking at least 100 ms always. In effect someone analyzing the traffic will see that the +operations always take a fixed amount of time. Since no two platforms are the same this type of fix has not been +incorporated into libtomcrypt (nor is it desired for many platforms). This requires on the developers part to profile +the code to determine the delays required. + +Note that this "quick" fix has no effect against an intrusive attacker. For example, power consumption will drop +significantly in the loop after the operation. However, this type of fix is more important to secure the user of the +application/device. For example, a user placing an order online won't try to cheat themselves by cracking open their +device and performing side-channel cryptanalysis. An attacker over a network might try to use the timing information +against the user. + + diff --git a/rc2.c b/rc2.c index c4a8b81..70494b2 100644 --- a/rc2.c +++ b/rc2.c @@ -258,11 +258,10 @@ int rc2_test(void) { 0x22, 0x69, 0x55, 0x2a, 0xb0, 0xf8, 0x5c, 0xa6 } } }; - int x, failed, errno; + int x, errno; symmetric_key skey; unsigned char buf[2][8]; - failed = 0; for (x = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { zeromem(buf, sizeof(buf)); if ((errno = rc2_setup(tests[x].key, tests[x].keylen, 0, &skey)) != CRYPT_OK) { @@ -272,36 +271,11 @@ int rc2_test(void) rc2_ecb_encrypt(tests[x].pt, buf[0], &skey); rc2_ecb_decrypt(buf[0], buf[1], &skey); - if (memcmp(buf[0], tests[x].ct, 8)) { -#if 0 - int y; - printf("\nTest %d failed to encrypt\n", x); - for (y = 0; y < 8; y++) { - printf("%02x ", buf[0][y]); - } - printf("\n"); -#endif - failed = 1; - } - - if (memcmp(buf[1], tests[x].pt, 8)) { -#if 0 - int y; - printf("\nTest %d failed to decrypt\n", x); - for (y = 0; y < 8; y++) { - printf("%02x ", buf[1][y]); - } - printf("\n"); -#endif - failed = 1; + if (memcmp(buf[0], tests[x].ct, 8) || memcmp(buf[1], tests[x].pt, 8)) { + return CRYPT_FAIL_TESTVECTOR; } } - - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } int rc2_keysize(int *keysize) diff --git a/rc5.c b/rc5.c index d699ba6..82866d3 100644 --- a/rc5.c +++ b/rc5.c @@ -175,10 +175,10 @@ int rc5_test(void) } }; unsigned char buf[2][8]; - int x, failed, errno; + int x, errno; symmetric_key key; - for (x = failed = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { + for (x = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { /* setup key */ if ((errno = rc5_setup(tests[x].key, 16, 12, &key)) != CRYPT_OK) { return errno; @@ -189,32 +189,11 @@ int rc5_test(void) rc5_ecb_decrypt(buf[0], buf[1], &key); /* compare */ - if (memcmp(buf[0], tests[x].ct, 8)) { -#if 0 - int y; - printf("\nEncrypt test %d failed\n", x); - for (y = 0; y < 8; y++) printf("%02x ", buf[0][y]); - printf("\n"); -#endif - failed = 1; - } - - if (memcmp(buf[1], tests[x].pt, 8)) { -#if 0 - int y; - printf("\nDecrypt test %d failed\n", x); - for (y = 0; y < 8; y++) printf("%02x ", buf[1][y]); - printf("\n"); -#endif - failed = 1; + if (memcmp(buf[0], tests[x].ct, 8) || memcmp(buf[1], tests[x].pt, 8)) { + return CRYPT_FAIL_TESTVECTOR; } } - - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } int rc5_keysize(int *desired_keysize) diff --git a/rc6.c b/rc6.c index fc7aacd..14fb74b 100644 --- a/rc6.c +++ b/rc6.c @@ -195,10 +195,10 @@ int rc6_test(void) } }; unsigned char buf[2][16]; - int x, failed, errno; + int x, errno; symmetric_key key; - for (x = failed = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { + for (x = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { /* setup key */ if ((errno = rc6_setup(tests[x].key, tests[x].keylen, 0, &key)) != CRYPT_OK) { return errno; @@ -209,32 +209,11 @@ int rc6_test(void) rc6_ecb_decrypt(buf[0], buf[1], &key); /* compare */ - if (memcmp(buf[0], tests[x].ct, 16)) { -#if 0 - int y; - printf("\nEncrypt test %d failed\n", x); - for (y = 0; y < 16; y++) printf("%02x ", buf[0][y]); - printf("\n"); -#endif - failed = 1; - } - - if (memcmp(buf[1], tests[x].pt, 16)) { -#if 0 - int y; - printf("\nDecrypt test %d failed\n", x); - for (y = 0; y < 16; y++) printf("%02x ", buf[1][y]); - printf("\n"); -#endif - failed = 1; + if (memcmp(buf[0], tests[x].ct, 16) || memcmp(buf[1], tests[x].pt, 16)) { + return CRYPT_FAIL_TESTVECTOR; } } - - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } int rc6_keysize(int *desired_keysize) diff --git a/safer+.c b/safer+.c index 13254b7..6c1086a 100644 --- a/safer+.c +++ b/safer+.c @@ -407,77 +407,55 @@ void saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_ke int saferp_test(void) { - static const unsigned char key128[16] = - { 41, 35, 190, 132, 225, 108, 214, 174, - 82, 144, 73, 241, 241, 187, 233, 235 }; - static const unsigned char pt128[16] = - { 179, 166, 219, 60, 135, 12, 62, 153, - 36, 94, 13, 28, 6, 183, 71, 222 }; - static const unsigned char ct128[16] = - { 224, 31, 182, 10, 12, 255, 84, 70, - 127, 13, 89, 249, 9, 57, 165, 220 }; - - static const unsigned char key192[24] = - { 72, 211, 143, 117, 230, 217, 29, 42, - 229, 192, 247, 43, 120, 129, 135, 68, - 14, 95, 80, 0, 212, 97, 141, 190 }; - static const unsigned char pt192[16] = - { 123, 5, 21, 7, 59, 51, 130, 31, - 24, 112, 146, 218, 100, 84, 206, 177 }; - static const unsigned char ct192[16] = - { 92, 136, 4, 63, 57, 95, 100, 0, - 150, 130, 130, 16, 193, 111, 219, 133 }; - - static const unsigned char key256[32] = - { 243, 168, 141, 254, 190, 242, 235, 113, - 255, 160, 208, 59, 117, 6, 140, 126, - 135, 120, 115, 77, 208, 190, 130, 190, - 219, 194, 70, 65, 43, 140, 250, 48 }; - static const unsigned char pt256[16] = - { 127, 112, 240, 167, 84, 134, 50, 149, - 170, 91, 104, 19, 11, 230, 252, 245 }; - static const unsigned char ct256[16] = - { 88, 11, 25, 36, 172, 229, 202, 213, - 170, 65, 105, 153, 220, 104, 153, 138 }; + static const struct { + int keylen; + unsigned char key[32], pt[16], ct[16]; + } tests[] = { + { + 16, + { 41, 35, 190, 132, 225, 108, 214, 174, + 82, 144, 73, 241, 241, 187, 233, 235 }, + { 179, 166, 219, 60, 135, 12, 62, 153, + 36, 94, 13, 28, 6, 183, 71, 222 }, + { 224, 31, 182, 10, 12, 255, 84, 70, + 127, 13, 89, 249, 9, 57, 165, 220 } + }, { + 24, + { 72, 211, 143, 117, 230, 217, 29, 42, + 229, 192, 247, 43, 120, 129, 135, 68, + 14, 95, 80, 0, 212, 97, 141, 190 }, + { 123, 5, 21, 7, 59, 51, 130, 31, + 24, 112, 146, 218, 100, 84, 206, 177 }, + { 92, 136, 4, 63, 57, 95, 100, 0, + 150, 130, 130, 16, 193, 111, 219, 133 } + }, { + 32, + { 243, 168, 141, 254, 190, 242, 235, 113, + 255, 160, 208, 59, 117, 6, 140, 126, + 135, 120, 115, 77, 208, 190, 130, 190, + 219, 194, 70, 65, 43, 140, 250, 48 }, + { 127, 112, 240, 167, 84, 134, 50, 149, + 170, 91, 104, 19, 11, 230, 252, 245 }, + { 88, 11, 25, 36, 172, 229, 202, 213, + 170, 65, 105, 153, 220, 104, 153, 138 } + } + }; unsigned char buf[2][16]; symmetric_key skey; - int errno; + int errno, i; - /* test 128-bit key */ - if ((errno = saferp_setup(key128, 16, 0, &skey)) != CRYPT_OK) { - return errno; - } - saferp_ecb_encrypt(pt128, buf[0], &skey); - saferp_ecb_decrypt(buf[0], buf[1], &skey); + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + if ((errno = saferp_setup(tests[i].key, tests[i].keylen, 0, &skey)) != CRYPT_OK) { + return errno; + } + saferp_ecb_encrypt(tests[i].pt, buf[0], &skey); + saferp_ecb_decrypt(buf[0], buf[1], &skey); - /* compare */ - if (memcmp(buf[0], &ct128, 16) || memcmp(buf[1], &pt128, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* test 192-bit key */ - if ((errno = saferp_setup(key192, 24, 0, &skey)) != CRYPT_OK) { - return errno; - } - saferp_ecb_encrypt(pt192, buf[0], &skey); - saferp_ecb_decrypt(buf[0], buf[1], &skey); - - /* compare */ - if (memcmp(buf[0], &ct192, 16) || memcmp(buf[1], &pt192, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* test 256-bit key */ - if ((errno = saferp_setup(key256, 32, 0, &skey)) != CRYPT_OK) { - return errno; - } - saferp_ecb_encrypt(pt256, buf[0], &skey); - saferp_ecb_decrypt(buf[0], buf[1], &skey); - - /* compare */ - if (memcmp(buf[0], &ct256, 16) || memcmp(buf[1], &pt256, 16)) { - return CRYPT_FAIL_TESTVECTOR; + /* compare */ + if (memcmp(buf[0], tests[i].ct, 16) || memcmp(buf[1], tests[i].pt, 16)) { + return CRYPT_FAIL_TESTVECTOR; + } } return CRYPT_OK; diff --git a/serpent.c b/serpent.c index 05902e5..b3f8ef7 100644 --- a/serpent.c +++ b/serpent.c @@ -661,10 +661,10 @@ int serpent_test(void) }; unsigned char buf[2][16]; - int x, failed, errno; + int x, errno; symmetric_key key; - for (x = failed = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { + for (x = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { /* setup key */ if ((errno = serpent_setup(tests[x].key, tests[x].keylen, 0, &key))!= CRYPT_OK) { return errno; @@ -675,32 +675,11 @@ int serpent_test(void) serpent_ecb_decrypt(buf[0], buf[1], &key); /* compare */ - if (memcmp(buf[0], tests[x].ct, 16)) { -#if 0 - int y; - printf("\nEncrypt test %d failed\n", x); - for (y = 0; y < 16; y++) printf("%02x ", buf[0][y]); - printf("\n"); -#endif - failed = 1; - } - - if (memcmp(buf[1], tests[x].pt, 16)) { -#if 0 - int y; - printf("\nDecrypt test %d failed\n", x); - for (y = 0; y < 16; y++) printf("%02x ", buf[1][y]); - printf("\n"); -#endif - failed = 1; + if (memcmp(buf[0], tests[x].ct, 16) || memcmp(buf[1], tests[x].pt, 16)) { + return CRYPT_FAIL_TESTVECTOR; } } - - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } int serpent_keysize(int *desired_keysize) diff --git a/sha1.c b/sha1.c index 4e5e07d..f27a536 100644 --- a/sha1.c +++ b/sha1.c @@ -196,35 +196,22 @@ int sha1_test(void) { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 } - }, - { NULL, { 0 }} + } }; - int failed, i; + int i; unsigned char tmp[20]; hash_state md; - for (failed = i = 0; tests[i].msg != NULL; i++) { + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { sha1_init(&md); sha1_process(&md, tests[i].msg, strlen(tests[i].msg)); sha1_done(&md, tmp); if (memcmp(tmp, tests[i].hash, 20)) { -#if 0 - int j; - printf("\nSHA-1 Test %d failed\nGot (as a result): ", i); - for (j = 0; j < 20; j++) { - printf("%02x ", tmp[j]); - } - printf("\n"); -#endif - failed = 1; + return CRYPT_FAIL_TESTVECTOR; } } - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } #endif diff --git a/sha256.c b/sha256.c index b54421d..a38f7e9 100644 --- a/sha256.c +++ b/sha256.c @@ -32,7 +32,7 @@ static const unsigned long K[64] = { }; /* Various logical functions */ -#define Ch(x,y,z) ((x & y) ^ (~x & z)) +#define Ch(x,y,z) ((x & y) | (~x & z)) #define Maj(x,y,z) ((x & y) ^ (x & z) ^ (y & z)) #define S(x, n) ROR((x),(n)) #define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) @@ -194,34 +194,21 @@ int sha256_test(void) 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67, 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 } }, - { NULL, { 0 } } }; - int failed, i; + int i; unsigned char tmp[32]; hash_state md; - for (failed = i = 0; tests[i].msg != NULL; i++) { + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { sha256_init(&md); sha256_process(&md, tests[i].msg, strlen(tests[i].msg)); sha256_done(&md, tmp); if (memcmp(tmp, tests[i].hash, 32)) { -#if 0 - int j; - printf("\nSHA-256 Test %d failed\nGot (as a result): ", i); - for (j = 0; j < 32; j++) { - printf("%02x ", tmp[j]); - } - printf("\n"); -#endif - failed = 1; + return CRYPT_FAIL_TESTVECTOR; } } - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } #endif diff --git a/sha384.c b/sha384.c index 4c4f492..72835e9 100644 --- a/sha384.c +++ b/sha384.c @@ -71,34 +71,21 @@ int sha384_test(void) 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9, 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 } }, - { NULL, { 0 }} }; - int failed, i; + int i; unsigned char tmp[48]; hash_state md; - for (failed = i = 0; tests[i].msg != NULL; i++) { + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { sha384_init(&md); sha384_process(&md, tests[i].msg, strlen(tests[i].msg)); sha384_done(&md, tmp); if (memcmp(tmp, tests[i].hash, 48)) { -#if 0 - int j; - printf("\nSHA-384 Test %d failed\nGot (as a result): ", i); - for (j = 0; j < 48; j++) { - printf("%02x ", tmp[j]); - } - printf("\n"); -#endif - failed = 1; + return CRYPT_FAIL_TESTVECTOR; } } - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } diff --git a/sha512.c b/sha512.c index ecb3107..dfeaf54 100644 --- a/sha512.c +++ b/sha512.c @@ -59,7 +59,7 @@ CONST64(0x5fcb6fab3ad6faec), CONST64(0x6c44198c4a475817) }; /* Various logical functions */ -#define Ch(x,y,z) ((x & y) ^ (~x & z)) +#define Ch(x,y,z) ((x & y) | (~x & z)) #define Maj(x,y,z) ((x & y) ^ (x & z) ^ (y & z)) #define S(x, n) ROR64((x),(n)) #define R(x, n) (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)n)) @@ -232,34 +232,21 @@ int sha512_test(void) 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54, 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 } }, - { NULL, { 0 }} }; - int failed, i; + int i; unsigned char tmp[64]; hash_state md; - for (failed = i = 0; tests[i].msg != NULL; i++) { + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { sha512_init(&md); sha512_process(&md, tests[i].msg, strlen(tests[i].msg)); sha512_done(&md, tmp); if (memcmp(tmp, tests[i].hash, 64)) { -#if 0 - int j; - printf("\nSHA-512 Test %d failed\nGot (as a result): ", i); - for (j = 0; j < 64; j++) { - printf("%02x ", tmp[j]); - } - printf("\n"); -#endif - failed = 1; + return CRYPT_FAIL_TESTVECTOR; } } - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } #ifdef SHA384 diff --git a/tiger.c b/tiger.c index 07fb3ce..2b685e2 100644 --- a/tiger.c +++ b/tiger.c @@ -718,34 +718,21 @@ int tiger_test(void) 0x58, 0x48, 0xa7, 0xe0, 0xae, 0x6a, 0xac, 0x76, 0xe4, 0xff, 0x59, 0x0a, 0xe7, 0x15, 0xfd, 0x25 } }, - { NULL, { 0 }} }; - int failed, i; + int i; unsigned char tmp[24]; hash_state md; - for (failed = i = 0; tests[i].msg != NULL; i++) { + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { tiger_init(&md); tiger_process(&md, tests[i].msg, strlen(tests[i].msg)); tiger_done(&md, tmp); if (memcmp(tmp, tests[i].hash, 24)) { -#if 0 - int j; - printf("\nTIGER-192 Test %d failed\nGot (as a result): ", i); - for (j = 0; j < 24; j++) { - printf("%02x ", tmp[j]); - } - printf("\n"); -#endif - failed = 1; + return CRYPT_FAIL_TESTVECTOR; } } - if (failed == 1) { - return CRYPT_FAIL_TESTVECTOR; - } else { - return CRYPT_OK; - } + return CRYPT_OK; } #endif diff --git a/twofish.c b/twofish.c index b057c6e..eafd458 100644 --- a/twofish.c +++ b/twofish.c @@ -225,9 +225,9 @@ static unsigned long sbox(int i, unsigned long x) burn_stack(sizeof(unsigned char) * 11); return y; } -#endif +#endif /* CLEAN_STACK */ -#endif +#endif /* TWOFISH_TABLES */ /* computes ab mod p */ static unsigned long gf_mult(unsigned long a, unsigned long b, unsigned long p) @@ -637,70 +637,54 @@ void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_k int twofish_test(void) { - static const unsigned char key128[16] = { - 0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, - 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A }; - static const unsigned char pt128[16] = { - 0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E, - 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19 }; - static const unsigned char ct128[16] = { - 0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85, - 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3 }; + static const struct { + int keylen; + unsigned char key[32], pt[16], ct[16]; + } tests[] = { + { 16, + { 0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, + 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A }, + { 0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E, + 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19 }, + { 0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85, + 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3 } + }, { + 24, + { 0x88, 0xB2, 0xB2, 0x70, 0x6B, 0x10, 0x5E, 0x36, + 0xB4, 0x46, 0xBB, 0x6D, 0x73, 0x1A, 0x1E, 0x88, + 0xEF, 0xA7, 0x1F, 0x78, 0x89, 0x65, 0xBD, 0x44 }, + { 0x39, 0xDA, 0x69, 0xD6, 0xBA, 0x49, 0x97, 0xD5, + 0x85, 0xB6, 0xDC, 0x07, 0x3C, 0xA3, 0x41, 0xB2 }, + { 0x18, 0x2B, 0x02, 0xD8, 0x14, 0x97, 0xEA, 0x45, + 0xF9, 0xDA, 0xAC, 0xDC, 0x29, 0x19, 0x3A, 0x65 } + }, { + 32, + { 0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, + 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D, + 0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, + 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F }, + { 0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, + 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6 }, + { 0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, + 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA } + } +}; - static const unsigned char key192[24] = { - 0x88, 0xB2, 0xB2, 0x70, 0x6B, 0x10, 0x5E, 0x36, - 0xB4, 0x46, 0xBB, 0x6D, 0x73, 0x1A, 0x1E, 0x88, - 0xEF, 0xA7, 0x1F, 0x78, 0x89, 0x65, 0xBD, 0x44 }; - static const unsigned char pt192[16] = { - 0x39, 0xDA, 0x69, 0xD6, 0xBA, 0x49, 0x97, 0xD5, - 0x85, 0xB6, 0xDC, 0x07, 0x3C, 0xA3, 0x41, 0xB2 }; - static const unsigned char ct192[16] = { - 0x18, 0x2B, 0x02, 0xD8, 0x14, 0x97, 0xEA, 0x45, - 0xF9, 0xDA, 0xAC, 0xDC, 0x29, 0x19, 0x3A, 0x65 }; - - static const unsigned char key256[32] = { - 0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, - 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D, - 0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, - 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F }; - static const unsigned char pt256[16] = { - 0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, - 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6 }; - static const unsigned char ct256[16] = { - 0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, - 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA }; symmetric_key key; unsigned char tmp[2][16]; - int errno; - - if ((errno = twofish_setup(key128, 16, 0, &key)) != CRYPT_OK) { - return errno; - } - twofish_ecb_encrypt(pt128, tmp[0], &key); - twofish_ecb_decrypt(tmp[0], tmp[1], &key); - if (memcmp(tmp[0], ct128, 16) || memcmp(tmp[1], pt128, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } + int errno, i; - if ((errno = twofish_setup(key192, 24, 0, &key)) != CRYPT_OK) { - return errno; - } - twofish_ecb_encrypt(pt192, tmp[0], &key); - twofish_ecb_decrypt(tmp[0], tmp[1], &key); - if (memcmp(tmp[0], ct192, 16) || memcmp(tmp[1], pt192, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } - - if ((errno = twofish_setup(key256, 32, 0, &key)) != CRYPT_OK) { - return errno; - } - twofish_ecb_encrypt(pt256, tmp[0], &key); - twofish_ecb_decrypt(tmp[0], tmp[1], &key); - if (memcmp(tmp[0], ct256, 16) || memcmp(tmp[1], pt256, 16)) { - return CRYPT_FAIL_TESTVECTOR; - } - + for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) { + if ((errno = twofish_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { + return errno; + } + twofish_ecb_encrypt(tests[i].pt, tmp[0], &key); + twofish_ecb_decrypt(tmp[0], tmp[1], &key); + if (memcmp(tmp[0], tests[i].ct, 16) || memcmp(tmp[1], tests[i].pt, 16)) { + return CRYPT_FAIL_TESTVECTOR; + } + } return CRYPT_OK; }