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/>.
31 #include "hfal_shabal.h"
32 #include "hfal-test.h"
33 #include "hfal-nessie.h"
34 #include "hfal-performance.h"
36 #include "nessie_hash_test.h"
37 #include "performance_test.h"
43 char* algo_name = "Shabal";
46 const hfdesc_t* algolist[] PROGMEM = {
47 (hfdesc_t*)&shabal192_desc,
48 (hfdesc_t*)&shabal224_desc,
49 (hfdesc_t*)&shabal256_desc,
50 (hfdesc_t*)&shabal384_desc,
51 (hfdesc_t*)&shabal512_desc,
55 /*****************************************************************************
56 * additional validation-functions *
57 *****************************************************************************/
58 void testrun_stdtest_shabal192(void* msg, uint16_t size_b){
59 hfal_test(&shabal192_desc, msg, size_b);
62 void testrun_stdtest_shabal224(void* msg, uint16_t size_b){
63 hfal_test(&shabal224_desc, msg, size_b);
66 void testrun_stdtest_shabal256(void* msg, uint16_t size_b){
67 hfal_test(&shabal256_desc, msg, size_b);
70 void testrun_stdtest_shabal384(void* msg, uint16_t size_b){
71 hfal_test(&shabal384_desc, msg, size_b);
74 void testrun_stdtest_shabal512(void* msg, uint16_t size_b){
75 hfal_test(&shabal512_desc, msg, size_b);
78 void testrun_stdtest_shabal(void){
80 char* mb= "abcdefghijklmnopqrstuvwxyz-"
82 "ABCDEFGHIJKLMNOPQRSTUVWXYZ-"
84 "abcdefghijklmnopqrstuvwxyz";
87 testrun_stdtest_shabal192(ma, 64*8);
88 testrun_stdtest_shabal192(mb, strlen(mb)*8);
89 testrun_stdtest_shabal224(ma, 64*8);
90 testrun_stdtest_shabal224(mb, strlen(mb)*8);
91 testrun_stdtest_shabal256(ma, 64*8);
92 testrun_stdtest_shabal256(mb, strlen(mb)*8);
93 testrun_stdtest_shabal384(ma, 64*8);
94 testrun_stdtest_shabal384(mb, strlen(mb)*8);
95 testrun_stdtest_shabal512(ma, 64*8);
96 testrun_stdtest_shabal512(mb, strlen(mb)*8);
102 testrun_stdtest_shabal192(ma, 64*8);
105 void shabal_ctx_dump(shabal_ctx_t* ctx){
108 cli_putstr_P(PSTR("\r\n=== shabal ctx dump ===\r\n size = "));
109 i=sizeof(shabal_ctx_t);
113 cli_putc('0'+(i/10)%10);
115 cli_putstr_P(PSTR("\r\n a = "));
116 cli_hexdump_block(ctx->a, 12*4, 5, 4*8);
117 cli_putstr_P(PSTR("\r\n b_buffer = "));
118 cli_hexdump_block(ctx->b_buffer, 12*4, 5, 4*8);
119 cli_putstr_P(PSTR("\r\n c_buffer = "));
120 cli_hexdump_block(ctx->c_buffer, 12*4, 5, 4*8);
121 if(ctx->b == &(ctx->b_buffer[0]))
122 cli_putstr_P(PSTR("\r\nb --> b_buffer"));
123 if(ctx->b == &(ctx->c_buffer[0]))
124 cli_putstr_P(PSTR("\r\nb --> c_buffer"));
125 if(ctx->c == &(ctx->b_buffer[0]))
126 cli_putstr_P(PSTR("\r\nc --> b_buffer"));
127 if(ctx->c == &(ctx->c_buffer[0]))
128 cli_putstr_P(PSTR("\r\nc --> c_buffer"));
129 cli_putstr_P(PSTR("\r\n b = "));
130 cli_hexdump(&(ctx->b), 2);
132 cli_putstr_P(PSTR("\r\n b (should) = "));
134 cli_putstr_P(PSTR("\r\n c = "));
135 cli_hexdump(&(ctx->c), 2);
137 cli_putstr_P(PSTR("\r\n c (should) = "));
142 void testinit_192(void){
144 shabal192_init(&ctx);
145 shabal_ctx_dump(&ctx);
148 void testinit_224(void){
150 shabal224_init(&ctx);
151 shabal_ctx_dump(&ctx);
154 void testinit_256(void){
156 shabal256_init(&ctx);
157 shabal_ctx_dump(&ctx);
160 void testinit_384(void){
162 shabal384_init(&ctx);
163 shabal_ctx_dump(&ctx);
166 void testinit_512(void){
168 shabal512_init(&ctx);
169 shabal_ctx_dump(&ctx);
179 void performance_shabal(void){
180 hfal_performance_multiple(algolist);
183 void testrun_nessie_shabal(void){
184 hfal_nessie_multiple(algolist);
187 /*****************************************************************************
189 *****************************************************************************/
192 const char nessie_str[] PROGMEM = "nessie";
193 const char test_str[] PROGMEM = "test";
194 const char testinit192_str[] PROGMEM = "testinit192";
195 const char testinit_str[] PROGMEM = "testinit";
196 const char testshort_str[] PROGMEM = "short";
197 const char ztest_str[] PROGMEM = "zerotest";
198 const char performance_str[] PROGMEM = "performance";
199 const char echo_str[] PROGMEM = "echo";
200 const char shavs_list_str[] PROGMEM = "shavs_list";
201 const char shavs_set_str[] PROGMEM = "shavs_set";
202 const char shavs_test1_str[] PROGMEM = "shavs_test1";
204 cmdlist_entry_t cmdlist[] PROGMEM = {
205 { nessie_str, NULL, testrun_nessie_shabal},
206 { test_str, NULL, testrun_stdtest_shabal},
207 { testinit192_str, NULL, testinit_192},
208 { testinit_str, NULL, testinit},
209 { testshort_str, NULL, testshort},
210 { performance_str, NULL, performance_shabal},
211 { shavs_list_str, NULL, shavs_listalgos},
212 { shavs_set_str, (void*)1, (void_fpt)shavs_setalgo},
213 { shavs_test1_str, NULL, shavs_test1},
214 { echo_str, (void*)1, (void_fpt)echo_ctrl},
221 cli_rx = (cli_rx_fpt)uart0_getc;
222 cli_tx = (cli_tx_fpt)uart0_putc;
223 shavs_algolist=(hfdesc_t**)algolist;
224 shavs_algo=(hfdesc_t*)&shabal256_desc;
226 cli_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
227 cli_putstr(algo_name);
228 cli_putstr_P(PSTR("; "));
229 cli_putstr(__DATE__);
230 cli_putstr_P(PSTR(" "));
231 cli_putstr(__TIME__);
232 cli_putstr_P(PSTR(")\r\nloaded and running\r\n"));
234 cmd_interface(cmdlist);