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