1 /* main-shabal-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"
31 #include "hfal_shabal.h"
33 #include "nessie_hash_test.h"
34 #include "performance_test.h"
40 char* algo_name = "Shabal";
42 /*****************************************************************************
43 * additional validation-functions *
44 *****************************************************************************/
45 void testrun_stdtest_shabal192(void* msg, uint16_t size_b){
48 cli_putstr_P(PSTR("\r\n\r\nTest vectors for Shabal (192 bits):"));
50 cli_putstr_P(PSTR("\r\nmessage:"));
51 cli_hexdump_block(msg, (size_b+7)/8, 4, 16);
52 shabal192(hash, msg, size_b);
53 cli_putstr_P(PSTR("\r\nhash:"));
54 cli_hexdump_block(hash, 192/8, 4, 16);
57 void testrun_stdtest_shabal224(void* msg, uint16_t size_b){
60 cli_putstr_P(PSTR("\r\n\r\nTest vectors for Shabal (224 bits):"));
62 cli_putstr_P(PSTR("\r\nmessage:"));
63 cli_hexdump_block(msg, (size_b+7)/8, 4, 16);
64 shabal224(hash, msg, size_b);
65 cli_putstr_P(PSTR("\r\nhash:"));
66 cli_hexdump_block(hash, 224/8, 4, 16);
69 void testrun_stdtest_shabal256(void* msg, uint16_t size_b){
72 cli_putstr_P(PSTR("\r\n\r\nTest vectors for Shabal (256 bits):"));
74 cli_putstr_P(PSTR("\r\nmessage:"));
75 cli_hexdump_block(msg, (size_b+7)/8, 4, 16);
76 shabal256(hash, msg, size_b);
77 cli_putstr_P(PSTR("\r\nhash:"));
78 cli_hexdump_block(hash, 256/8, 4, 16);
81 void testrun_stdtest_shabal384(void* msg, uint16_t size_b){
84 cli_putstr_P(PSTR("\r\n\r\nTest vectors for Shabal (384 bits):"));
86 cli_putstr_P(PSTR("\r\nmessage:"));
87 cli_hexdump_block(msg, (size_b+7)/8, 4, 16);
88 shabal384(hash, msg, size_b);
89 cli_putstr_P(PSTR("\r\nhash:"));
90 cli_hexdump_block(hash, 384/8, 4, 16);
93 void testrun_stdtest_shabal512(void* msg, uint16_t size_b){
96 cli_putstr_P(PSTR("\r\n\r\nTest vectors for Shabal (512 bits):"));
98 cli_putstr_P(PSTR("\r\nmessage:"));
99 cli_hexdump_block(msg, (size_b+7)/8, 4, 16);
100 shabal512(hash, msg, size_b);
101 cli_putstr_P(PSTR("\r\nhash:"));
102 cli_hexdump_block(hash, 512/8, 4, 16);
105 void testrun_stdtest_shabal(void){
107 char* mb= "abcdefghijklmnopqrstuvwxyz-"
109 "ABCDEFGHIJKLMNOPQRSTUVWXYZ-"
111 "abcdefghijklmnopqrstuvwxyz";
114 testrun_stdtest_shabal192(ma, 64*8);
115 testrun_stdtest_shabal192(mb, strlen(mb)*8);
116 testrun_stdtest_shabal224(ma, 64*8);
117 testrun_stdtest_shabal224(mb, strlen(mb)*8);
118 testrun_stdtest_shabal256(ma, 64*8);
119 testrun_stdtest_shabal256(mb, strlen(mb)*8);
120 testrun_stdtest_shabal384(ma, 64*8);
121 testrun_stdtest_shabal384(mb, strlen(mb)*8);
122 testrun_stdtest_shabal512(ma, 64*8);
123 testrun_stdtest_shabal512(mb, strlen(mb)*8);
126 void performance_shabal(void){
139 shabal192_init(&ctx);
141 cli_putstr_P(PSTR("\r\n\tctx-gen time (192): "));
142 ultoa((unsigned long)t, str, 10);
146 shabal192_init(&ctx);
148 cli_putstr_P(PSTR("\r\n\tctx-gen time (224): "));
149 ultoa((unsigned long)t, str, 10);
153 shabal192_init(&ctx);
155 cli_putstr_P(PSTR("\r\n\tctx-gen time (256): "));
156 ultoa((unsigned long)t, str, 10);
160 shabal192_init(&ctx);
162 cli_putstr_P(PSTR("\r\n\tctx-gen time (384): "));
163 ultoa((unsigned long)t, str, 10);
167 shabal192_init(&ctx);
169 cli_putstr_P(PSTR("\r\n\tctx-gen time (512): "));
170 ultoa((unsigned long)t, str, 10);
174 shabal_nextBlock(&ctx, data);
176 cli_putstr_P(PSTR("\r\n\tone-block time: "));
177 ultoa((unsigned long)t, str, 10);
182 shabal_lastBlock(&ctx, data, 0);
184 cli_putstr_P(PSTR("\r\n\tlast block time: "));
185 ultoa((unsigned long)t, str, 10);
189 shabal192_ctx2hash(hash, &ctx);
191 cli_putstr_P(PSTR("\r\n\tctx2hash time (192): "));
192 ultoa((unsigned long)t, str, 10);
196 shabal224_ctx2hash(hash, &ctx);
198 cli_putstr_P(PSTR("\r\n\tctx2hash time (224): "));
199 ultoa((unsigned long)t, str, 10);
203 shabal256_ctx2hash(hash, &ctx);
205 cli_putstr_P(PSTR("\r\n\tctx2hash time (256): "));
206 ultoa((unsigned long)t, str, 10);
210 shabal384_ctx2hash(hash, &ctx);
212 cli_putstr_P(PSTR("\r\n\tctx2hash time (384): "));
213 ultoa((unsigned long)t, str, 10);
217 shabal512_ctx2hash(hash, &ctx);
219 cli_putstr_P(PSTR("\r\n\tctx2hash time (512): "));
220 ultoa((unsigned long)t, str, 10);
223 cli_putstr_P(PSTR("\r\n"));
227 void testrun_nessie_shabal(void){
228 nessie_hash_ctx.hashsize_b = 192;
229 nessie_hash_ctx.blocksize_B = 512/8;
230 nessie_hash_ctx.ctx_size_B = sizeof(shabal_ctx_t);
231 nessie_hash_ctx.name = "Shabal-192";
232 nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)shabal192_init;
233 nessie_hash_ctx.hash_next = (nessie_hash_next_fpt)shabal_nextBlock;
234 nessie_hash_ctx.hash_last = (nessie_hash_last_fpt)shabal_lastBlock;
235 nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)shabal192_ctx2hash;
239 nessie_hash_ctx.hashsize_b = 224;
240 nessie_hash_ctx.name = "Shabal-224";
241 nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)shabal224_init;
242 nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)shabal224_ctx2hash;
246 nessie_hash_ctx.hashsize_b = 256;
247 nessie_hash_ctx.name = "Shabal-256";
248 nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)shabal256_init;
249 nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)shabal256_ctx2hash;
253 nessie_hash_ctx.hashsize_b = 384;
254 nessie_hash_ctx.name = "Shabal-384";
255 nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)shabal384_init;
256 nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)shabal384_ctx2hash;
260 nessie_hash_ctx.hashsize_b = 512;
261 nessie_hash_ctx.name = "Shabal-512";
262 nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)shabal512_init;
263 nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)shabal512_ctx2hash;
269 /*****************************************************************************
271 *****************************************************************************/
273 const hfdesc_t* algolist[] PROGMEM = {
274 (hfdesc_t*)&shabal192_desc,
275 (hfdesc_t*)&shabal224_desc,
276 (hfdesc_t*)&shabal256_desc,
277 (hfdesc_t*)&shabal384_desc,
278 (hfdesc_t*)&shabal512_desc,
282 const char nessie_str[] PROGMEM = "nessie";
283 const char test_str[] PROGMEM = "test";
284 const char ztest_str[] PROGMEM = "zerotest";
285 const char performance_str[] PROGMEM = "performance";
286 const char echo_str[] PROGMEM = "echo";
287 const char shavs_list_str[] PROGMEM = "shavs_list";
288 const char shavs_set_str[] PROGMEM = "shavs_set";
289 const char shavs_test1_str[] PROGMEM = "shavs_test1";
291 cmdlist_entry_t cmdlist[] PROGMEM = {
292 { nessie_str, NULL, testrun_nessie_shabal},
293 { test_str, NULL, testrun_stdtest_shabal},
294 { performance_str, NULL, performance_shabal},
295 { shavs_list_str, NULL, shavs_listalgos},
296 { shavs_set_str, (void*)1, (void_fpt)shavs_setalgo},
297 { shavs_test1_str, NULL, shavs_test1},
298 { echo_str, (void*)1, (void_fpt)echo_ctrl},
307 shavs_algolist=(hfdesc_t**)algolist;
308 shavs_algo=(hfdesc_t*)&shabal256_desc;
310 cli_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
311 cli_putstr(algo_name);
312 cli_putstr_P(PSTR("; "));
313 cli_putstr(__DATE__);
314 cli_putstr_P(PSTR(" "));
315 cli_putstr(__TIME__);
316 cli_putstr_P(PSTR(")\r\nloaded and running\r\n"));
318 cmd_interface(cmdlist);