]> git.cryptolib.org Git - arm-crypto-lib.git/blob - test_src/main-bmw-test.c
bigint looks good but needs more testing
[arm-crypto-lib.git] / test_src / main-bmw-test.c
1 /* main-bmw-test.c */\r
2 /*\r
3     This file is part of the ARM-Crypto-Lib.\r
4     Copyright (C) 2006-2010  Daniel Otte (daniel.otte@rub.de)\r
5 \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
10 \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
15 \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
18 */\r
19 /*\r
20  * BlueMidnightWish test-suit\r
21  *\r
22 */\r
23 \r
24 #include <stdint.h>\r
25 #include <stdlib.h>\r
26 #include <string.h>\r
27 #include "config.h"\r
28 #include "cli.h"\r
29 #include "dump.h"\r
30 #include "uart_lowlevel.h"\r
31 #include "sysclock.h"\r
32 #include "hw_gptm.h"\r
33 \r
34 #include "shavs.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
40 \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
45 \r
46 void uart0_putc(char byte){\r
47         uart_putc(UART_0, byte);\r
48 }\r
49 \r
50 char uart0_getc(void){\r
51         return uart_getc(UART_0);\r
52 }\r
53 \r
54 \r
55 const char* algo_name = "BlueMidnightWish";\r
56 \r
57 \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
63         NULL\r
64 };\r
65 \r
66 /*****************************************************************************\r
67  *  additional validation-functions                                                                                      *\r
68  *****************************************************************************/\r
69 \r
70 void performance_bmw(void){\r
71         hfal_performance_multiple(algolist);\r
72 }\r
73 \r
74 void testrun_nessie_bmw(void){\r
75         hfal_nessie_multiple(algolist);\r
76 }\r
77 \r
78 void bmw224_test(void* msg, uint32_t length_b){\r
79         hfal_test(&bmw224_desc, msg, length_b);\r
80 }\r
81 \r
82 void bmw256_test(void* msg, uint32_t length_b){\r
83         hfal_test(&bmw256_desc, msg, length_b);\r
84 }\r
85 void bmw384_test(void* msg, uint32_t length_b){\r
86         hfal_test(&bmw384_desc, msg, length_b);\r
87 }\r
88 \r
89 void bmw512_test(void* msg, uint32_t length_b){\r
90         hfal_test(&bmw512_desc, msg, length_b);\r
91 }\r
92 \r
93 void test506(void){\r
94         /* Testvector of length = 506 from short KAT */\r
95         uint8_t v[] = {\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
105 }\r
106 \r
107 void test507(void){\r
108         /* Testvector of length = 506 from short KAT */\r
109         uint8_t v[] = {\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
119 }\r
120 \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
132 }\r
133 \r
134 void bmw256_short_test(void* msg, uint32_t length_b){\r
135         bmw256_test("abc", 3*8);\r
136 }\r
137 \r
138 \r
139 void testshort(void){\r
140         char* msg0 = "abc";\r
141         bmw224_test(msg0, strlen(msg0)*8);\r
142 }\r
143 \r
144 void testlshort(void){\r
145         char* msg0 = "abc";\r
146         bmw384_test(msg0, strlen(msg0)*8);\r
147 }\r
148 \r
149 /*****************************************************************************\r
150  *  additional test-functions                                                                                        *\r
151  *****************************************************************************/\r
152 \r
153 \r
154 static const\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
170 };\r
171 \r
172 int main(void) {\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
177 \r
178         cli_rx = uart0_getc;\r
179     cli_tx = uart0_putc;\r
180 \r
181         shavs_algolist=(hfdesc_t**)algolist;\r
182         shavs_algo=(hfdesc_t*)&bmw256_desc;\r
183 \r
184         for(;;){\r
185                 cli_putstr("\r\n\r\nARM-Crypto-Lib VS (");\r
186                 cli_putstr(algo_name);\r
187                 cli_putstr("; ");\r
188                 cli_putstr(__DATE__);\r
189                 cli_putc(' ');\r
190                 cli_putstr(__TIME__);\r
191                 cli_putstr(")\r\nloaded and running\r\n");\r
192         cmd_interface(cmdlist);\r
193     }\r
194 \r
195 }\r