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/>.
20 * BlueMidnightWish test-suit
28 #include "bmw_small.h"
29 #include "bmw_large.h"
31 #include "hfal_bmw_small.h"
32 #include "hfal_bmw_large.h"
34 #include "nessie_hash_test.h"
35 #include "performance_test.h"
36 #include "hfal-nessie.h"
37 #include "hfal-performance.h"
38 #include "hfal-test.h"
44 char* algo_name = "BlueMidnightWish";
47 const hfdesc_t* algolist[] PROGMEM = {
48 (hfdesc_t*)&bmw224_desc,
49 (hfdesc_t*)&bmw256_desc,
50 (hfdesc_t*)&bmw384_desc,
51 (hfdesc_t*)&bmw512_desc,
55 /*****************************************************************************
56 * additional validation-functions *
57 *****************************************************************************/
59 void performance_bmw(void){
60 hfal_performance_multiple(algolist);
63 void testrun_nessie_bmw(void){
64 hfal_nessie_multiple(algolist);
67 void bmw224_test(void* msg, uint32_t length_b){
68 hfal_test(&bmw224_desc, msg, length_b);
71 void bmw256_test(void* msg, uint32_t length_b){
72 hfal_test(&bmw256_desc, msg, length_b);
74 void bmw384_test(void* msg, uint32_t length_b){
75 hfal_test(&bmw384_desc, msg, length_b);
78 void bmw512_test(void* msg, uint32_t length_b){
79 hfal_test(&bmw512_desc, msg, length_b);
83 /* Testvector of length = 506 from short KAT */
85 0xB9, 0xE3, 0xE2, 0x75, 0x5E, 0xD1, 0x21, 0x53,
86 0x81, 0xB2, 0x45, 0x57, 0xEE, 0x14, 0xF8, 0xCD,
87 0x26, 0x87, 0xA0, 0x71, 0xAE, 0xB3, 0xC7, 0x4F,
88 0x42, 0x1C, 0xFE, 0xA3, 0xCF, 0xF8, 0xA6, 0xEA,
89 0x0D, 0x4B, 0xDA, 0x2A, 0xD4, 0xBD, 0x82, 0x43,
90 0xCB, 0xA7, 0x2B, 0x48, 0x1C, 0xBD, 0x52, 0x6E,
91 0x1E, 0xFA, 0x1D, 0x9F, 0xD4, 0x32, 0xB9, 0x87,
92 0xE8, 0x12, 0x65, 0x82, 0x44, 0x29, 0xBA, 0xC0 };
97 /* Testvector of length = 506 from short KAT */
99 0xE8, 0x33, 0x25, 0x35, 0xE9, 0xA2, 0x05, 0x24,
100 0x67, 0xA1, 0x02, 0x05, 0xC8, 0x70, 0x00, 0xBF,
101 0xC6, 0xA6, 0x8D, 0x73, 0x96, 0x2E, 0x69, 0xE4,
102 0xE5, 0x6F, 0x10, 0xBC, 0x79, 0xC6, 0x33, 0xC5,
103 0x2F, 0x4D, 0x00, 0x74, 0xD6, 0x07, 0x75, 0x95,
104 0xB6, 0x60, 0x07, 0x2E, 0x10, 0x74, 0x0D, 0xFA,
105 0x66, 0xBC, 0x13, 0x20, 0x46, 0x9A, 0x31, 0x96,
106 0xE0, 0x21, 0xE1, 0x32, 0x7C, 0xC0, 0x3A, 0xE0 };
110 void testrun_stdtest_bmw(void){
112 char* msg1 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
113 bmw224_test(msg0, strlen(msg0)*8);
114 bmw224_test(msg1, strlen(msg1)*8);
115 bmw256_test(msg0, strlen(msg0)*8);
116 bmw256_test(msg1, strlen(msg1)*8);
117 bmw384_test(msg0, strlen(msg0)*8);
118 bmw384_test(msg1, strlen(msg1)*8);
119 bmw512_test(msg0, strlen(msg0)*8);
120 bmw512_test(msg1, strlen(msg1)*8);
123 void bmw256_short_test(void* msg, uint32_t length_b){
124 bmw256_test("abc", 3*8);
128 void testshort(void){
130 bmw224_test(msg0, strlen(msg0)*8);
133 void testlshort(void){
135 bmw384_test(msg0, strlen(msg0)*8);
138 /*****************************************************************************
140 *****************************************************************************/
142 const char nessie_str[] PROGMEM = "nessie";
143 const char test_str[] PROGMEM = "test";
144 const char test224_str[] PROGMEM = "test224";
145 const char test256_str[] PROGMEM = "test256";
146 const char test384_str[] PROGMEM = "test384";
147 const char test512_str[] PROGMEM = "test512";
148 const char test506_str[] PROGMEM = "506";
149 const char test507_str[] PROGMEM = "507";
150 const char testshort_str[] PROGMEM = "short";
151 const char testlshort_str[] PROGMEM = "lshort";
152 const char performance_str[] PROGMEM = "performance";
153 const char echo_str[] PROGMEM = "echo";
154 const char shavs_list_str[] PROGMEM = "shavs_list";
155 const char shavs_set_str[] PROGMEM = "shavs_set";
156 const char shavs_test1_str[] PROGMEM = "shavs_test1";
158 cmdlist_entry_t cmdlist[] PROGMEM = {
159 { nessie_str, NULL, testrun_nessie_bmw},
160 { test_str, NULL, testrun_stdtest_bmw},
161 { testshort_str, NULL, testshort},
162 { testlshort_str, NULL, testlshort},
163 { test506_str, NULL, test506},
164 { test507_str, NULL, test507},
165 { performance_str, NULL, performance_bmw},
166 { shavs_list_str, NULL, shavs_listalgos},
167 { shavs_set_str, (void*)1, (void_fpt)shavs_setalgo},
168 { shavs_test1_str, NULL, shavs_test1},
169 { echo_str, (void*)1, (void_fpt)echo_ctrl},
176 cli_rx = (cli_rx_fpt)uart0_getc;
177 cli_tx = (cli_tx_fpt)uart0_putc;
178 shavs_algolist=(hfdesc_t**)algolist;
179 shavs_algo=(hfdesc_t*)&bmw256_desc;
181 cli_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
182 cli_putstr(algo_name);
183 cli_putstr_P(PSTR("; "));
184 cli_putstr(__DATE__);
185 cli_putstr_P(PSTR(" "));
186 cli_putstr(__TIME__);
187 cli_putstr_P(PSTR(")\r\nloaded and running\r\n"));
189 cmd_interface(cmdlist);