]> git.cryptolib.org Git - avr-crypto-lib.git/blob - test_src/main-twister224-test.c
+Shabal
[avr-crypto-lib.git] / test_src / main-twister224-test.c
1 /* main-twister224-test.c */
2 /*
3     This file is part of the AVR-Crypto-Lib.
4     Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
5
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.
10
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.
15
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/>.
18 */
19 /*
20  * twister test suit
21  * 
22 */
23
24 #include "config.h"
25 #include "serial-tools.h"
26 #include "uart.h"
27 #include "debug.h"
28
29 #include "twister-small.h"
30 #include "nessie_hash_test.h"
31 #include "performance_test.h"
32
33 #include <util/delay.h>
34
35 #include <stdint.h>
36 #include <string.h>
37 #include <stdlib.h>
38 #include "cli.h"
39
40 char* algo_name = "TWISTER-224";
41
42 /*****************************************************************************
43  *  additional validation-functions                                                                                      *
44  *****************************************************************************/
45 void twister224_init_dummy(void* ctx){
46         twister_small_init(ctx, 224);
47 }
48
49 void twister224_ctx2hash_dummy(void* buffer, void* ctx){
50         twister_small_ctx2hash(buffer, ctx, 224);
51 }
52
53
54 void testrun_nessie_twister224(void){
55         nessie_hash_ctx.hashsize_b  = 224;
56         nessie_hash_ctx.blocksize_B = 512/8;
57         nessie_hash_ctx.ctx_size_B  = sizeof(twister_state_t);
58         nessie_hash_ctx.name = algo_name;
59         nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)twister224_init_dummy;
60         nessie_hash_ctx.hash_next = (nessie_hash_next_fpt)twister_small_nextBlock;
61         nessie_hash_ctx.hash_last = (nessie_hash_last_fpt)twister_small_lastBlock;
62         nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)twister224_ctx2hash_dummy;
63         
64         nessie_hash_run();
65 }
66
67 /*****************************************************************************
68  *  self tests                                                                                                                           *
69  *****************************************************************************/
70
71 void testrun_twister224(void){
72         twister224_hash_t hash;
73         char* testv[]={
74                 "", 
75                 "a", 
76                 "abc", 
77                 "message digest", 
78                 "abcdefghijklmnopqrstuvwxyz", 
79                 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 
80                 "12345678901234567890123456789012345678901234567890123456789012345678901234567890"};
81         uint32_t i;
82         
83         cli_putstr_P(PSTR("\r\n=== TWISTER-224 test suit (MD5 test values) ==="));
84         for(i=0; i<7; ++i){
85                 cli_putstr_P(PSTR("\r\n TWISTER-224 (\""));
86                 cli_putstr(testv[i]);
87                 cli_putstr_P(PSTR("\") = \r\n\t"));
88                 twister224(&hash, testv[i], strlen(testv[i])*8);
89                 cli_hexdump(hash, 224/8);
90         }
91         
92         cli_putstr_P(PSTR("\r\n\r\n=== TWISTER-224 test suit (short test values) ==="));
93         uint8_t stestv[]= {0x00, 0x00, 0xC0, 0xC0, 0x80, 0x48, 0x50};
94         uint8_t stestl[]= {   0,    1,    2,    3,    4,    5,    6};   
95         for(i=0; i<7; ++i){
96                 cli_putstr_P(PSTR("\r\n TWISTER-224 (\""));
97                 cli_hexdump(&(stestv[i]), 1);
98                 cli_putstr_P(PSTR("\") = \r\n\t"));
99                 twister224(&hash, &(stestv[i]), stestl[i]);
100                 cli_hexdump(hash, 224/8);
101         }
102 #ifdef TWISTER_LONGTEST
103         cli_putstr_P(PSTR("\r\n\r\n=== TWISTER-224 test suit (long test) ==="));
104         char* ltest= "abcdefghbcdefghicdefghijdefghijk"
105                            "efghijklfghijklmghijklmnhijklmno";  
106         twister224_ctx_t ctx;
107         twister224_init(&ctx);  
108         cli_putstr_P(PSTR("\r\n TWISTER-224 ( 16777216 x \""));
109         cli_putstr(ltest);      
110         cli_putstr_P(PSTR("\") = \r\n\t"));
111         for(i=0; i<16777216; ++i){
112                 twister224_nextBlock(&ctx, ltest);
113         }
114         twister224_ctx2hash(hash, &ctx);
115         cli_hexdump(hash, 224/8);
116 #endif
117 }
118
119
120 void testrun_performance_twister224(void){
121         uint64_t t;
122         char str[16];
123         uint8_t data[64];
124         twister_state_t ctx;
125         volatile uint16_t i;
126         calibrateTimer();
127         print_overhead();
128         
129         memset(data, 0, 64);
130         
131         startTimer(1);
132         twister_small_init(&ctx, 224);
133         t = stopTimer();
134         cli_putstr_P(PSTR("\r\n\tctx-gen time: "));
135         ultoa((unsigned long)t, str, 10);
136         cli_putstr(str);
137         
138         i=3000;
139         while(i--)
140                 _delay_ms(1);
141         
142         startTimer(1);
143         twister_small_nextBlock(&ctx, data);
144         t = stopTimer();
145         cli_putstr_P(PSTR("\r\n\tone-block time: "));
146         ultoa((unsigned long)t, str, 10);
147         cli_putstr(str);
148         
149         i=3000;
150         while(i--)
151                 _delay_ms(1);
152         
153         startTimer(1);
154         twister_small_lastBlock(&ctx, data, 0);
155         t = stopTimer();
156         cli_putstr_P(PSTR("\r\n\tlast block time: "));
157         ultoa((unsigned long)t, str, 10);
158         cli_putstr(str);
159
160         i=3000;
161         while(i--)
162                 _delay_ms(1);
163
164         startTimer(1);
165         twister_small_ctx2hash(data, &ctx, 224);
166         t = stopTimer();
167         cli_putstr_P(PSTR("\r\n\tctx2hash time: "));
168         ultoa((unsigned long)t, str, 10);
169         cli_putstr(str);
170
171         i=3000;
172         while(i--)
173                 _delay_ms(1);
174         
175         cli_putstr_P(PSTR("\r\n"));
176 }
177
178
179 /*****************************************************************************
180  * main                                                                                                                                  *
181  *****************************************************************************/
182
183 const char nessie_str[]      PROGMEM = "nessie";
184 const char test_str[]        PROGMEM = "test";
185 const char performance_str[] PROGMEM = "performance";
186 const char echo_str[]        PROGMEM = "echo";
187
188 cmdlist_entry_t cmdlist[] PROGMEM = {
189         { nessie_str,      NULL, testrun_nessie_twister224},
190         { test_str,        NULL, testrun_twister224},
191         { performance_str, NULL, testrun_performance_twister224},
192         { echo_str,    (void*)1, (void_fpt)echo_ctrl},
193         { NULL,            NULL, NULL}
194 };
195
196 int main (void){
197         DEBUG_INIT();
198         
199         cli_rx = uart_getc;
200         cli_tx = uart_putc;             
201         for(;;){
202                 cli_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
203                 cli_putstr(algo_name);
204                 cli_putstr_P(PSTR(")\r\nloaded and running\r\n"));
205                 cmd_interface(cmdlist);
206         }
207 }