7 #include "serial-tools.h"
12 #include "nessie_bc_test.h"
14 #include "performance_test.h"
20 char* cipher_name = "Noekeon";
22 /*****************************************************************************
23 * additional validation-functions *
24 *****************************************************************************/
25 void noekeon_genctx_dummy(uint8_t* key, uint16_t keysize, void* ctx){
26 noekeon_init(key, ctx);
29 void testrun_nessie_noekeon_indirect(void){
30 char str[strlen(cipher_name)+10];
31 strcpy(str, cipher_name);
32 strcat(str, "-indirect");
34 nessie_bc_ctx.blocksize_B = 16;
35 nessie_bc_ctx.keysize_b = 128;
36 nessie_bc_ctx.name = str;
37 nessie_bc_ctx.ctx_size_B = sizeof(noekeon_ctx_t);
38 nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)noekeon_enc;
39 nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)noekeon_dec;
40 nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)noekeon_genctx_dummy;
45 void noekeon_genctx_dummy_direct(uint8_t* key, uint16_t keysize, void* ctx){
49 void testrun_nessie_noekeon_direct(void){
50 char str[strlen(cipher_name)+10];
51 strcpy(str, cipher_name);
52 strcat(str, "-Direct");
54 nessie_bc_ctx.blocksize_B = 16;
55 nessie_bc_ctx.keysize_b = 128;
56 nessie_bc_ctx.name = str;
57 nessie_bc_ctx.ctx_size_B = sizeof(noekeon_ctx_t);
58 nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)noekeon_enc;
59 nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)noekeon_dec;
60 nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)noekeon_genctx_dummy_direct;
65 void testrun_stdtest_rundirect(void* data, void* key){
66 uart_putstr_P(PSTR("\r\n "));
67 uart_putstr_P(PSTR("k = "));
70 uart_putstr_P(PSTR("\r\n "));
71 uart_putstr_P(PSTR("a = "));
72 uart_hexdump(data,16);
74 noekeon_enc(data, key);
75 uart_putstr_P(PSTR("\r\nafter NESSIEencrypt, b = "));
76 uart_hexdump(data,16);
78 noekeon_dec(data, key);
79 uart_putstr_P(PSTR("\r\nafter NESSIEdecrypt, a?= "));
80 uart_hexdump(data,16);
81 uart_putstr_P(PSTR("\r\n"));
84 void testrun_stdtest_runindirect(void* data, void* key){
86 uart_putstr_P(PSTR("\r\n "));
87 uart_putstr_P(PSTR("k = "));
90 uart_putstr_P(PSTR("\r\n "));
91 uart_putstr_P(PSTR("a = "));
92 uart_hexdump(data,16);
93 noekeon_init(key, &ctx);
94 noekeon_enc(data, &ctx);
95 uart_putstr_P(PSTR("\r\nafter NESSIEencrypt, b = "));
96 uart_hexdump(data,16);
98 noekeon_dec(data, &ctx);
99 uart_putstr_P(PSTR("\r\nafter NESSIEdecrypt, a?= "));
100 uart_hexdump(data,16);
101 uart_putstr_P(PSTR("\r\n"));
104 void testrun_stdtest_noekeon(void){
105 uint8_t key[16], data[16];
109 uart_putstr_P(PSTR("\r\nTest vectors for block cipher Noekeon in Indirect-Key Mode:\r\n"));
113 testrun_stdtest_runindirect(data, key);
115 memset(key, 0xFF, 16);
116 memset(data, 0xFF, 16);
117 testrun_stdtest_runindirect(data, key);
121 noekeon_init(key, &ctx);
122 noekeon_enc(data, &ctx);
123 memcpy(key3, data, 16);
124 memset(key, 0xFF, 16);
125 memset(data, 0xFF, 16);
126 noekeon_init(key, &ctx);
127 noekeon_enc(data, &ctx);
128 testrun_stdtest_runindirect(data, key3);
131 uart_putstr_P(PSTR("\r\nTest vectors for block cipher Noekeon in Direct-Key Mode:\r\n"));
135 testrun_stdtest_rundirect(data, key);
137 memset(key, 0xFF, 16);
138 memset(data, 0xFF, 16);
139 testrun_stdtest_rundirect(data, key);
143 noekeon_enc(data, key);
144 memcpy(key3, data, 16);
145 memset(key, 0xFF, 16);
146 memset(data, 0xFF, 16);
147 noekeon_enc(data, key);
148 testrun_stdtest_rundirect(data, key3);
152 void testrun_performance_noekeon(void){
156 uint8_t key[16], data[16];
161 uart_putstr_P(PSTR("\r\n\r\n=== benchmark ==="));
163 uart_putstr_P(PSTR("\r\n\tconst overhead: "));
166 uart_putstr_P(PSTR("\r\n\tinterrupt overhead: "));
173 noekeon_init(key, &ctx);
175 uart_putstr_P(PSTR("\r\n\tctx-gen time: "));
176 ultoa((unsigned long)t, str, 10);
178 // uart_hexdump(&t, 8);
182 noekeon_enc(data, ctx);
184 uart_putstr_P(PSTR("\r\n\tencrypt time: "));
185 ultoa((unsigned long)t, str, 10);
187 // uart_hexdump(&t, 8);
191 noekeon_dec(data, ctx);
193 uart_putstr_P(PSTR("\r\n\tdecrypt time: "));
194 ultoa((unsigned long)t, str, 10);
196 // uart_hexdump(&t, 8);
197 uart_putstr_P(PSTR("\r\n"));
199 /*****************************************************************************
201 *****************************************************************************/
203 typedef void(*void_fpt)(void);
210 uart_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
211 uart_putstr(cipher_name);
212 uart_putstr_P(PSTR(")\r\nloaded and running\r\n"));
214 PGM_P u = PSTR("nessie\0test\0direct\0indirect\0performance\0");
215 void_fpt v[] = {testrun_nessie_noekeon_direct,
216 testrun_stdtest_noekeon,
217 testrun_nessie_noekeon_direct,
218 testrun_nessie_noekeon_indirect,
219 testrun_performance_noekeon};
222 if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;}
223 if(execcommand_d0_P(str, u, v)<0){
224 uart_putstr_P(PSTR("\r\nunknown command\r\n"));
228 uart_putstr("ERROR\r\n");