From: bg Date: Wed, 9 Jul 2008 18:26:30 +0000 (+0000) Subject: camellia seems broken X-Git-Url: https://git.cryptolib.org/?a=commitdiff_plain;h=2e7bb1f5e50ed450e1b3ab16283783ff64b66218;p=avr-crypto-lib.git camellia seems broken --- diff --git a/camellia.c b/camellia.c index e0e2159..babd15c 100644 --- a/camellia.c +++ b/camellia.c @@ -82,7 +82,7 @@ void camellia128_ctx_dump(camellia128_ctx_t *s){ /*****************************************************************************/ /* extern prog_uint64_t camellia_sigma[6]; */ -void camellia128_init(camellia128_ctx_t* s, uint8_t* key){ +void camellia128_init(uint8_t* key, camellia128_ctx_t* s){ uint8_t i; s->kll = 0; /* ((uint64_t*)key)[0]; */ @@ -134,7 +134,7 @@ void camellia_6rounds(camellia128_ctx_t* s, uint64_t* bl, uint64_t* br, uint8_t /*****************************************************************************/ -void camellia128_enc(camellia128_ctx_t* s, void* block){ +void camellia128_enc(void* block, camellia128_ctx_t* s){ #define BL (((uint64_t*)block)[0]) #define BR (((uint64_t*)block)[1]) @@ -188,7 +188,7 @@ void camellia128_enc(camellia128_ctx_t* s, void* block){ /*****************************************************************************/ -void camellia128_dec(camellia128_ctx_t* s, void* block){ +void camellia128_dec(void* block, camellia128_ctx_t* s){ #define BL (((uint64_t*)block)[1]) #define BR (((uint64_t*)block)[0]) diff --git a/camellia.h b/camellia.h index e27ebe8..a636efa 100644 --- a/camellia.h +++ b/camellia.h @@ -29,9 +29,9 @@ typedef struct camellia128_ctx_s{ }camellia128_ctx_t; -void camellia128_init(camellia128_ctx_t* s, uint8_t* key); -void camellia128_enc(camellia128_ctx_t* s, void* block); -void camellia128_dec(camellia128_ctx_t* s, void* block); +void camellia128_init(uint8_t* key, camellia128_ctx_t* s); +void camellia128_enc(void* block, camellia128_ctx_t* s); +void camellia128_dec(void* block, camellia128_ctx_t* s); #endif /*CAMELLIA_H_*/ diff --git a/cast5.c b/cast5.c index 51e9e93..b4736c8 100644 --- a/cast5.c +++ b/cast5.c @@ -113,17 +113,17 @@ void cast5_init_rM(uint8_t *klo, uint8_t *khi, uint8_t offset, uint8_t *src, boo * @param key Pointer to binary key. * @param keylength length of keydata in bits. */ -void cast5_init(cast5_ctx_t* s, uint8_t* key, uint8_t keylength){ +void cast5_init(uint8_t* key, uint8_t keylength_b, cast5_ctx_t* s){ /* we migth return if the key is valid and if setup was sucessfull */ uint32_t x[4], z[4]; #define BPX ((uint8_t*)&(x[0])) #define BPZ ((uint8_t*)&(z[0])) - s->shortkey = (keylength<=80); + s->shortkey = (keylength_b<=80); /* littel endian only! */ memset(&(x[0]), 0 ,16); /* set x to zero */ - if(keylength > 128) - keylength=128; - memcpy(&(x[0]), key, (keylength+7)/8); + if(keylength_b > 128) + keylength_b=128; + memcpy(&(x[0]), key, (keylength_b+7)/8); /* todo: merge a and b and compress the whole stuff */ @@ -275,7 +275,7 @@ uint32_t cast5_f3(uint32_t d, uint32_t m, uint8_t r){ * @param s Pointer to cast5 roundkeys (context) * @param block Pointer to datablock */ -void cast5_enc(cast5_ctx_t *s, void* block){ +void cast5_enc(void* block, cast5_ctx_t *s){ uint32_t l,r, x, y; uint8_t i; cast5_f_t* f[]={cast5_f1,cast5_f2,cast5_f3}; @@ -304,7 +304,7 @@ void cast5_enc(cast5_ctx_t *s, void* block){ * @param s Pointer to cast5 roundkeys (context) * @param block Pointer to datablock */ -void cast5_dec(cast5_ctx_t *s, void* block){ +void cast5_dec(void* block, cast5_ctx_t *s){ uint32_t l,r, x, y; int8_t i, rounds; cast5_f_t* f[]={cast5_f1,cast5_f2,cast5_f3}; diff --git a/cast5.h b/cast5.h index 6fe8488..717c5d7 100644 --- a/cast5.h +++ b/cast5.h @@ -19,7 +19,7 @@ /* * File: cast5.h * Author: Daniel Otte - * Date: 26.07.2006 + * Date: 2006-07-26 * License: GPL * Description: Implementation of the CAST5 (aka CAST-128) cipher algorithm as described in RFC 2144 * @@ -48,9 +48,9 @@ typedef struct cast5_ctx_st{ bool shortkey; } cast5_ctx_t; -void cast5_init(cast5_ctx_t* s, uint8_t* key, uint8_t keylength); -void cast5_enc(cast5_ctx_t *s, void* block); -void cast5_dec(cast5_ctx_t *s, void* block); +void cast5_init(uint8_t* key, uint8_t keylength_b, cast5_ctx_t* s); +void cast5_enc(void* block, cast5_ctx_t *s); +void cast5_dec(void* block, cast5_ctx_t *s); diff --git a/main-camellia-test.c b/main-camellia-test.c index 1c85c2d..cf4ed4e 100644 --- a/main-camellia-test.c +++ b/main-camellia-test.c @@ -27,204 +27,83 @@ #include "debug.h" #include "camellia.h" +#include "nessie_bc_test.h" +#include "performance_test.h" +#include "cli.h" + +char* cipher_name = "Camellia"; + #include #include +#include #include -#ifndef BOOL -#define BOOL - #ifndef __BOOL - #define __BOOL - #ifndef __BOOL__ - #define __BOOL__ - typedef enum{false=0,true=1} bool; - #endif - #endif -#endif - - - /***************************************************************************** * additional validation-functions * *****************************************************************************/ +void camellia128_init_dummy(void* key, uint16_t keysize_b, void* ctx){ + camellia128_init(key, ctx); +} -/***************************************************************************** - * self tests * - *****************************************************************************/ -void camellia128_ctx_dump(camellia128_ctx_t *s); - -void test_encrypt(uint8_t *block, uint8_t *key, uint16_t keylength, bool print){ - camellia128_ctx_t s; - if (print){ - uart_putstr("\r\nCamellia (enc):\r\n key:\t\t"); - uart_hexdump(key, keylength/8); - uart_putstr("\r\n plaintext:\t"); - uart_hexdump(block, 16); - } +void testrun_nessie_camellia(void){ + nessie_bc_ctx.blocksize_B = 16; + nessie_bc_ctx.keysize_b = 128; + nessie_bc_ctx.name = cipher_name; + nessie_bc_ctx.ctx_size_B = sizeof(camellia128_ctx_t); + nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)camellia128_enc; + nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)camellia128_dec; + nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)camellia128_init_dummy; - camellia128_init(&s, key);; - camellia128_enc(&s, block); - if (print){ - uart_putstr("\r\n ciphertext:\t"); - uart_hexdump(block, 16); - } -} - -void test_decrypt(uint8_t *block, uint8_t *key, uint16_t keylength, bool print){ - camellia128_ctx_t s; - if (print){ - uart_putstr("\r\nCamellia (dec):\r\n key:\t\t"); - uart_hexdump(key, keylength/8); - uart_putstr("\r\n ciphertext:\t"); - uart_hexdump(block, 16); - } - camellia128_init(&s, key); - camellia128_dec(&s, block); - if (print){ - uart_putstr("\r\n plaintext:\t"); - uart_hexdump(block, 16); - } -} - -void nessie_test_iterate(uint8_t *block, uint8_t *key){ - uint16_t i; - test_encrypt(block, key, 128, true); - test_decrypt(block, key, 128, true); - uart_putstr("\r\n100 times:"); - for(i=0; i<99; ++i){ - test_encrypt(block, key, 128, false); - } - test_encrypt(block, key, 128, true); - uart_putstr("\r\n1000 times:"); - for(i=0; i<(999-100); ++i){ - test_encrypt(block, key, 128, false); - } - test_encrypt(block, key, 128, true); + nessie_bc_run(); } -void nessie_test_iterate_inv(uint8_t *block, uint8_t *key){ - uint16_t i; - test_decrypt(block, key, 128, true); - test_encrypt(block, key, 128, true); - uart_putstr("\r\n100 times:"); - for(i=0; i<99; ++i){ - test_decrypt(block, key, 128, false); - } - test_encrypt(block, key, 128, true); - uart_putstr("\r\n1000 times:"); - for(i=0; i<(999-100); ++i){ - test_decrypt(block, key, 128, false); - } - test_decrypt(block, key, 128, true); -} -prog_uint8_t ntt_test_values_in[16] = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 -}; - -prog_uint8_t ntt_test_values_out[16] = { - 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73, - 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 -}; -/* memcmp_P() is now implemented in avr-libc -int memcmp_P(const void *s1, PGM_P s2, size_t n){ - uint8_t b; - while(n--){ - b = pgm_read_byte_near(s2); - if( *((uint8_t*)s1) != b) - return(*((uint8_t*)s1)-b); - ++s1; ++s2; - } - return 0; -} -*/ -void testrun_camellia(void){ - /* we run the NESSIE test for Camellia here see - * https://www.cosic.esat.kuleuven.be/nessie/testvectors/bc/camellia/Camellia-128-128.verified.test-vectors - * for the vectors - */ - unsigned j, setn; - uint8_t block[16]; - uint8_t key[16]; - memcpy_P(block, ntt_test_values_in, 16); - memcpy_P(key, ntt_test_values_in, 16); - test_encrypt(block, key, 128, true); - if(memcmp_P(block, ntt_test_values_out, 16)){ - uart_putstr("\t[FAILED]\r\n"); - return; - } - uart_putstr("\t[OK]"); - test_decrypt(block, key, 128, true); - if(memcmp_P(block, ntt_test_values_in, 16)){ - uart_putstr("\t[FAILED]\r\n"); - return; - } - uart_putstr("\t[OK]"); +void test_performance_cast5(void){ + uint64_t t; + char str[6]; + uint8_t key[16], data[16]; + camellia128_ctx_t ctx; -/* test set #1 & #2 */ - setn=1; - for(setn=1; setn<=2; ++setn){ - for(j=0; j<128; ++j){ - uart_putstr("\r\n\r\n### SET: "); - uart_hexdump(&setn,1); - uart_putstr(" Vector: "); - uart_hexdump(&j,1); - - memset(block, 0, 16); - memset(key, 0, 16); - ((setn&0x1)?key:block)[j>>3] = 1<<(((~j)&0x7)); - nessie_test_iterate(block, key); - } - } -/* test set #3 */ - for(j=0; j<256; ++j){ - uart_putstr("\r\n### SET: "); - uart_hexdump(&setn,1); - uart_putstr(" Vector: "); - uart_hexdump(&j,1); - - memset(block, j, 16); - memset(key, 0, 16); - nessie_test_iterate(block, key); - } - setn++; -/* test set #4 (some strange values*/ - setn++; -/* test ser #5 & #6 (same as 1&2 but enc and dec exchanged)*/ - for(setn=5; setn<=6; ++setn){ - for(j=0; j<128; ++j){ - uart_putstr("\r\n\r\n### SET: "); - uart_hexdump(&setn,1); - uart_putstr(" Vector: "); - uart_hexdump(&j,1); - - memset(block, 0, 16); - memset(key, 0, 16); - ((setn&0x1)?key:block)[j>>3] = 1<<(((~j)&0x7)); - nessie_test_iterate_inv(block, key); - } - } -/* test set #7 */ - for(j=0; j<256; ++j){ - uart_putstr("\r\n### SET: "); - uart_hexdump(&setn,1); - uart_putstr(" Vector: "); - uart_hexdump(&j,1); - - memset(block, j, 16); - memset(key, 0, 16); - nessie_test_iterate_inv(block, key); - } - setn++; -/* test set #4 (some strange values*/ - setn++; + calibrateTimer(); + print_overhead(); + + memset(key, 0, 16); + memset(data, 0, 16); + + startTimer(1); + camellia128_init(key, &ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tctx-gen time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + camellia128_enc(data, &ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tencrypt time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + camellia128_dec(data, &ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tdecrypt time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + uart_putstr_P(PSTR("\r\n")); } +/***************************************************************************** + * self tests * + *****************************************************************************/ + /***************************************************************************** * main * *****************************************************************************/ @@ -236,16 +115,21 @@ int main (void){ DEBUG_INIT(); uart_putstr("\r\n"); - uart_putstr("\r\n\r\nCrypto-VS (Camellia)\r\nloaded and running\r\n"); -restart: + uart_putstr_P(PSTR("\r\n\r\nCrypto-VS (")); + uart_putstr(cipher_name); + uart_putstr_P(PSTR(")\r\nloaded and running\r\n")); + + PGM_P u = PSTR("nessie\0test\0performance\0"); + void_fpt v[] = {testrun_nessie_camellia, testrun_nessie_camellia, test_performance_cast5}; + while(1){ - if (!getnextwordn(str,20)) {DEBUG_S("DBG: W1\r\n"); goto error;} - if (strcmp(str, "test")) {DEBUG_S("DBG: 1b\r\n"); goto error;} - testrun_camellia(); - goto restart; + if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;} + if(execcommand_d0_P(str, u, v)<0){ + uart_putstr_P(PSTR("\r\nunknown command\r\n")); + } continue; error: uart_putstr("ERROR\r\n"); - } /* while (1) */ + } } diff --git a/main-cast5-test.c b/main-cast5-test.c index 7a33406..2cfb3d1 100644 --- a/main-cast5-test.c +++ b/main-cast5-test.c @@ -40,32 +40,15 @@ char* cipher_name = "cast-128 (cast5)"; /***************************************************************************** * additional validation-functions * *****************************************************************************/ -/* - void cast5_init(cast5_ctx_t* s, uint8_t* key, uint8_t keylength); - void cast5_enc(cast5_ctx_t *s, void* block); - void cast5_dec(cast5_ctx_t *s, void* block); -*/ - -void cast5_init_dummy(uint8_t* key, uint8_t keylength_b, cast5_ctx_t* ctx){ - cast5_init(ctx, key, keylength_b); -} - -void cast5_enc_dummy(void* buffer, cast5_ctx_t* ctx){ - cast5_enc(ctx, buffer); -} -void cast5_dec_dummy(void* buffer, cast5_ctx_t* ctx){ - cast5_dec(ctx, buffer); -} - -void test_nessie_cast5(void){ +void testrun_nessie_cast5(void){ nessie_bc_ctx.blocksize_B = 8; nessie_bc_ctx.keysize_b = 128; nessie_bc_ctx.name = cipher_name; nessie_bc_ctx.ctx_size_B = sizeof(cast5_ctx_t); - nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)cast5_enc_dummy; - nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)cast5_dec_dummy; - nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)cast5_init_dummy; + nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)cast5_enc; + nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)cast5_dec; + nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)cast5_init; nessie_bc_run(); } @@ -100,9 +83,8 @@ void test_encrypt(uint8_t *block, uint8_t *key, uint8_t keylength, bool print){ uart_putstr("\r\n plaintext:\t"); uart_hexdump(block, 8); } - cast5_init(&s, key, keylength); -// cast5_ctx_dump(&s); - cast5_enc(&s, block); + cast5_init(key, keylength, &s); + cast5_enc(block, &s); if (print){ uart_putstr("\r\n ciphertext:\t"); uart_hexdump(block, 8); @@ -117,9 +99,8 @@ void test_decrypt(uint8_t *block, uint8_t *key, uint8_t keylength, bool print){ uart_putstr("\r\n ciphertext:\t"); uart_hexdump(block, 8); } - cast5_init(&s, key, keylength); -// cast5_ctx_dump(&s); - cast5_dec(&s, block); + cast5_init(key, keylength, &s); + cast5_dec(block, &s); if (print){ uart_putstr("\r\n plaintext:\t"); uart_hexdump(block, 8); @@ -170,28 +151,20 @@ void testrun_cast5(void){ } -void test_performance_cast5(void){ - uint16_t i,c; +void testrun_performance_cast5(void){ uint64_t t; char str[6]; uint8_t key[16], data[16]; cast5_ctx_t ctx; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 16); memset(data, 0, 16); startTimer(1); - cast5_init(&ctx, key, 128); + cast5_init(key, 128, &ctx); t = stopTimer(); uart_putstr_P(PSTR("\r\n\tctx-gen time: ")); ultoa((unsigned long)t, str, 10); @@ -199,7 +172,7 @@ void test_performance_cast5(void){ startTimer(1); - cast5_enc(&ctx, data); + cast5_enc(data, &ctx); t = stopTimer(); uart_putstr_P(PSTR("\r\n\tencrypt time: ")); ultoa((unsigned long)t, str, 10); @@ -207,7 +180,7 @@ void test_performance_cast5(void){ startTimer(1); - cast5_dec(&ctx, data); + cast5_dec(data, &ctx); t = stopTimer(); uart_putstr_P(PSTR("\r\n\tdecrypt time: ")); ultoa((unsigned long)t, str, 10); @@ -232,7 +205,7 @@ int main (void){ uart_putstr_P(PSTR(")\r\nloaded and running\r\n")); PGM_P u = PSTR("nessie\0test\0performance\0"); - void_fpt v[] = {test_nessie_cast5, test_nessie_cast5, test_performance_cast5}; + void_fpt v[] = {testrun_nessie_cast5, testrun_cast5, testrun_performance_cast5}; while(1){ if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;} diff --git a/main-des-test.c b/main-des-test.c index 153ffea..4822c54 100644 --- a/main-des-test.c +++ b/main-des-test.c @@ -67,21 +67,13 @@ void testrun_nessie_des(void){ void testrun_performance_des(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[8], data[8]; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 8); memset(data, 0, 8); diff --git a/main-entropium-test.c b/main-entropium-test.c index 2d97b48..3384396 100644 --- a/main-entropium-test.c +++ b/main-entropium-test.c @@ -62,20 +62,12 @@ void testrun_entropium(void){ void testrun_performance_entropium(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t data[32]; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); startTimer(1); entropium_addEntropy(128, data); diff --git a/main-grain-test.c b/main-grain-test.c index 1f997ea..44f08f8 100644 --- a/main-grain-test.c +++ b/main-grain-test.c @@ -121,21 +121,13 @@ void testrun_std_grain(void){ } void testrun_performance_grain(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[10], iv[8]; grain_ctx_t ctx; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 10); memset(iv, 0, 8); diff --git a/main-md5-test.c b/main-md5-test.c index 921b408..490ee48 100644 --- a/main-md5-test.c +++ b/main-md5-test.c @@ -28,9 +28,11 @@ #include "md5.h" #include "nessie_hash_test.h" +#include "performance_test.h" #include #include +#include #include "cli.h" char* algo_name = "MD5"; @@ -100,6 +102,43 @@ void testrun_md5(void){ } +void testrun_performance_md5(void){ + uint64_t t; + char str[16]; + uint8_t data[32]; + md5_ctx_t ctx; + + calibrateTimer(); + print_overhead(); + + memset(data, 0, 32); + + startTimer(1); + md5_init(&ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tctx-gen time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + md5_nextBlock(&ctx, data); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tone-block time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + md5_lastBlock(&ctx, data, 0); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tlast block time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + uart_putstr_P(PSTR("\r\n")); +} + /***************************************************************************** * main * @@ -113,8 +152,8 @@ int main (void){ uart_putstr("\r\n"); uart_putstr("\r\n\r\nCrypto-VS (MD5)\r\nloaded and running\r\n"); - PGM_P u = PSTR("nessie\0test\0"); - void_fpt v[] = {testrun_nessie_md5, testrun_md5}; + PGM_P u = PSTR("nessie\0test\0performance\0"); + void_fpt v[] = {testrun_nessie_md5, testrun_md5, testrun_performance_md5}; while(1){ if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;} diff --git a/main-noekeon-test.c b/main-noekeon-test.c index fdac8c1..9ba191e 100644 --- a/main-noekeon-test.c +++ b/main-noekeon-test.c @@ -167,21 +167,13 @@ void testrun_stdtest_noekeon(void){ } void testrun_performance_noekeon(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[16], data[16]; noekeon_ctx_t ctx; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 16); memset(data, 0, 16); diff --git a/main-rc5-test.c b/main-rc5-test.c index e1323e0..2c16aea 100644 --- a/main-rc5-test.c +++ b/main-rc5-test.c @@ -61,21 +61,13 @@ void testrun_nessie_rc5(void){ void testrun_performance_rc5(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[16], data[16]; rc5_ctx_t ctx; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 16); memset(data, 0, 16); diff --git a/main-rc6-test.c b/main-rc6-test.c index 6ec8fc6..5d7ecda 100644 --- a/main-rc6-test.c +++ b/main-rc6-test.c @@ -68,21 +68,13 @@ void testrun_nessie_rc6(void){ void testrun_performance_rc6(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[16], data[16]; rc6_ctx_t ctx; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 16); memset(data, 0, 16); diff --git a/main-seed-test.c b/main-seed-test.c index 1dc4259..ff4ccab 100644 --- a/main-seed-test.c +++ b/main-seed-test.c @@ -64,21 +64,13 @@ void testrun_nessie_seed(void){ void testrun_performance_seed(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[16], data[16]; seed_ctx_t ctx; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 16); memset(data, 0, 16); diff --git a/main-serpent-test.c b/main-serpent-test.c index af3b630..fc86035 100644 --- a/main-serpent-test.c +++ b/main-serpent-test.c @@ -64,21 +64,13 @@ void testrun_nessie_serpent(void){ void testrun_performance_serpent(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[32], data[16]; serpent_ctx_t ctx; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 32); memset(data, 0, 16); diff --git a/main-sha1-test.c b/main-sha1-test.c index 3fb74bd..6f07227 100644 --- a/main-sha1-test.c +++ b/main-sha1-test.c @@ -28,9 +28,11 @@ #include "sha1.h" #include "nessie_hash_test.h" +#include "performance_test.h" #include #include +#include #include "cli.h" char* algo_name = "SHA-1"; @@ -102,6 +104,42 @@ void testrun_sha1(void){ uart_putstr("\r\nx"); } +void testrun_performance_sha1(void){ + uint64_t t; + char str[16]; + uint8_t data[32]; + sha1_ctx_t ctx; + + calibrateTimer(); + print_overhead(); + + memset(data, 0, 32); + + startTimer(1); + sha1_init(&ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tctx-gen time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + sha1_nextBlock(&ctx, data); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tone-block time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + sha1_lastBlock(&ctx, data, 0); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tlast block time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + uart_putstr_P(PSTR("\r\n")); +} /***************************************************************************** @@ -116,8 +154,8 @@ int main (void){ uart_putstr("\r\n\r\nCrypto-VS (SHA-1)\r\nloaded and running\r\n"); - PGM_P u = PSTR("nessie\0test\0"); - void_fpt v[] = {testrun_nessie_sha1, testrun_sha1}; + PGM_P u = PSTR("nessie\0test\0performance\0"); + void_fpt v[] = {testrun_nessie_sha1, testrun_sha1, testrun_performance_sha1}; while(1){ if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;} diff --git a/main-sha256-test.c b/main-sha256-test.c index 552356c..9c3031d 100644 --- a/main-sha256-test.c +++ b/main-sha256-test.c @@ -28,9 +28,11 @@ #include "sha256.h" #include "nessie_hash_test.h" +#include "performance_test.h" #include #include +#include #include "cli.h" char* algo_name = "SHA-256"; @@ -59,7 +61,42 @@ void testrun_nessie_sha256(void){ nessie_hash_run(); } - +void testrun_performance_sha256(void){ + uint64_t t; + char str[16]; + uint8_t data[32]; + sha256_ctx_t ctx; + + calibrateTimer(); + print_overhead(); + + memset(data, 0, 32); + + startTimer(1); + sha256_init(&ctx); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tctx-gen time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + sha256_nextBlock(&ctx, data); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tone-block time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + + startTimer(1); + sha256_lastBlock(&ctx, data, 0); + t = stopTimer(); + uart_putstr_P(PSTR("\r\n\tlast block time: ")); + ultoa((unsigned long)t, str, 10); + uart_putstr(str); + + uart_putstr_P(PSTR("\r\n")); +} /***************************************************************************** * main * @@ -74,8 +111,8 @@ int main (void){ uart_putstr(algo_name); uart_putstr_P(PSTR(")\r\nloaded and running\r\n")); - PGM_P u = PSTR("nessie\0test\0"); - void_fpt v[] = {testrun_nessie_sha256, testrun_nessie_sha256}; + PGM_P u = PSTR("nessie\0test\0performance\0"); + void_fpt v[] = {testrun_nessie_sha256, testrun_nessie_sha256, testrun_performance_sha256}; while(1){ if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;} diff --git a/main-shabea-test.c b/main-shabea-test.c index 418bcf6..aadebd0 100644 --- a/main-shabea-test.c +++ b/main-shabea-test.c @@ -71,20 +71,12 @@ void testrun_nessie_shabea(void){ void testrun_performance_shabea(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[32], data[32]; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 32); memset(data, 0, 32); diff --git a/main-skipjack-test.c b/main-skipjack-test.c index 65f0d1f..a7f1165 100644 --- a/main-skipjack-test.c +++ b/main-skipjack-test.c @@ -59,20 +59,12 @@ void testrun_nessie_skipjack(void){ void testrun_performance_skipjack(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[10], data[8]; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 10); memset(data, 0, 8); diff --git a/main-tdes-test.c b/main-tdes-test.c index b3933dc..c741237 100644 --- a/main-tdes-test.c +++ b/main-tdes-test.c @@ -67,21 +67,13 @@ void testrun_nessie_tdes(void){ void testrun_performance_tdes(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[8*3], data[8]; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 8*3); memset(data, 0, 8); diff --git a/main-trivium-test.c b/main-trivium-test.c index 698887e..4d4e3d2 100644 --- a/main-trivium-test.c +++ b/main-trivium-test.c @@ -67,21 +67,13 @@ void testrun_nessie_trivium(void){ } void testrun_performance_trivium(void){ - uint16_t i,c; uint64_t t; char str[16]; uint8_t key[10], iv[10]; trivium_ctx_t ctx; calibrateTimer(); - getOverhead(&c, &i); - uart_putstr_P(PSTR("\r\n\r\n=== benchmark ===")); - utoa(c, str, 10); - uart_putstr_P(PSTR("\r\n\tconst overhead: ")); - uart_putstr(str); - utoa(i, str, 10); - uart_putstr_P(PSTR("\r\n\tinterrupt overhead: ")); - uart_putstr(str); + print_overhead(); memset(key, 0, 10); memset(iv, 0, 10); diff --git a/mkfiles/camellia.mk b/mkfiles/camellia.mk index 06d99d6..a34d538 100644 --- a/mkfiles/camellia.mk +++ b/mkfiles/camellia.mk @@ -7,7 +7,8 @@ BLOCK_CIPHERS += $(ALGO_NAME) # main-camellia-test.o debug.o uart.o serial-tools.o camellia.o camellia-asm.o $(ALGO_NAME)_OBJ := camellia.o camellia-asm.o $(ALGO_NAME)_TEST_BIN := main-camellia-test.o debug.o uart.o serial-tools.o \ - camellia.o camellia-asm.o + camellia.o camellia-asm.o nessie_bc_test.o \ + nessie_common.o cli.o performance_test.o $(ALGO_NAME)_NESSIE_TEST := "nessie" $(ALGO_NAME)_PEROFRMANCE_TEST := "performance" diff --git a/mkfiles/md5.mk b/mkfiles/md5.mk index 047fb21..b3d3de0 100644 --- a/mkfiles/md5.mk +++ b/mkfiles/md5.mk @@ -6,7 +6,7 @@ HASHES += $(ALGO_NAME) $(ALGO_NAME)_OBJ := md5.o $(ALGO_NAME)_TEST_BIN := main-md5-test.o debug.o uart.o serial-tools.o md5.o \ - nessie_hash_test.o nessie_common.o cli.o + nessie_hash_test.o nessie_common.o cli.o performance_test.o $(ALGO_NAME)_NESSIE_TEST := "nessie" $(ALGO_NAME)_PEROFRMANCE_TEST := "performance" diff --git a/mkfiles/sha1.mk b/mkfiles/sha1.mk index d4c1b5a..dc2eade 100644 --- a/mkfiles/sha1.mk +++ b/mkfiles/sha1.mk @@ -6,7 +6,8 @@ HASHES += $(ALGO_NAME) $(ALGO_NAME)_OBJ := sha1-asm.o $(ALGO_NAME)_TEST_BIN := main-sha1-test.o debug.o uart.o serial-tools.o \ - sha1-asm.o nessie_hash_test.o nessie_common.o cli.o + sha1-asm.o nessie_hash_test.o nessie_common.o cli.o \ + performance_test.o $(ALGO_NAME)_NESSIE_TEST := "nessie" $(ALGO_NAME)_PEROFRMANCE_TEST := "performance" diff --git a/mkfiles/sha256.mk b/mkfiles/sha256.mk index c1a3d58..0a2fe1c 100644 --- a/mkfiles/sha256.mk +++ b/mkfiles/sha256.mk @@ -6,7 +6,8 @@ HASHES += $(ALGO_NAME) $(ALGO_NAME)_OBJ := sha256-asm.o $(ALGO_NAME)_TEST_BIN := main-sha256-test.o debug.o uart.o serial-tools.o \ - sha256-asm.o nessie_hash_test.o nessie_common.o cli.o + sha256-asm.o nessie_hash_test.o nessie_common.o cli.o \ + performance_test.o $(ALGO_NAME)_NESSIE_TEST := "nessie" $(ALGO_NAME)_PEROFRMANCE_TEST := "performance"