]> git.cryptolib.org Git - arm-crypto-lib.git/blob - test_src/main-sha2-test.c
fixing bugs reported by Christian Dernehl
[arm-crypto-lib.git] / test_src / main-sha2-test.c
1 /* main-sha512-test.c */
2 /*
3     This file is part of the ARM-Crypto-Lib.
4     Copyright (C) 2006-2011  Daniel Otte (daniel.otte@rub.de)
5
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.
10
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.
15
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/>.
18 */
19 /*
20  * SHA-512 test-suit
21  *
22 */
23
24 #include "main-test-common.h"
25 #include "uart_lowlevel.h"
26
27 #include "shavs.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"
33
34
35 #include "sha224.h"
36 #include "hfal_sha224.h"
37 #include "sha256.h"
38 #include "hfal_sha256.h"
39 #include "sha384.h"
40 #include "hfal_sha384.h"
41 #include "sha512.h"
42 #include "hfal_sha512.h"
43
44 const char* algo_name = "SHA-2";
45
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,
51         NULL
52 };
53
54 /*****************************************************************************
55  *  additional validation-functions                                                                                      *
56  *****************************************************************************/
57
58 void testrun_nessie_sha2(void){
59         hfal_nessie_multiple(algolist);
60 }
61
62 void testrun_performance_sha2(void){
63         hfal_performance_multiple(algolist);
64 }
65
66 void simple_test(void){
67         const char *msg = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
68                                   "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu";
69
70         uint8_t hash[64];
71         sha512_ctx_t ctx;
72         cli_putstr("\r\nDBG: init ..."); uart_flush(0);
73         sha512_init(&ctx);
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);
80
81
82         cli_putstr("\r\nDBG: init ..."); uart_flush(0);
83         sha512_init(&ctx);
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);
90
91         uint32_t c=0;
92         uint8_t buffer[128];
93         memset(buffer, 'a', 128);
94         cli_putstr("\r\nDBG: init ..."); uart_flush(0);
95         sha512_init(&ctx);
96         cli_putstr("\r\nDBG: init done"); uart_flush(0);
97         do{
98                 sha512_nextBlock(&ctx, buffer);
99                 c += 128;
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);
106
107
108 }
109
110 /*
111 void test_monte(void){
112         uint8_t data1[] = {
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 };
125
126    uint8_t data2[] = {
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);
146 }
147
148 void test_monte2(void){
149         uint8_t data[] = {
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 };
166
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);
171 }
172 */
173 /*****************************************************************************
174  *  main                                                                                                                                         *
175  *****************************************************************************/
176
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";
189
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                 },
203         { NULL,                NULL, NULL                           }
204 };
205
206 int main(void) {
207         main_setup();
208
209         shavs_algolist=(hfdesc_t**)algolist;
210         shavs_algo=(hfdesc_t*)&sha256_desc;
211
212         for(;;){
213                 welcome_msg(algo_name);
214                 cmd_interface(cmdlist);
215     }
216
217 }