1 /* main-noekeon-test.c */
3 This file is part of the Crypto-avr-lib/microcrypt-lib.
4 Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
25 #include "serial-tools.h"
30 #include "nessie_bc_test.h"
32 #include "performance_test.h"
38 char* cipher_name = "Noekeon";
40 /*****************************************************************************
41 * additional validation-functions *
42 *****************************************************************************/
43 void noekeon_genctx_dummy(uint8_t* key, uint16_t keysize, void* ctx){
44 noekeon_init(key, ctx);
47 void testrun_nessie_noekeon_indirect(void){
48 char str[strlen(cipher_name)+10];
49 strcpy(str, cipher_name);
50 strcat(str, "-indirect");
52 nessie_bc_ctx.blocksize_B = 16;
53 nessie_bc_ctx.keysize_b = 128;
54 nessie_bc_ctx.name = str;
55 nessie_bc_ctx.ctx_size_B = sizeof(noekeon_ctx_t);
56 nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)noekeon_enc;
57 nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)noekeon_dec;
58 nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)noekeon_genctx_dummy;
63 void noekeon_genctx_dummy_direct(uint8_t* key, uint16_t keysize, void* ctx){
67 void testrun_nessie_noekeon_direct(void){
68 char str[strlen(cipher_name)+10];
69 strcpy(str, cipher_name);
70 strcat(str, "-Direct");
72 nessie_bc_ctx.blocksize_B = 16;
73 nessie_bc_ctx.keysize_b = 128;
74 nessie_bc_ctx.name = str;
75 nessie_bc_ctx.ctx_size_B = sizeof(noekeon_ctx_t);
76 nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)noekeon_enc;
77 nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)noekeon_dec;
78 nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)noekeon_genctx_dummy_direct;
83 void testrun_nessie_noekeon(void){
84 testrun_nessie_noekeon_direct();
85 testrun_nessie_noekeon_indirect();
89 void testrun_stdtest_rundirect(void* data, void* key){
90 uart_putstr_P(PSTR("\r\n "));
91 uart_putstr_P(PSTR("k = "));
94 uart_putstr_P(PSTR("\r\n "));
95 uart_putstr_P(PSTR("a = "));
96 uart_hexdump(data,16);
98 noekeon_enc(data, key);
99 uart_putstr_P(PSTR("\r\nafter NESSIEencrypt, b = "));
100 uart_hexdump(data,16);
102 noekeon_dec(data, key);
103 uart_putstr_P(PSTR("\r\nafter NESSIEdecrypt, a?= "));
104 uart_hexdump(data,16);
105 uart_putstr_P(PSTR("\r\n"));
108 void testrun_stdtest_runindirect(void* data, void* key){
110 uart_putstr_P(PSTR("\r\n "));
111 uart_putstr_P(PSTR("k = "));
112 uart_hexdump(key,16);
114 uart_putstr_P(PSTR("\r\n "));
115 uart_putstr_P(PSTR("a = "));
116 uart_hexdump(data,16);
117 noekeon_init(key, &ctx);
118 noekeon_enc(data, &ctx);
119 uart_putstr_P(PSTR("\r\nafter NESSIEencrypt, b = "));
120 uart_hexdump(data,16);
122 noekeon_dec(data, &ctx);
123 uart_putstr_P(PSTR("\r\nafter NESSIEdecrypt, a?= "));
124 uart_hexdump(data,16);
125 uart_putstr_P(PSTR("\r\n"));
128 void testrun_stdtest_noekeon(void){
129 uint8_t key[16], data[16];
133 uart_putstr_P(PSTR("\r\nTest vectors for block cipher Noekeon in Indirect-Key Mode:\r\n"));
137 testrun_stdtest_runindirect(data, key);
139 memset(key, 0xFF, 16);
140 memset(data, 0xFF, 16);
141 testrun_stdtest_runindirect(data, key);
145 noekeon_init(key, &ctx);
146 noekeon_enc(data, &ctx);
147 memcpy(key3, data, 16);
148 memset(key, 0xFF, 16);
149 memset(data, 0xFF, 16);
150 noekeon_init(key, &ctx);
151 noekeon_enc(data, &ctx);
152 testrun_stdtest_runindirect(data, key3);
154 uart_putstr_P(PSTR("\r\nTest vectors for block cipher Noekeon in Direct-Key Mode:\r\n"));
158 testrun_stdtest_rundirect(data, key);
160 memset(key, 0xFF, 16);
161 memset(data, 0xFF, 16);
162 testrun_stdtest_rundirect(data, key);
166 noekeon_enc(data, key);
167 memcpy(key3, data, 16);
168 memset(key, 0xFF, 16);
169 memset(data, 0xFF, 16);
170 noekeon_enc(data, key);
171 testrun_stdtest_rundirect(data, key3);
175 void testrun_performance_noekeon(void){
178 uint8_t key[16], data[16];
188 noekeon_init(key, &ctx);
190 uart_putstr_P(PSTR("\r\n\tctx-gen time: "));
191 ultoa((unsigned long)t, str, 10);
195 noekeon_enc(data, &ctx);
197 uart_putstr_P(PSTR("\r\n\tencrypt time: "));
198 ultoa((unsigned long)t, str, 10);
202 noekeon_dec(data, &ctx);
204 uart_putstr_P(PSTR("\r\n\tdecrypt time: "));
205 ultoa((unsigned long)t, str, 10);
208 uart_putstr_P(PSTR("\r\n"));
210 /*****************************************************************************
212 *****************************************************************************/
219 uart_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
220 uart_putstr(cipher_name);
221 uart_putstr_P(PSTR(")\r\nloaded and running\r\n"));
223 PGM_P u = PSTR("nessie\0test\0direct\0indirect\0performance\0");
224 void_fpt v[] = {testrun_nessie_noekeon,
225 testrun_stdtest_noekeon,
226 testrun_nessie_noekeon_direct,
227 testrun_nessie_noekeon_indirect,
228 testrun_performance_noekeon};
231 if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;}
232 if(execcommand_d0_P(str, u, v)<0){
233 uart_putstr_P(PSTR("\r\nunknown command\r\n"));
237 uart_putstr("ERROR\r\n");