1 /* main-sha512-test.c */
3 This file is part of the ARM-Crypto-Lib.
4 Copyright (C) 2006-2011 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/>.
24 #include "main-test-common.h"
25 #include "uart_lowlevel.h"
28 #include "nessie_hash_test.h"
29 #include "performance_test.h"
30 #include "hfal-nessie.h"
31 #include "hfal-performance.h"
32 #include "hfal-test.h"
36 #include "hfal_sha224.h"
38 #include "hfal_sha256.h"
40 #include "hfal_sha384.h"
42 #include "hfal_sha512.h"
44 const char* algo_name = "SHA-2";
46 const hfdesc_t* algolist[] = {
47 (hfdesc_t*)&sha224_desc,
48 (hfdesc_t*)&sha256_desc,
49 (hfdesc_t*)&sha384_desc,
50 (hfdesc_t*)&sha512_desc,
54 /*****************************************************************************
55 * additional validation-functions *
56 *****************************************************************************/
58 void testrun_nessie_sha2(void){
59 hfal_nessie_multiple(algolist);
62 void testrun_performance_sha2(void){
63 hfal_performance_multiple(algolist);
66 void simple_test(void){
67 const char *msg = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
68 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu";
72 cli_putstr("\r\nDBG: init ..."); uart_flush(0);
74 cli_putstr("\r\nDBG: init done"); uart_flush(0);
75 sha512_lastBlock(&ctx, msg, 3*8);
76 cli_putstr("\r\nDBG: lastBlock done"); uart_flush(0);
77 sha512_ctx2hash(hash, &ctx);
78 cli_putstr("\r\n hash = ");
79 cli_hexdump(hash, 64);
82 cli_putstr("\r\nDBG: init ..."); uart_flush(0);
84 cli_putstr("\r\nDBG: init done"); uart_flush(0);
85 sha512_lastBlock(&ctx, msg, 896);
86 cli_putstr("\r\nDBG: lastBlock done"); uart_flush(0);
87 sha512_ctx2hash(hash, &ctx);
88 cli_putstr("\r\n hash = ");
89 cli_hexdump(hash, 64);
93 memset(buffer, 'a', 128);
94 cli_putstr("\r\nDBG: init ..."); uart_flush(0);
96 cli_putstr("\r\nDBG: init done"); uart_flush(0);
98 sha512_nextBlock(&ctx, buffer);
100 }while(c+128<1000000L);
101 sha512_lastBlock(&ctx, buffer, (1000000-c)*8);
102 cli_putstr("\r\nDBG: lastBlock done"); uart_flush(0);
103 sha512_ctx2hash(hash, &ctx);
104 cli_putstr("\r\n hash = ");
105 cli_hexdump(hash, 64);
111 void test_monte(void){
113 0xF4, 0x1E, 0xCE, 0x26, 0x13, 0xE4, 0x57, 0x39,
114 0x15, 0x69, 0x6B, 0x5A, 0xDC, 0xD5, 0x1C, 0xA3,
115 0x28, 0xBE, 0x3B, 0xF5, 0x66, 0xA9, 0xCA, 0x99,
116 0xC9, 0xCE, 0xB0, 0x27, 0x9C, 0x1C, 0xB0, 0xA7,
117 0xF4, 0x1E, 0xCE, 0x26, 0x13, 0xE4, 0x57, 0x39,
118 0x15, 0x69, 0x6B, 0x5A, 0xDC, 0xD5, 0x1C, 0xA3,
119 0x28, 0xBE, 0x3B, 0xF5, 0x66, 0xA9, 0xCA, 0x99,
120 0xC9, 0xCE, 0xB0, 0x27, 0x9C, 0x1C, 0xB0, 0xA7,
121 0xF4, 0x1E, 0xCE, 0x26, 0x13, 0xE4, 0x57, 0x39,
122 0x15, 0x69, 0x6B, 0x5A, 0xDC, 0xD5, 0x1C, 0xA3,
123 0x28, 0xBE, 0x3B, 0xF5, 0x66, 0xA9, 0xCA, 0x99,
124 0xC9, 0xCE, 0xB0, 0x27, 0x9C, 0x1C, 0xB0, 0xA7 };
127 0xF4, 0x1E, 0xCE, 0x26, 0x13, 0xE4, 0x57, 0x39,
128 0x15, 0x69, 0x6B, 0x5A, 0xDC, 0xD5, 0x1C, 0xA3,
129 0x28, 0xBE, 0x3B, 0xF5, 0x66, 0xA9, 0xCA, 0x99,
130 0xC9, 0xCE, 0xB0, 0x27, 0x9C, 0x1C, 0xB0, 0xA7,
131 0xF4, 0x1E, 0xCE, 0x26, 0x13, 0xE4, 0x57, 0x39,
132 0x15, 0x69, 0x6B, 0x5A, 0xDC, 0xD5, 0x1C, 0xA3,
133 0x28, 0xBE, 0x3B, 0xF5, 0x66, 0xA9, 0xCA, 0x99,
134 0xC9, 0xCE, 0xB0, 0x27, 0x9C, 0x1C, 0xB0, 0xA7,
135 0xFD, 0xDF, 0x1B, 0x37, 0xDD, 0x34, 0xB3, 0xB2,
136 0x01, 0xD4, 0x3C, 0x57, 0xBC, 0xDE, 0x11, 0x58,
137 0x38, 0xF0, 0xDF, 0x70, 0x1D, 0xA9, 0x3C, 0x3B,
138 0xF2, 0xC9, 0xC8, 0x68, 0x96, 0xE7, 0xE6, 0xC7 };
139 uint8_t hash[SHA256_HASH_BYTES];
140 sha256((sha256_hash_t*)hash, data1, 3*32*8);
141 cli_putstr("\r\n hash(data1) = ");
142 cli_hexdump(hash, 32);
143 sha256((sha256_hash_t*)hash, data2, 3*32*8);
144 cli_putstr("\r\n hash(data2) = ");
145 cli_hexdump(hash, 32);
148 void test_monte2(void){
150 0x6c, 0xd4, 0xc0, 0xc5, 0xcb, 0x2c, 0xa2, 0xa0,
151 0xf1, 0xd1, 0xae, 0xce, 0xba, 0xc0, 0x3b, 0x52,
152 0xe6, 0x4e, 0xa0, 0x3d, 0x1a, 0x16, 0x54, 0x37,
153 0x29, 0x36, 0x54, 0x5b, 0x92, 0xbb, 0xc5, 0x48,
154 0x4a, 0x59, 0xdb, 0x74, 0xbb, 0x60, 0xf9, 0xc4,
155 0x0c, 0xeb, 0x1a, 0x5a, 0xa3, 0x5a, 0x6f, 0xaf,
156 0xe8, 0x03, 0x49, 0xe1, 0x4c, 0x25, 0x3a, 0x4e,
157 0x8b, 0x1d, 0x77, 0x61, 0x2d, 0xdd, 0x81, 0xac,
158 0xe9, 0x26, 0xae, 0x8b, 0x0a, 0xf6, 0xe5, 0x31,
159 0x76, 0xdb, 0xff, 0xcc, 0x2a, 0x6b, 0x88, 0xc6,
160 0xbd, 0x76, 0x5f, 0x93, 0x9d, 0x3d, 0x17, 0x8a,
161 0x9b, 0xde, 0x9e, 0xf3, 0xaa, 0x13, 0x1c, 0x61,
162 0xe3, 0x1c, 0x1e, 0x42, 0xcd, 0xfa, 0xf4, 0xb4,
163 0xdc, 0xde, 0x57, 0x9a, 0x37, 0xe1, 0x50, 0xef,
164 0xbe, 0xf5, 0x55, 0x5b, 0x4c, 0x1c, 0xb4, 0x04,
165 0x39, 0xd8, 0x35, 0xa7, 0x24, 0xe2, 0xfa, 0xe7 };
167 uint8_t hash[SHA256_HASH_BYTES];
168 sha256((sha256_hash_t*)hash, data, 1024);
169 cli_putstr("\r\n hash(data) = ");
170 cli_hexdump(hash, 32);
173 /*****************************************************************************
175 *****************************************************************************/
177 const char nessie_str[] = "nessie";
178 const char test_str[] = "test";
179 //const char monte_str[] = "monte";
180 //const char monte2_str[] = "monte2";
181 const char performance_str[] = "performance";
182 const char echo_str[] = "echo";
183 const char shavs_list_str[] = "shavs_list";
184 const char shavs_set_str[] = "shavs_set";
185 const char shavs_test1_str[] = "shavs_test1";
186 const char shavs_test2_str[] = "shavs_test2";
187 const char shavs_test3_str[] = "shavs_test3";
188 const char dump_str[] = "dump";
190 const cmdlist_entry_t cmdlist[] = {
191 { nessie_str, NULL, testrun_nessie_sha2 },
192 { test_str, NULL, simple_test },
193 // { monte_str, NULL, test_monte },
194 // { monte2_str, NULL, test_monte2 },
195 { performance_str, NULL, testrun_performance_sha2 },
196 { echo_str, (void*)1, (void_fpt)echo_ctrl },
197 { shavs_list_str, NULL, shavs_listalgos },
198 { shavs_set_str, (void*)1, (void_fpt)shavs_setalgo },
199 { shavs_test1_str, NULL, shavs_test1 },
200 { shavs_test2_str, NULL, shavs_test2 },
201 { shavs_test3_str, NULL, shavs_test3 },
202 { dump_str, (void*)1, (void_fpt)dump },
209 shavs_algolist=(hfdesc_t**)algolist;
210 shavs_algo=(hfdesc_t*)&sha256_desc;
213 welcome_msg(algo_name);
214 cmd_interface(cmdlist);