X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=test_src%2Fmain-threefish-test.c;h=e40e59a727f37034d0728b1860780e4426053b82;hb=c239a90de4f9ea98d7c0f5962d200c1a6a6033d1;hp=6197e63d899ac6bdf43f71030fcac7e67d9d2dd7;hpb=56a151edecefbaeab43dac22c89a3bb9fe4f470e;p=avr-crypto-lib.git diff --git a/test_src/main-threefish-test.c b/test_src/main-threefish-test.c index 6197e63..e40e59a 100644 --- a/test_src/main-threefish-test.c +++ b/test_src/main-threefish-test.c @@ -40,6 +40,70 @@ char* algo_name = "Threefish"; /***************************************************************************** * additional validation-functions * *****************************************************************************/ + +void threefish256_dummy_init(const uint8_t* key, uint16_t keysize_b, void* ctx){ + uint8_t null[16]; + memset(null, 0, 16); + threefish256_init(key, null, ctx); +} + +void testrun_nessie_threefish256(void){ + nessie_bc_ctx.keysize_b = 256; + nessie_bc_ctx.blocksize_B = 32; + nessie_bc_ctx.ctx_size_B = sizeof(threefish256_ctx_t); + nessie_bc_ctx.name = "Threefish256"; + nessie_bc_ctx.cipher_genctx = threefish256_dummy_init; + nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)threefish256_enc; + nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)threefish256_dec; + nessie_bc_ctx.cipher_free = NULL; + + nessie_bc_run(); +} + +void threefish512_dummy_init(const uint8_t* key, uint16_t keysize_b, void* ctx){ + uint8_t null[16]; + memset(null, 0, 16); + threefish512_init(key, null, ctx); +} + +void testrun_nessie_threefish512(void){ + nessie_bc_ctx.keysize_b = 512; + nessie_bc_ctx.blocksize_B = 64; + nessie_bc_ctx.ctx_size_B = sizeof(threefish512_ctx_t); + nessie_bc_ctx.name = "Threefish512"; + nessie_bc_ctx.cipher_genctx = threefish512_dummy_init; + nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)threefish512_enc; + nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)threefish512_dec; + nessie_bc_ctx.cipher_free = NULL; + + nessie_bc_run(); +} + +void threefish1024_dummy_init(const uint8_t* key, uint16_t keysize_b, void* ctx){ + uint8_t null[16]; + memset(null, 0, 16); + threefish1024_init(key, null, ctx); +} + +void testrun_nessie_threefish1024(void){ + nessie_bc_ctx.keysize_b = 1024; + nessie_bc_ctx.blocksize_B = 128; + nessie_bc_ctx.ctx_size_B = sizeof(threefish1024_ctx_t); + nessie_bc_ctx.name = "Threefish1024"; + nessie_bc_ctx.cipher_genctx = threefish1024_dummy_init; + nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)threefish1024_enc; + nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)threefish1024_dec; + nessie_bc_ctx.cipher_free = NULL; + + nessie_bc_run(); +} + +void testrun_nessie_threefish(void){ + testrun_nessie_threefish256(); + testrun_nessie_threefish512(); + testrun_nessie_threefish1024(); +} + void testrun_stdtest_threefish256(void){ uint8_t key[32], data[32]; uint8_t tweak[16]; @@ -52,16 +116,16 @@ void testrun_stdtest_threefish256(void){ memset(tweak, 0, 16); cli_putstr_P(PSTR("\r\nkey: ")); - cli_hexdump(key, 32); + cli_hexdump_block(key, 32, 4, 16); cli_putstr_P(PSTR("\r\ntweak: ")); - cli_hexdump(tweak, 16); + cli_hexdump_block(tweak, 16, 4, 16); cli_putstr_P(PSTR("\r\nplain: ")); - cli_hexdump(data, 32); + cli_hexdump_block(data, 32, 4, 16); threefish256_init(key, tweak, &ctx); threefish256_enc(data, &ctx); cli_putstr_P(PSTR("\r\ncipher: ")); - cli_hexdump(data, 32); - + cli_hexdump_block(data, 32, 4, 16); + /* second test */ for(i=0; i<32; ++i){ key[i] = 0x10+i; data[i] = 0xFF-i; @@ -69,16 +133,16 @@ void testrun_stdtest_threefish256(void){ for(i=0; i<16; ++i){ tweak[i] = i; } - cli_putstr_P(PSTR("\r\n\r\nkey: ")); - cli_hexdump(key, 32); + cli_putstr_P(PSTR("\r\nkey: ")); + cli_hexdump_block(key, 32, 4, 16); cli_putstr_P(PSTR("\r\ntweak: ")); - cli_hexdump(tweak, 16); + cli_hexdump_block(tweak, 16, 4, 16); cli_putstr_P(PSTR("\r\nplain: ")); - cli_hexdump(data, 32); + cli_hexdump_block(data, 32, 4, 16); threefish256_init(key, tweak, &ctx); threefish256_enc(data, &ctx); cli_putstr_P(PSTR("\r\ncipher: ")); - cli_hexdump(data, 32); + cli_hexdump_block(data, 32, 4, 16); } void testrun_stdtest_threefish512(void){ @@ -93,21 +157,17 @@ void testrun_stdtest_threefish512(void){ memset(tweak, 0, 16); cli_putstr_P(PSTR("\r\nkey: ")); - cli_hexdump(key, 32); + cli_hexdump_block(key, 32, 4, 16); cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(key+32, 32); + cli_hexdump_block(key+32, 32, 4, 16); cli_putstr_P(PSTR("\r\ntweak: ")); - cli_hexdump(tweak, 16); + cli_hexdump_block(tweak, 16, 4, 16); cli_putstr_P(PSTR("\r\nplain: ")); - cli_hexdump(data, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+32, 32); + cli_hexdump_block(data, 64, 4, 16); threefish512_init(key, tweak, &ctx); threefish512_enc(data, &ctx); cli_putstr_P(PSTR("\r\ncipher: ")); - cli_hexdump(data, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+32, 32); + cli_hexdump_block(data, 64, 4, 16); for(i=0; i<64; ++i){ key[i] = 0x10+i; @@ -116,22 +176,18 @@ void testrun_stdtest_threefish512(void){ for(i=0; i<16; ++i){ tweak[i] = i; } - cli_putstr_P(PSTR("\r\n\r\nkey: ")); - cli_hexdump(key, 32); + cli_putstr_P(PSTR("\r\nkey: ")); + cli_hexdump_block(key, 32, 4, 16); cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(key+32, 32); + cli_hexdump_block(key+32, 32, 4, 16); cli_putstr_P(PSTR("\r\ntweak: ")); - cli_hexdump(tweak, 16); + cli_hexdump_block(tweak, 16, 4, 16); cli_putstr_P(PSTR("\r\nplain: ")); - cli_hexdump(data, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+32, 32); + cli_hexdump_block(data, 64, 4, 16); threefish512_init(key, tweak, &ctx); threefish512_enc(data, &ctx); cli_putstr_P(PSTR("\r\ncipher: ")); - cli_hexdump(data, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+32, 32); + cli_hexdump_block(data, 64, 4, 16); } void testrun_stdtest_threefish1024(void){ @@ -146,34 +202,16 @@ void testrun_stdtest_threefish1024(void){ memset(tweak, 0, 16); cli_putstr_P(PSTR("\r\nkey: ")); - cli_hexdump(key, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(key+32, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(key+64, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(key+96, 32); + cli_hexdump_block(key, 128, 4, 16); cli_putstr_P(PSTR("\r\ntweak: ")); - cli_hexdump(tweak, 16); + cli_hexdump_block(tweak, 16, 4, 16); cli_putstr_P(PSTR("\r\nplain: ")); - cli_hexdump(data, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+32, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+64, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+96, 32); + cli_hexdump_block(data, 128, 4, 16); threefish1024_init(key, tweak, &ctx); threefish1024_enc(data, &ctx); cli_putstr_P(PSTR("\r\ncipher: ")); - cli_hexdump(data, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+32, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+64, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+96, 32); - + cli_hexdump_block(data, 128, 4, 16); + for(i=0; i<128; ++i){ key[i] = 0x10+i; data[i] = 0xFF-i; @@ -181,35 +219,17 @@ void testrun_stdtest_threefish1024(void){ for(i=0; i<16; ++i){ tweak[i] = i; } - cli_putstr_P(PSTR("\r\n\r\nkey: ")); - cli_hexdump(key, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(key+32, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(key+64, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(key+96, 32); + cli_putstr_P(PSTR("\r\nkey: ")); + cli_hexdump_block(key, 128, 4, 16); cli_putstr_P(PSTR("\r\ntweak: ")); - cli_hexdump(tweak, 16); + cli_hexdump_block(tweak, 16, 4, 16); cli_putstr_P(PSTR("\r\nplain: ")); - cli_hexdump(data, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+32, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+64, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+96, 32); + cli_hexdump_block(data, 128, 4, 16); threefish1024_init(key, tweak, &ctx); threefish1024_enc(data, &ctx); cli_putstr_P(PSTR("\r\ncipher: ")); - cli_hexdump(data, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+32, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+64, 32); - cli_putstr_P(PSTR("\r\n ")); - cli_hexdump(data+96, 32); - } + cli_hexdump_block(data, 128, 4, 16); +} void testrun_stdtest_threefish(void){ @@ -217,19 +237,146 @@ void testrun_stdtest_threefish(void){ testrun_stdtest_threefish512(); testrun_stdtest_threefish1024(); } + +void testrun_performance_threefish256(void){ + uint64_t t; + char str[16]; + uint8_t key[THREEFISH256_BLOCKSIZE_B]; + uint8_t data[THREEFISH256_BLOCKSIZE_B]; + uint8_t tweak[16]; + threefish256_ctx_t ctx; + + cli_putstr_P(PSTR("\r\nThreefish-256 performance:")); + + calibrateTimer(); + print_overhead(); + +// memset(key, 0, THREEFISH256_BLOCKSIZE_B); +// memset(tweak, 0, 16); + + startTimer(1); + threefish256_init(key, tweak, &ctx); + t = stopTimer(); + cli_putstr_P(PSTR("\r\n\tctx-gen time: ")); + ultoa((unsigned long)t, str, 10); + cli_putstr(str); + + startTimer(1); + threefish256_enc(data, &ctx); + t = stopTimer(); + cli_putstr_P(PSTR("\r\n\tencrypt time: ")); + ultoa((unsigned long)t, str, 10); + cli_putstr(str); + + cli_putstr_P(PSTR("\r\n")); +} + +void testrun_performance_threefish512(void){ + uint64_t t; + char str[16]; + uint8_t key[THREEFISH512_BLOCKSIZE_B]; + uint8_t data[THREEFISH512_BLOCKSIZE_B]; + uint8_t tweak[16]; + threefish512_ctx_t ctx; + + cli_putstr_P(PSTR("\r\nThreefish-512 performance:")); + + calibrateTimer(); + print_overhead(); + +// memset(key, 0, THREEFISH512_BLOCKSIZE_B); +// memset(tweak, 0, 16); + + startTimer(1); + threefish512_init(key, tweak, &ctx); + t = stopTimer(); + cli_putstr_P(PSTR("\r\n\tctx-gen time: ")); + ultoa((unsigned long)t, str, 10); + cli_putstr(str); + + startTimer(1); + threefish512_enc(data, &ctx); + t = stopTimer(); + cli_putstr_P(PSTR("\r\n\tencrypt time: ")); + ultoa((unsigned long)t, str, 10); + cli_putstr(str); + + cli_putstr_P(PSTR("\r\n")); +} + +void testrun_performance_threefish1024(void){ + uint64_t t; + char str[16]; + uint8_t key[THREEFISH1024_BLOCKSIZE_B]; + uint8_t data[THREEFISH1024_BLOCKSIZE_B]; + uint8_t tweak[16]; + threefish1024_ctx_t ctx; + + cli_putstr_P(PSTR("\r\nThreefish-1024 performance:")); + + calibrateTimer(); + print_overhead(); + +// memset(key, 0, THREEFISH1024_BLOCKSIZE_B); +// memset(tweak, 0, 16); + + startTimer(1); + threefish1024_init(key, tweak, &ctx); + t = stopTimer(); + cli_putstr_P(PSTR("\r\n\tctx-gen time: ")); + ultoa((unsigned long)t, str, 10); + cli_putstr(str); + + startTimer(1); + threefish1024_enc(data, &ctx); + t = stopTimer(); + cli_putstr_P(PSTR("\r\n\tencrypt time: ")); + ultoa((unsigned long)t, str, 10); + cli_putstr(str); + + cli_putstr_P(PSTR("\r\n")); +} + +void testrun_performance_threefish(void){ + testrun_performance_threefish256(); + testrun_performance_threefish512(); + testrun_performance_threefish1024(); +} + +void init_test(void){ + threefish256_ctx_t ctx; + uint8_t key[32], tweak[16]; + memset(key, 0,32); + memset(tweak, 0,16); + threefish256_init(key, tweak, &ctx); + cli_putstr_P(PSTR("\r\n ctx: \r\n\tk:")); + cli_hexdump(ctx.k, 5*8); + cli_putstr_P(PSTR("\r\n\tt:")); + cli_hexdump(ctx.t, 3*8); +} + + /***************************************************************************** * main * *****************************************************************************/ const char nessie_str[] PROGMEM = "nessie"; const char test_str[] PROGMEM = "test"; +const char test256_str[] PROGMEM = "test256"; +const char test512_str[] PROGMEM = "test512"; +const char test1024_str[] PROGMEM = "test1024"; +const char inittest_str[] PROGMEM = "inittest"; const char performance_str[] PROGMEM = "performance"; const char echo_str[] PROGMEM = "echo"; cmdlist_entry_t cmdlist[] PROGMEM = { -// { nessie_str, NULL, testrun_nessie_noekeon}, + { nessie_str, NULL, testrun_nessie_threefish}, { test_str, NULL, testrun_stdtest_threefish}, -// { performance_str, NULL, testrun_performance_noekeon}, + { test256_str, NULL, testrun_stdtest_threefish256}, + { test512_str, NULL, testrun_stdtest_threefish512}, + { test1024_str, NULL, testrun_stdtest_threefish1024}, + { inittest_str, NULL, init_test}, + { performance_str, NULL, testrun_performance_threefish}, { echo_str, (void*)1, (void_fpt)echo_ctrl}, { NULL, NULL, NULL} };