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);
130 uart_putstr_P(PSTR("\r\nTest vectors for block cipher Noekeon in Direct-Key Mode:\r\n"));
134 testrun_stdtest_rundirect(data, key);
136 memset(key, 0xFF, 16);
137 memset(data, 0xFF, 16);
138 testrun_stdtest_rundirect(data, key);
142 noekeon_enc(data, key);
143 memcpy(key3, data, 16);
144 memset(key, 0xFF, 16);
145 memset(data, 0xFF, 16);
146 noekeon_enc(data, key);
147 testrun_stdtest_rundirect(data, key3);
151 void testrun_performance_noekeon(void){
155 uint8_t key[16], data[16];
160 uart_putstr_P(PSTR("\r\n\r\n=== benchmark ==="));
162 uart_putstr_P(PSTR("\r\n\tconst overhead: "));
165 uart_putstr_P(PSTR("\r\n\tinterrupt overhead: "));
172 noekeon_init(key, &ctx);
174 uart_putstr_P(PSTR("\r\n\tctx-gen time: "));
175 ultoa((unsigned long)t, str, 10);
179 noekeon_enc(data, &ctx);
181 uart_putstr_P(PSTR("\r\n\tencrypt time: "));
182 ultoa((unsigned long)t, str, 10);
186 noekeon_dec(data, &ctx);
188 uart_putstr_P(PSTR("\r\n\tdecrypt time: "));
189 ultoa((unsigned long)t, str, 10);
192 uart_putstr_P(PSTR("\r\n"));
194 /*****************************************************************************
196 *****************************************************************************/
203 uart_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
204 uart_putstr(cipher_name);
205 uart_putstr_P(PSTR(")\r\nloaded and running\r\n"));
207 PGM_P u = PSTR("nessie\0test\0direct\0indirect\0performance\0");
208 void_fpt v[] = {testrun_nessie_noekeon_direct,
209 testrun_stdtest_noekeon,
210 testrun_nessie_noekeon_direct,
211 testrun_nessie_noekeon_indirect,
212 testrun_performance_noekeon};
215 if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;}
216 if(execcommand_d0_P(str, u, v)<0){
217 uart_putstr_P(PSTR("\r\nunknown command\r\n"));
221 uart_putstr("ERROR\r\n");