1 /* main-bmw-test.c */
\r
3 This file is part of the ARM-Crypto-Lib.
\r
4 Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de)
\r
6 This program is free software: you can redistribute it and/or modify
\r
7 it under the terms of the GNU General Public License as published by
\r
8 the Free Software Foundation, either version 3 of the License, or
\r
9 (at your option) any later version.
\r
11 This program is distributed in the hope that it will be useful,
\r
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
14 GNU General Public License for more details.
\r
16 You should have received a copy of the GNU General Public License
\r
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
\r
20 * BlueMidnightWish test-suit
\r
30 #include "uart_lowlevel.h"
\r
31 #include "sysclock.h"
\r
32 #include "hw_gptm.h"
\r
35 #include "nessie_hash_test.h"
\r
36 #include "performance_test.h"
\r
37 #include "hfal-nessie.h"
\r
38 #include "hfal-performance.h"
\r
39 #include "hfal-test.h"
\r
41 #include "hfal_bmw_small.h"
\r
42 #include "hfal_bmw_large.h"
\r
43 #include "bmw_small.h"
\r
44 #include "bmw_large.h"
\r
46 void uart0_putc(char byte){
\r
47 uart_putc(UART_0, byte);
\r
50 char uart0_getc(void){
\r
51 return uart_getc(UART_0);
\r
55 const char* algo_name = "BlueMidnightWish";
\r
58 const hfdesc_t* algolist[] = {
\r
59 (hfdesc_t*)&bmw224_desc,
\r
60 (hfdesc_t*)&bmw256_desc,
\r
61 (hfdesc_t*)&bmw384_desc,
\r
62 (hfdesc_t*)&bmw512_desc,
\r
66 /*****************************************************************************
\r
67 * additional validation-functions *
\r
68 *****************************************************************************/
\r
70 void performance_bmw(void){
\r
71 hfal_performance_multiple(algolist);
\r
74 void testrun_nessie_bmw(void){
\r
75 hfal_nessie_multiple(algolist);
\r
78 void bmw224_test(void* msg, uint32_t length_b){
\r
79 hfal_test(&bmw224_desc, msg, length_b);
\r
82 void bmw256_test(void* msg, uint32_t length_b){
\r
83 hfal_test(&bmw256_desc, msg, length_b);
\r
85 void bmw384_test(void* msg, uint32_t length_b){
\r
86 hfal_test(&bmw384_desc, msg, length_b);
\r
89 void bmw512_test(void* msg, uint32_t length_b){
\r
90 hfal_test(&bmw512_desc, msg, length_b);
\r
94 /* Testvector of length = 506 from short KAT */
\r
96 0xB9, 0xE3, 0xE2, 0x75, 0x5E, 0xD1, 0x21, 0x53,
\r
97 0x81, 0xB2, 0x45, 0x57, 0xEE, 0x14, 0xF8, 0xCD,
\r
98 0x26, 0x87, 0xA0, 0x71, 0xAE, 0xB3, 0xC7, 0x4F,
\r
99 0x42, 0x1C, 0xFE, 0xA3, 0xCF, 0xF8, 0xA6, 0xEA,
\r
100 0x0D, 0x4B, 0xDA, 0x2A, 0xD4, 0xBD, 0x82, 0x43,
\r
101 0xCB, 0xA7, 0x2B, 0x48, 0x1C, 0xBD, 0x52, 0x6E,
\r
102 0x1E, 0xFA, 0x1D, 0x9F, 0xD4, 0x32, 0xB9, 0x87,
\r
103 0xE8, 0x12, 0x65, 0x82, 0x44, 0x29, 0xBA, 0xC0 };
\r
104 bmw512_test(v, 506);
\r
107 void test507(void){
\r
108 /* Testvector of length = 506 from short KAT */
\r
110 0xE8, 0x33, 0x25, 0x35, 0xE9, 0xA2, 0x05, 0x24,
\r
111 0x67, 0xA1, 0x02, 0x05, 0xC8, 0x70, 0x00, 0xBF,
\r
112 0xC6, 0xA6, 0x8D, 0x73, 0x96, 0x2E, 0x69, 0xE4,
\r
113 0xE5, 0x6F, 0x10, 0xBC, 0x79, 0xC6, 0x33, 0xC5,
\r
114 0x2F, 0x4D, 0x00, 0x74, 0xD6, 0x07, 0x75, 0x95,
\r
115 0xB6, 0x60, 0x07, 0x2E, 0x10, 0x74, 0x0D, 0xFA,
\r
116 0x66, 0xBC, 0x13, 0x20, 0x46, 0x9A, 0x31, 0x96,
\r
117 0xE0, 0x21, 0xE1, 0x32, 0x7C, 0xC0, 0x3A, 0xE0 };
\r
118 bmw512_test(v, 507);
\r
121 void testrun_stdtest_bmw(void){
\r
122 char* msg0 = "abc";
\r
123 char* msg1 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
\r
124 bmw224_test(msg0, strlen(msg0)*8);
\r
125 bmw224_test(msg1, strlen(msg1)*8);
\r
126 bmw256_test(msg0, strlen(msg0)*8);
\r
127 bmw256_test(msg1, strlen(msg1)*8);
\r
128 bmw384_test(msg0, strlen(msg0)*8);
\r
129 bmw384_test(msg1, strlen(msg1)*8);
\r
130 bmw512_test(msg0, strlen(msg0)*8);
\r
131 bmw512_test(msg1, strlen(msg1)*8);
\r
134 void bmw256_short_test(void* msg, uint32_t length_b){
\r
135 bmw256_test("abc", 3*8);
\r
139 void testshort(void){
\r
140 char* msg0 = "abc";
\r
141 bmw224_test(msg0, strlen(msg0)*8);
\r
144 void testlshort(void){
\r
145 char* msg0 = "abc";
\r
146 bmw384_test(msg0, strlen(msg0)*8);
\r
149 /*****************************************************************************
\r
150 * additional test-functions *
\r
151 *****************************************************************************/
\r
155 cmdlist_entry_t cmdlist[] = {
\r
156 { "nessie", NULL, testrun_nessie_bmw },
\r
157 { "test", NULL, testrun_stdtest_bmw },
\r
158 { "short", NULL, testshort },
\r
159 { "lshort", NULL, testlshort },
\r
160 { "test506", NULL, test506 },
\r
161 { "test507", NULL, test507 },
\r
162 { "performance", NULL, performance_bmw },
\r
163 { "shavs_list", NULL, shavs_listalgos },
\r
164 { "shavs_set", (void*)1, (void_fpt)shavs_setalgo },
\r
165 { "shavs_test1", NULL, shavs_test1 },
\r
166 { "shavs_test3", NULL, shavs_test3 },
\r
167 { "dump", (void*)1, (void_fpt)dump },
\r
168 { "echo", (void*)1, (void_fpt)echo_ctrl },
\r
169 { NULL, NULL, NULL }
\r
173 sysclk_set_freq(SYS_FREQ);
\r
174 sysclk_mosc_verify_enable();
\r
175 uart_init(UART_0, 115200, 8, UART_PARATY_NONE, UART_STOPBITS_ONE);
\r
176 gptm_set_timer_32periodic(TIMER0);
\r
178 cli_rx = uart0_getc;
\r
179 cli_tx = uart0_putc;
\r
181 shavs_algolist=(hfdesc_t**)algolist;
\r
182 shavs_algo=(hfdesc_t*)&bmw256_desc;
\r
185 cli_putstr("\r\n\r\nARM-Crypto-Lib VS (");
\r
186 cli_putstr(algo_name);
\r
188 cli_putstr(__DATE__);
\r
190 cli_putstr(__TIME__);
\r
191 cli_putstr(")\r\nloaded and running\r\n");
\r
192 cmd_interface(cmdlist);
\r