diff --git a/testsuite/serpent-test.c b/testsuite/serpent-test.c index 8c39632b394459c8500a03f88dee9dc0d284b85e..c00b0c3a8cd7ab6bd680175f60180b6df552d8f8 100644 --- a/testsuite/serpent-test.c +++ b/testsuite/serpent-test.c @@ -1,58 +1,81 @@ #include "testutils.h" #include "serpent.h" +static uint8_t * +decode_hex_reverse (const char *hex) +{ + unsigned length = decode_hex_length (hex); + uint8_t *p = xalloc(length); + unsigned i; + + decode_hex(p, hex); + + for (i = 0; i < (length+1)/2; i++) + { + uint8_t t = p[i]; + p[i] = p[length - 1 - i]; + p[length - 1 - i] = t; + } + return p; +} + +#define RH(x) decode_hex_reverse(x) +#define RHL(x) decode_hex_length(x), decode_hex_reverse(x) + int test_main(void) { /* The first test for each key size from the ecb_vk.txt and ecb_vt.txt * files in the serpent package. */ + /* NOTE: These vectors uses strange byte-reversed order of inputs + and outputs. */ /* 128 bit key */ /* vk, 1 */ test_cipher(&nettle_serpent128, - HL("8000000000000000 0000000000000000"), - HL("0000000000000000 0000000000000000"), - H("49AFBFAD9D5A3405 2CD8FFA5986BD2DD")); + RHL("8000000000000000 0000000000000000"), + RHL("0000000000000000 0000000000000000"), + RH("49AFBFAD9D5A3405 2CD8FFA5986BD2DD")); /* vt, 1 */ test_cipher(&nettle_serpent128, - HL("0000000000000000 0000000000000000"), - HL("8000000000000000 0000000000000000"), - H("10B5FFB720B8CB90 02A1142B0BA2E94A")); + RHL("0000000000000000 0000000000000000"), + RHL("8000000000000000 0000000000000000"), + RH("10B5FFB720B8CB90 02A1142B0BA2E94A")); /* 192 bit key */ /* vk, 1 */ test_cipher(&nettle_serpent192, - HL("8000000000000000 0000000000000000" + RHL("8000000000000000 0000000000000000" "0000000000000000"), - HL("0000000000000000 0000000000000000"), - H("E78E5402C7195568 AC3678F7A3F60C66")); + RHL("0000000000000000 0000000000000000"), + RH("E78E5402C7195568 AC3678F7A3F60C66")); /* vt, 1 */ test_cipher(&nettle_serpent192, - HL("0000000000000000 0000000000000000" + RHL("0000000000000000 0000000000000000" "0000000000000000"), - HL("8000000000000000 0000000000000000"), - H("B10B271BA25257E1 294F2B51F076D0D9")); + RHL("8000000000000000 0000000000000000"), + RH("B10B271BA25257E1 294F2B51F076D0D9")); /* 256 bit key */ /* vk, 1 */ test_cipher(&nettle_serpent256, - HL("8000000000000000 0000000000000000" + RHL("8000000000000000 0000000000000000" "0000000000000000 0000000000000000"), - HL("0000000000000000 0000000000000000"), - H("ABED96E766BF28CB C0EBD21A82EF0819")); + RHL("0000000000000000 0000000000000000"), + RH("ABED96E766BF28CB C0EBD21A82EF0819")); /* vt, 1 */ test_cipher(&nettle_serpent256, - HL("0000000000000000 0000000000000000" + RHL("0000000000000000 0000000000000000" "0000000000000000 0000000000000000"), - HL("8000000000000000 0000000000000000"), - H("DA5A7992B1B4AE6F 8C004BC8A7DE5520")); -#if 0 + RHL("8000000000000000 0000000000000000"), + RH("DA5A7992B1B4AE6F 8C004BC8A7DE5520")); + /* Test vectors from http://www.cs.technion.ac.il/~biham/Reports/Serpent/ */ @@ -91,12 +114,11 @@ test_main(void) H("2868B7A2D28ECD5E4FDEFAC3C4330074")); /* Set 4, vector# 1 */ - test_cipher(&nettle_serpent256, - HL("2BD6459F82C5B300952C49104881FF48" - "2BD6459F82C5B300952C49104881FF48"), - HL("EA024714AD5C4D84EA024714AD5C4D84"), - H("3E507730776B93FDEA661235E1DD99F0")); -#endif + test_cipher(&nettle_serpent256, + HL("2BD6459F82C5B300952C49104881FF48" + "2BD6459F82C5B300952C49104881FF48"), + HL("EA024714AD5C4D84EA024714AD5C4D84"), + H("3E507730776B93FDEA661235E1DD99F0")); SUCCESS(); }