3 This file is part of the ARM-Crypto-Lib.
4 Copyright (C) 2006-2010 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/>.
29 #include "uart_lowlevel.h"
34 #include "nessie_hash_test.h"
35 #include "performance_test.h"
36 #include "hfal-nessie.h"
37 #include "hfal-performance.h"
38 #include "hfal-test.h"
41 #include "hfal_echo.h"
43 char* algo_name = "Echo";
46 const hfdesc_t* algolist[] = {
47 (hfdesc_t*)&echo224_desc,
48 (hfdesc_t*)&echo256_desc,
49 (hfdesc_t*)&echo384_desc,
50 (hfdesc_t*)&echo512_desc,
54 void uart0_putc(char byte){
55 uart_putc(UART_0, byte);
58 char uart0_getc(void){
59 return uart_getc(UART_0);
62 /*****************************************************************************
63 * additional validation-functions *
64 *****************************************************************************/
65 /* IntermediateKAT1_256.txt */
67 uint8_t intermediate_data[] = {
68 0xDB, 0x11, 0xF6, 0x09, 0xBA, 0xBA, 0x7B, 0x0C,
69 0xA6, 0x34, 0x92, 0x6B, 0x1D, 0xD5, 0x39, 0xC8,
70 0xCB, 0xAD, 0xA2, 0x49, 0x67, 0xD7, 0xAD, 0xD4,
71 0xD9, 0x87, 0x6F, 0x77, 0xC2, 0xD8, 0x0C, 0x0F,
72 0x4D, 0xCE, 0xFB, 0xD7, 0x12, 0x15, 0x48, 0x37,
73 0x35, 0x82, 0x70, 0x5C, 0xCA, 0x24, 0x95, 0xBD,
74 0x2A, 0x43, 0x71, 0x6F, 0xE6, 0x4E, 0xD2, 0x6D,
75 0x05, 0x9C, 0xFB, 0x56, 0x6B, 0x33, 0x64, 0xBD,
76 0x49, 0xEE, 0x07, 0x17, 0xBD, 0xD9, 0x81, 0x0D,
77 0xD1, 0x4D, 0x8F, 0xAD, 0x80, 0xDB, 0xBD, 0xC4,
78 0xCA, 0xFB, 0x37, 0xCC, 0x60, 0xFB, 0x0F, 0xE2,
79 0xA8, 0x0F, 0xB4, 0x54, 0x1B, 0x8C, 0xA9, 0xD5,
80 0x9D, 0xCE, 0x45, 0x77, 0x38, 0xA9, 0xD3, 0xD8,
81 0xF6, 0x41, 0xAF, 0x8C, 0x3F, 0xD6, 0xDA, 0x16,
82 0x2D, 0xC1, 0x6F, 0xC0, 0x1A, 0xAC, 0x52, 0x7A,
83 0x4A, 0x02, 0x55, 0xB4, 0xD2, 0x31, 0xC0, 0xBE,
84 0x50, 0xF4, 0x4F, 0x0D, 0xB0, 0xB7, 0x13, 0xAF,
85 0x03, 0xD9, 0x68, 0xFE, 0x7F, 0x0F, 0x61, 0xED,
86 0x08, 0x24, 0xC5, 0x5C, 0x4B, 0x52, 0x65, 0x54,
87 0x8F, 0xEB, 0xD6, 0xAA, 0xD5, 0xC5, 0xEE, 0xDF,
88 0x63, 0xEF, 0xE7, 0x93, 0x48, 0x9C, 0x39, 0xB8,
89 0xFD, 0x29, 0xD1, 0x04, 0xCE
93 uint8_t intermediate_data2[] = {
94 0x75, 0x8E, 0xA3, 0xFE, 0xA7, 0x38, 0x97, 0x3D,
95 0xB0, 0xB8, 0xBE, 0x7E, 0x59, 0x9B, 0xBE, 0xF4,
96 0x51, 0x93, 0x73, 0xD6, 0xE6, 0xDC, 0xD7, 0x19,
97 0x5E, 0xA8, 0x85, 0xFC, 0x99, 0x1D, 0x89, 0x67,
98 0x62, 0x99, 0x27, 0x59, 0xC2, 0xA0, 0x90, 0x02,
99 0x91, 0x2F, 0xB0, 0x8E, 0x0C, 0xB5, 0xB7, 0x6F,
100 0x49, 0x16, 0x2A, 0xEB, 0x8C, 0xF8, 0x7B, 0x17,
101 0x2C, 0xF3, 0xAD, 0x19, 0x02, 0x53, 0xDF, 0x61,
102 0x2F, 0x77, 0xB1, 0xF0, 0xC5, 0x32, 0xE3, 0xB5,
103 0xFC, 0x99, 0xC2, 0xD3, 0x1F, 0x8F, 0x65, 0x01,
104 0x16, 0x95, 0xA0, 0x87, 0xA3, 0x5E, 0xE4, 0xEE,
105 0xE5, 0xE3, 0x34, 0xC3, 0x69, 0xD8, 0xEE, 0x5D,
106 0x29, 0xF6, 0x95, 0x81, 0x5D, 0x86, 0x6D, 0xA9,
107 0x9D, 0xF3, 0xF7, 0x94, 0x03
110 void echo256_interm(void){
111 echo_small_ctx_t ctx;
112 uint8_t data[1384/8];
115 memcpy(data, intermediate_data, 173);
116 cli_putstr("\r\ninit done ");
117 echo_small_lastBlock(&ctx, data, 1384);
118 cli_putstr("\r\nlastblock done ");
119 echo256_ctx2hash(hash, &ctx);
120 cli_putstr("\r\nhash = ");
121 cli_hexdump(hash, 32);
124 void echo512_interm(void){
125 echo_large_ctx_t ctx;
129 memcpy(data, intermediate_data2, 872/8);
130 cli_putstr("\r\ninit done ");
131 echo_large_lastBlock(&ctx, data, 872);
132 cli_putstr("\r\nlastblock done ");
133 echo512_ctx2hash(hash, &ctx);
134 cli_putstr("\r\nhash = ");
135 cli_hexdump(hash, 64);
138 void echo256_test0(void){
139 echo_small_ctx_t ctx;
142 cli_putstr("\r\ninit done ");
143 echo_small_lastBlock(&ctx, NULL, 0);
144 cli_putstr("\r\nlastblock done ");
145 echo256_ctx2hash(hash, &ctx);
146 cli_putstr("\r\nhash = ");
147 cli_hexdump(hash, 32);
150 void performance_echo(void){
151 hfal_performance_multiple(algolist);
154 void testrun_nessie_echo(void){
155 hfal_nessie_multiple(algolist);
157 /*****************************************************************************
159 *****************************************************************************/
161 const char nessie_str[] = "nessie";
162 const char test256_str[] = "test256";
163 const char interm_str[] = "interm";
164 const char interm2_str[] = "interm2";
165 const char performance_str[] = "performance";
166 const char echo_str[] = "echo";
167 const char shavs_list_str[] = "shavs_list";
168 const char shavs_set_str[] = "shavs_set";
169 const char shavs_test1_str[] = "shavs_test1";
170 const char shavs_test3_str[] = "shavs_test3";
172 cmdlist_entry_t cmdlist[] = {
173 { nessie_str, NULL, testrun_nessie_echo },
174 { interm_str, NULL, echo256_interm },
175 { interm2_str, NULL, echo512_interm },
176 { test256_str, NULL, echo256_test0 },
177 { performance_str, NULL, performance_echo },
178 { shavs_list_str, NULL, shavs_listalgos },
179 { shavs_set_str, (void*)1, (void_fpt)shavs_setalgo },
180 { shavs_test1_str, NULL, shavs_test1 },
181 { shavs_test3_str, NULL, shavs_test3 },
182 { echo_str, (void*)1, (void_fpt)echo_ctrl },
187 sysclk_set_freq(SYS_FREQ);
188 sysclk_mosc_verify_enable();
189 uart_init(UART_0, 115200, 8, UART_PARATY_NONE, UART_STOPBITS_ONE);
190 gptm_set_timer_32periodic(TIMER0);
195 shavs_algolist=(hfdesc_t**)algolist;
196 shavs_algo=(hfdesc_t*)&echo256_desc;
199 cli_putstr("\r\n\r\nARM-Crypto-Lib VS (");
200 cli_putstr(algo_name);
202 cli_putstr(__DATE__);
204 cli_putstr(__TIME__);
205 cli_putstr(")\r\nloaded and running\r\n");
206 cmd_interface(cmdlist);