1 /* main-blake-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"
29 #include "blake_small.h"
30 #include "blake_large.h"
31 #include "hfal_blake_small.h"
32 #include "hfal_blake_large.h"
35 #include "nessie_hash_test.h"
36 #include "performance_test.h"
42 char* algo_name = "Blake";
44 /*****************************************************************************
45 * additional validation-functions *
46 *****************************************************************************/
48 void testrun_nessie_blake(void){
49 nessie_hash_ctx.hashsize_b = 224;
50 nessie_hash_ctx.name = "Blake28";
51 nessie_hash_ctx.blocksize_B = 512/8;
52 nessie_hash_ctx.ctx_size_B = sizeof(blake28_ctx_t);
53 nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)blake28_init;
54 nessie_hash_ctx.hash_next = (nessie_hash_next_fpt)blake28_nextBlock;
55 nessie_hash_ctx.hash_last = (nessie_hash_last_fpt)blake28_lastBlock;
56 nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)blake28_ctx2hash;
60 nessie_hash_ctx.hashsize_b = 256;
61 nessie_hash_ctx.name = "Blake32";
62 nessie_hash_ctx.blocksize_B = 512/8;
63 nessie_hash_ctx.ctx_size_B = sizeof(blake32_ctx_t);
64 nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)blake32_init;
65 nessie_hash_ctx.hash_next = (nessie_hash_next_fpt)blake32_nextBlock;
66 nessie_hash_ctx.hash_last = (nessie_hash_last_fpt)blake32_lastBlock;
67 nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)blake32_ctx2hash;
71 void blake28_test(void* msg, uint32_t length_b){
72 uint8_t diggest[224/8];
73 cli_putstr_P(PSTR("\r\n=== Blake28 test ===\r\n message:\r\n"));
74 cli_hexdump_block(msg, (length_b+7)/8, 4, 16);
75 blake28(diggest, msg, length_b);
76 cli_putstr_P(PSTR("\r\n diggest:\r\n"));
77 cli_hexdump_block(diggest, 224/8, 4, 16);
80 void blake32_test(void* msg, uint32_t length_b){
81 uint8_t diggest[256/8];
82 cli_putstr_P(PSTR("\r\n=== Blake32 test ===\r\n message:\r\n"));
83 cli_hexdump_block(msg, (length_b+7)/8, 4, 16);
84 blake32(diggest, msg, length_b);
85 cli_putstr_P(PSTR("\r\n diggest:\r\n"));
86 cli_hexdump_block(diggest, 256/8, 4, 16);
89 void blake48_test(void* msg, uint32_t length_b){
90 uint8_t diggest[384/8];
91 cli_putstr_P(PSTR("\r\n=== Blake48 test ===\r\n message:\r\n"));
92 cli_hexdump_block(msg, (length_b+7)/8, 4, 16);
93 blake48(diggest, msg, length_b);
94 cli_putstr_P(PSTR("\r\n diggest:\r\n"));
95 cli_hexdump_block(diggest, 384/8, 4, 16);
98 void blake64_test(void* msg, uint32_t length_b){
99 uint8_t diggest[512/8];
100 cli_putstr_P(PSTR("\r\n=== Blake48 test ===\r\n message:\r\n"));
101 cli_hexdump_block(msg, (length_b+7)/8, 4, 16);
102 blake64(diggest, msg, length_b);
103 cli_putstr_P(PSTR("\r\n diggest:\r\n"));
104 cli_hexdump_block(diggest, 512/8, 4, 16);
106 void testrun_stdtest_blake(void){
108 memset(msg1, 0, 144);
110 blake28_test(msg1, 576);
112 blake32_test(msg1, 576);
114 blake48_test(msg1, 1152);
116 blake64_test(msg1, 1152);
119 void testshort(void){
123 void testlshort(void){
127 void performance_blake(void){
132 blake_small_ctx_t ctx;
133 blake_large_ctx_t ctx2;
144 cli_putstr_P(PSTR("\r\n\tctx-gen time (224): "));
145 ultoa((unsigned long)t, str, 10);
151 cli_putstr_P(PSTR("\r\n\tctx-gen time (256): "));
152 ultoa((unsigned long)t, str, 10);
158 cli_putstr_P(PSTR("\r\n\tctx-gen time (384): "));
159 ultoa((unsigned long)t, str, 10);
165 cli_putstr_P(PSTR("\r\n\tctx-gen time (512): "));
166 ultoa((unsigned long)t, str, 10);
170 blake_small_nextBlock(&ctx, data);
172 cli_putstr_P(PSTR("\r\n\tone-block (small) time: "));
173 ultoa((unsigned long)t, str, 10);
177 blake_large_nextBlock(&ctx2, data);
179 cli_putstr_P(PSTR("\r\n\tone-block (large) time: "));
180 ultoa((unsigned long)t, str, 10);
184 blake_small_lastBlock(&ctx, data, 0);
186 cli_putstr_P(PSTR("\r\n\tlast block (small) time: "));
187 ultoa((unsigned long)t, str, 10);
191 blake_large_lastBlock(&ctx2, data, 0);
193 cli_putstr_P(PSTR("\r\n\tlast block (large) time: "));
194 ultoa((unsigned long)t, str, 10);
198 blake28_ctx2hash(hash, &ctx);
200 cli_putstr_P(PSTR("\r\n\tctx2hash time (224): "));
201 ultoa((unsigned long)t, str, 10);
205 blake32_ctx2hash(hash, &ctx);
207 cli_putstr_P(PSTR("\r\n\tctx2hash time (256): "));
208 ultoa((unsigned long)t, str, 10);
212 blake48_ctx2hash(hash, &ctx2);
214 cli_putstr_P(PSTR("\r\n\tctx2hash time (384): "));
215 ultoa((unsigned long)t, str, 10);
219 blake64_ctx2hash(hash, &ctx2);
221 cli_putstr_P(PSTR("\r\n\tctx2hash time (512): "));
222 ultoa((unsigned long)t, str, 10);
225 cli_putstr_P(PSTR("\r\n"));
229 /*****************************************************************************
231 *****************************************************************************/
233 const hfdesc_t* algolist[] PROGMEM = {
234 (hfdesc_t*)&blake28_desc,
235 (hfdesc_t*)&blake32_desc,
236 (hfdesc_t*)&blake48_desc,
237 (hfdesc_t*)&blake64_desc,
241 const char nessie_str[] PROGMEM = "nessie";
242 const char test_str[] PROGMEM = "test";
243 const char testshort_str[] PROGMEM = "short";
244 const char testlshort_str[] PROGMEM = "lshort";
245 const char performance_str[] PROGMEM = "performance";
246 const char echo_str[] PROGMEM = "echo";
247 const char shavs_list_str[] PROGMEM = "shavs_list";
248 const char shavs_set_str[] PROGMEM = "shavs_set";
249 const char shavs_test1_str[] PROGMEM = "shavs_test1";
251 cmdlist_entry_t cmdlist[] PROGMEM = {
252 { nessie_str, NULL, testrun_nessie_blake},
253 { test_str, NULL, testrun_stdtest_blake},
254 { testshort_str, NULL, testshort},
255 { testlshort_str, NULL, testlshort},
256 { performance_str, NULL, performance_blake},
257 { shavs_list_str, NULL, shavs_listalgos},
258 { shavs_set_str, (void*)1, (void_fpt)shavs_setalgo},
259 { shavs_test1_str, NULL, shavs_test1},
260 { echo_str, (void*)1, (void_fpt)echo_ctrl},
269 shavs_algolist=(hfdesc_t**)algolist;
270 shavs_algo=(hfdesc_t*)&blake32_desc;
272 cli_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
273 cli_putstr(algo_name);
274 cli_putstr_P(PSTR("; "));
275 cli_putstr(__DATE__);
276 cli_putstr_P(PSTR(" "));
277 cli_putstr(__TIME__);
278 cli_putstr_P(PSTR(")\r\nloaded and running\r\n"));
280 cmd_interface(cmdlist);