1 /* main-noekeon-test.c */
3 This file is part of the AVR-Crypto-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* algo_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(algo_name)+10];
49 strcpy(str, algo_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(algo_name)+10];
69 strcpy(str, algo_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 cli_putstr_P(PSTR("\r\n "));
91 cli_putstr_P(PSTR("k = "));
94 cli_putstr_P(PSTR("\r\n "));
95 cli_putstr_P(PSTR("a = "));
98 noekeon_enc(data, key);
99 cli_putstr_P(PSTR("\r\nafter NESSIEencrypt, b = "));
100 cli_hexdump(data,16);
102 noekeon_dec(data, key);
103 cli_putstr_P(PSTR("\r\nafter NESSIEdecrypt, a?= "));
104 cli_hexdump(data,16);
105 cli_putstr_P(PSTR("\r\n"));
108 void testrun_stdtest_runindirect(void* data, void* key){
110 cli_putstr_P(PSTR("\r\n "));
111 cli_putstr_P(PSTR("k = "));
114 cli_putstr_P(PSTR("\r\n "));
115 cli_putstr_P(PSTR("a = "));
116 cli_hexdump(data,16);
117 noekeon_init(key, &ctx);
118 noekeon_enc(data, &ctx);
119 cli_putstr_P(PSTR("\r\nafter NESSIEencrypt, b = "));
120 cli_hexdump(data,16);
122 noekeon_dec(data, &ctx);
123 cli_putstr_P(PSTR("\r\nafter NESSIEdecrypt, a?= "));
124 cli_hexdump(data,16);
125 cli_putstr_P(PSTR("\r\n"));
128 void testrun_stdtest_noekeon(void){
129 uint8_t key[16], data[16];
133 cli_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 cli_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 cli_putstr_P(PSTR("\r\n\tctx-gen time: "));
191 ultoa((unsigned long)t, str, 10);
195 noekeon_enc(data, &ctx);
197 cli_putstr_P(PSTR("\r\n\tencrypt time: "));
198 ultoa((unsigned long)t, str, 10);
202 noekeon_dec(data, &ctx);
204 cli_putstr_P(PSTR("\r\n\tdecrypt time: "));
205 ultoa((unsigned long)t, str, 10);
208 cli_putstr_P(PSTR("\r\n"));
210 /*****************************************************************************
212 *****************************************************************************/
214 const char nessie_str[] PROGMEM = "nessie";
215 const char test_str[] PROGMEM = "test";
216 const char direct_str[] PROGMEM = "direct";
217 const char indirect_str[] PROGMEM = "indirect";
218 const char performance_str[] PROGMEM = "performance";
219 const char echo_str[] PROGMEM = "echo";
221 cmdlist_entry_t cmdlist[] PROGMEM = {
222 { nessie_str, NULL, testrun_nessie_noekeon},
223 { test_str, NULL, testrun_stdtest_noekeon},
224 { direct_str, NULL, testrun_nessie_noekeon_direct},
225 { indirect_str, NULL, testrun_nessie_noekeon_indirect},
226 { performance_str, NULL, testrun_performance_noekeon},
227 { echo_str, (void*)1, (void_fpt)echo_ctrl},
237 cli_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
238 cli_putstr(algo_name);
239 cli_putstr_P(PSTR(")\r\nloaded and running\r\n"));
240 cmd_interface(cmdlist);