blob: d65437b0e46554c582253c88d7125bbf1d0205c9 [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Paul Bakker367dae42009-06-28 21:50:27 +00002#include <polarssl/sha1.h>
Paul Bakkerd2681d82013-06-30 14:49:12 +02003#include <polarssl/sha256.h>
4#include <polarssl/sha512.h>
Paul Bakker33b43f12013-08-20 11:48:36 +02005/* END_HEADER */
Paul Bakker367dae42009-06-28 21:50:27 +00006
Paul Bakker68a4fce2013-08-20 12:42:31 +02007/* BEGIN_CASE depends_on:POLARSSL_SHA1_C */
Paul Bakker33b43f12013-08-20 11:48:36 +02008void sha1_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
9 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +000010{
11 unsigned char src_str[10000];
12 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020013 unsigned char hash_str[41];
14 unsigned char output[20];
Paul Bakker69998dd2009-07-11 19:15:20 +000015 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020016 sha1_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000017
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020018 memset(src_str, 0x00, sizeof src_str);
19 memset(key_str, 0x00, sizeof key_str);
Paul Bakker367dae42009-06-28 21:50:27 +000020
Paul Bakker33b43f12013-08-20 11:48:36 +020021 key_len = unhexify( key_str, hex_key_string );
22 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000023
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020024 /* Test the all-in-one interface */
25 memset(hash_str, 0x00, sizeof hash_str);
26 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +000027
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020028 sha1_hmac( key_str, key_len, src_str, src_len, output );
29
30 hexify( hash_str, output, sizeof output );
31 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
32
33 /* Also test the "streaming" interface */
34 memset( hash_str, 0x00, sizeof hash_str );
35 memset( output, 0x00, sizeof output );
36 memset( &ctx, 0x00, sizeof ctx );
37
38 sha1_hmac_starts( &ctx, key_str, key_len );
39 sha1_hmac_update( &ctx, src_str, 0 );
40 sha1_hmac_update( &ctx, src_str, src_len / 2 );
41 sha1_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
42 sha1_hmac_update( &ctx, src_str + src_len, 0 );
43 sha1_hmac_finish( &ctx, output );
44
45 hexify( hash_str, output, sizeof output );
46 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
47
48 /* Again, to test hmac_reset() */
49 memset( hash_str, 0x00, sizeof hash_str );
50 memset( output, 0x00, sizeof output );
51
52 sha1_hmac_reset( &ctx );
53 sha1_hmac_update( &ctx, src_str, src_len / 2 );
54 sha1_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
55 sha1_hmac_finish( &ctx, output );
56
57 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +020058 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +000059}
Paul Bakker33b43f12013-08-20 11:48:36 +020060/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000061
Paul Bakker68a4fce2013-08-20 12:42:31 +020062/* BEGIN_CASE depends_on:POLARSSL_SHA256_C */
Paul Bakker33b43f12013-08-20 11:48:36 +020063void sha224_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
64 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +000065{
66 unsigned char src_str[10000];
67 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020068 unsigned char hash_str[57];
69 unsigned char output[28];
Paul Bakker69998dd2009-07-11 19:15:20 +000070 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020071 sha256_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000072
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020073 memset(src_str, 0x00, sizeof src_str);
74 memset(key_str, 0x00, sizeof key_str);
Paul Bakker367dae42009-06-28 21:50:27 +000075
Paul Bakker33b43f12013-08-20 11:48:36 +020076 key_len = unhexify( key_str, hex_key_string );
77 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000078
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020079 /* Test the all-in-one interface */
80 memset(hash_str, 0x00, sizeof hash_str);
81 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +000082
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020083 sha256_hmac( key_str, key_len, src_str, src_len, output, 1 );
84
85 hexify( hash_str, output, sizeof output );
86 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
87
88 /* Also test the "streaming" interface */
89 memset( hash_str, 0x00, sizeof hash_str );
90 memset( output, 0x00, sizeof output );
91 memset( &ctx, 0x00, sizeof ctx );
92
93 sha256_hmac_starts( &ctx, key_str, key_len, 1 );
94 sha256_hmac_update( &ctx, src_str, 0 );
95 sha256_hmac_update( &ctx, src_str, src_len / 2 );
96 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
97 sha256_hmac_update( &ctx, src_str + src_len, 0 );
98 sha256_hmac_finish( &ctx, output );
99
100 hexify( hash_str, output, sizeof output );
101 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
102
103 /* Again, to test hmac_reset() */
104 memset( hash_str, 0x00, sizeof hash_str );
105 memset( output, 0x00, sizeof output );
106
107 sha256_hmac_reset( &ctx );
108 sha256_hmac_update( &ctx, src_str, src_len / 2 );
109 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
110 sha256_hmac_finish( &ctx, output );
111
112 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200113 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000114}
Paul Bakker33b43f12013-08-20 11:48:36 +0200115/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000116
Paul Bakker68a4fce2013-08-20 12:42:31 +0200117/* BEGIN_CASE depends_on:POLARSSL_SHA256_C */
Paul Bakker33b43f12013-08-20 11:48:36 +0200118void sha256_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
119 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +0000120{
121 unsigned char src_str[10000];
122 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200123 unsigned char hash_str[65];
124 unsigned char output[32];
Paul Bakker69998dd2009-07-11 19:15:20 +0000125 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200126 sha256_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000127
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200128 memset(src_str, 0x00, sizeof src_str);
129 memset(key_str, 0x00, sizeof key_str);
Paul Bakker367dae42009-06-28 21:50:27 +0000130
Paul Bakker33b43f12013-08-20 11:48:36 +0200131 key_len = unhexify( key_str, hex_key_string );
132 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000133
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200134 /* Test the all-in-one interface */
135 memset(hash_str, 0x00, sizeof hash_str);
136 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +0000137
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200138 sha256_hmac( key_str, key_len, src_str, src_len, output, 0 );
139
140 hexify( hash_str, output, sizeof output );
141 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
142
143 /* Also test the "streaming" interface */
144 memset( hash_str, 0x00, sizeof hash_str );
145 memset( output, 0x00, sizeof output );
146 memset( &ctx, 0x00, sizeof ctx );
147
148 sha256_hmac_starts( &ctx, key_str, key_len, 0 );
149 sha256_hmac_update( &ctx, src_str, 0 );
150 sha256_hmac_update( &ctx, src_str, src_len / 2 );
151 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
152 sha256_hmac_update( &ctx, src_str + src_len, 0 );
153 sha256_hmac_finish( &ctx, output );
154
155 hexify( hash_str, output, sizeof output );
156 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
157
158 /* Again, to test hmac_reset() */
159 memset( hash_str, 0x00, sizeof hash_str );
160 memset( output, 0x00, sizeof output );
161
162 sha256_hmac_reset( &ctx );
163 sha256_hmac_update( &ctx, src_str, src_len / 2 );
164 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
165 sha256_hmac_finish( &ctx, output );
166
167 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200168 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000169}
Paul Bakker33b43f12013-08-20 11:48:36 +0200170/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000171
Paul Bakker68a4fce2013-08-20 12:42:31 +0200172/* BEGIN_CASE depends_on:POLARSSL_SHA512_C */
Paul Bakker33b43f12013-08-20 11:48:36 +0200173void sha384_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
174 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +0000175{
176 unsigned char src_str[10000];
177 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200178 unsigned char hash_str[97];
179 unsigned char output[48];
Paul Bakker69998dd2009-07-11 19:15:20 +0000180 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200181 sha512_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000182
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200183 memset(src_str, 0x00, sizeof src_str);
184 memset(key_str, 0x00, sizeof key_str);
Paul Bakker367dae42009-06-28 21:50:27 +0000185
Paul Bakker33b43f12013-08-20 11:48:36 +0200186 key_len = unhexify( key_str, hex_key_string );
187 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000188
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200189 /* Test the all-in-one interface */
190 memset(hash_str, 0x00, sizeof hash_str);
191 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +0000192
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200193 sha512_hmac( key_str, key_len, src_str, src_len, output, 1 );
194
195 hexify( hash_str, output, sizeof output );
196 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
197
198 /* Also test the "streaming" interface */
199 memset( hash_str, 0x00, sizeof hash_str );
200 memset( output, 0x00, sizeof output );
201 memset( &ctx, 0x00, sizeof ctx );
202
203 sha512_hmac_starts( &ctx, key_str, key_len, 1 );
204 sha512_hmac_update( &ctx, src_str, 0 );
205 sha512_hmac_update( &ctx, src_str, src_len / 2 );
206 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
207 sha512_hmac_update( &ctx, src_str + src_len, 0 );
208 sha512_hmac_finish( &ctx, output );
209
210 hexify( hash_str, output, sizeof output );
211 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
212
213 /* Again, to test hmac_reset() */
214 memset( hash_str, 0x00, sizeof hash_str );
215 memset( output, 0x00, sizeof output );
216
217 sha512_hmac_reset( &ctx );
218 sha512_hmac_update( &ctx, src_str, src_len / 2 );
219 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
220 sha512_hmac_finish( &ctx, output );
221
222 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200223 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000224}
Paul Bakker33b43f12013-08-20 11:48:36 +0200225/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000226
Paul Bakker68a4fce2013-08-20 12:42:31 +0200227/* BEGIN_CASE depends_on:POLARSSL_SHA512_C */
Paul Bakker33b43f12013-08-20 11:48:36 +0200228void sha512_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
229 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +0000230{
231 unsigned char src_str[10000];
232 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200233 unsigned char hash_str[129];
234 unsigned char output[64];
Paul Bakker69998dd2009-07-11 19:15:20 +0000235 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200236 sha512_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000237
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200238 memset(src_str, 0x00, sizeof src_str);
239 memset(key_str, 0x00, sizeof key_str);
Paul Bakker367dae42009-06-28 21:50:27 +0000240
Paul Bakker33b43f12013-08-20 11:48:36 +0200241 key_len = unhexify( key_str, hex_key_string );
242 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000243
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200244 /* Test the all-in-one interface */
245 memset(hash_str, 0x00, sizeof hash_str);
246 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +0000247
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200248 sha512_hmac( key_str, key_len, src_str, src_len, output, 0 );
249
250 hexify( hash_str, output, sizeof output );
251 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
252
253 /* Also test the "streaming" interface */
254 memset( hash_str, 0x00, sizeof hash_str );
255 memset( output, 0x00, sizeof output );
256 memset( &ctx, 0x00, sizeof ctx );
257
258 sha512_hmac_starts( &ctx, key_str, key_len, 0 );
259 sha512_hmac_update( &ctx, src_str, 0 );
260 sha512_hmac_update( &ctx, src_str, src_len / 2 );
261 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
262 sha512_hmac_update( &ctx, src_str + src_len, 0 );
263 sha512_hmac_finish( &ctx, output );
264
265 hexify( hash_str, output, sizeof output );
266 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
267
268 /* Again, to test hmac_reset() */
269 memset( hash_str, 0x00, sizeof hash_str );
270 memset( output, 0x00, sizeof output );
271
272 sha512_hmac_reset( &ctx );
273 sha512_hmac_update( &ctx, src_str, src_len / 2 );
274 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
275 sha512_hmac_finish( &ctx, output );
276
277 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200278 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker367dae42009-06-28 21:50:27 +0000279}
Paul Bakker33b43f12013-08-20 11:48:36 +0200280/* END_CASE */