blob: 10b376f5b62b7a0cba48ac01d598882091bb5a59 [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 Bakker14e8be42014-06-26 12:25:06 +020020 sha1_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000021
Paul Bakker33b43f12013-08-20 11:48:36 +020022 key_len = unhexify( key_str, hex_key_string );
23 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000024
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020025 /* Test the all-in-one interface */
26 memset(hash_str, 0x00, sizeof hash_str);
27 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +000028
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020029 sha1_hmac( key_str, key_len, src_str, src_len, output );
30
31 hexify( hash_str, output, sizeof output );
32 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
33
34 /* Also test the "streaming" interface */
35 memset( hash_str, 0x00, sizeof hash_str );
36 memset( output, 0x00, sizeof output );
37 memset( &ctx, 0x00, sizeof ctx );
38
39 sha1_hmac_starts( &ctx, key_str, key_len );
40 sha1_hmac_update( &ctx, src_str, 0 );
41 sha1_hmac_update( &ctx, src_str, src_len / 2 );
42 sha1_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
43 sha1_hmac_update( &ctx, src_str + src_len, 0 );
44 sha1_hmac_finish( &ctx, output );
45
46 hexify( hash_str, output, sizeof output );
47 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
48
49 /* Again, to test hmac_reset() */
50 memset( hash_str, 0x00, sizeof hash_str );
51 memset( output, 0x00, sizeof output );
52
53 sha1_hmac_reset( &ctx );
54 sha1_hmac_update( &ctx, src_str, src_len / 2 );
55 sha1_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
56 sha1_hmac_finish( &ctx, output );
57
58 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +020059 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker14e8be42014-06-26 12:25:06 +020060
61 sha1_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000062}
Paul Bakker33b43f12013-08-20 11:48:36 +020063/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000064
Paul Bakker68a4fce2013-08-20 12:42:31 +020065/* BEGIN_CASE depends_on:POLARSSL_SHA256_C */
Paul Bakker33b43f12013-08-20 11:48:36 +020066void sha224_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
67 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +000068{
69 unsigned char src_str[10000];
70 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020071 unsigned char hash_str[57];
72 unsigned char output[28];
Paul Bakker69998dd2009-07-11 19:15:20 +000073 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020074 sha256_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000075
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020076 memset(src_str, 0x00, sizeof src_str);
77 memset(key_str, 0x00, sizeof key_str);
Paul Bakker14e8be42014-06-26 12:25:06 +020078 sha256_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000079
Paul Bakker33b43f12013-08-20 11:48:36 +020080 key_len = unhexify( key_str, hex_key_string );
81 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000082
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020083 /* Test the all-in-one interface */
84 memset(hash_str, 0x00, sizeof hash_str);
85 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +000086
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020087 sha256_hmac( key_str, key_len, src_str, src_len, output, 1 );
88
89 hexify( hash_str, output, sizeof output );
90 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
91
92 /* Also test the "streaming" interface */
93 memset( hash_str, 0x00, sizeof hash_str );
94 memset( output, 0x00, sizeof output );
95 memset( &ctx, 0x00, sizeof ctx );
96
97 sha256_hmac_starts( &ctx, key_str, key_len, 1 );
98 sha256_hmac_update( &ctx, src_str, 0 );
99 sha256_hmac_update( &ctx, src_str, src_len / 2 );
100 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
101 sha256_hmac_update( &ctx, src_str + src_len, 0 );
102 sha256_hmac_finish( &ctx, output );
103
104 hexify( hash_str, output, sizeof output );
105 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
106
107 /* Again, to test hmac_reset() */
108 memset( hash_str, 0x00, sizeof hash_str );
109 memset( output, 0x00, sizeof output );
110
111 sha256_hmac_reset( &ctx );
112 sha256_hmac_update( &ctx, src_str, src_len / 2 );
113 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
114 sha256_hmac_finish( &ctx, output );
115
116 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200117 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker14e8be42014-06-26 12:25:06 +0200118
119 sha256_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000120}
Paul Bakker33b43f12013-08-20 11:48:36 +0200121/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000122
Paul Bakker68a4fce2013-08-20 12:42:31 +0200123/* BEGIN_CASE depends_on:POLARSSL_SHA256_C */
Paul Bakker33b43f12013-08-20 11:48:36 +0200124void sha256_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
125 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +0000126{
127 unsigned char src_str[10000];
128 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200129 unsigned char hash_str[65];
130 unsigned char output[32];
Paul Bakker69998dd2009-07-11 19:15:20 +0000131 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200132 sha256_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000133
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200134 memset(src_str, 0x00, sizeof src_str);
135 memset(key_str, 0x00, sizeof key_str);
Paul Bakker14e8be42014-06-26 12:25:06 +0200136 sha256_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000137
Paul Bakker33b43f12013-08-20 11:48:36 +0200138 key_len = unhexify( key_str, hex_key_string );
139 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000140
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200141 /* Test the all-in-one interface */
142 memset(hash_str, 0x00, sizeof hash_str);
143 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +0000144
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200145 sha256_hmac( key_str, key_len, src_str, src_len, output, 0 );
146
147 hexify( hash_str, output, sizeof output );
148 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
149
150 /* Also test the "streaming" interface */
151 memset( hash_str, 0x00, sizeof hash_str );
152 memset( output, 0x00, sizeof output );
153 memset( &ctx, 0x00, sizeof ctx );
154
155 sha256_hmac_starts( &ctx, key_str, key_len, 0 );
156 sha256_hmac_update( &ctx, src_str, 0 );
157 sha256_hmac_update( &ctx, src_str, src_len / 2 );
158 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
159 sha256_hmac_update( &ctx, src_str + src_len, 0 );
160 sha256_hmac_finish( &ctx, output );
161
162 hexify( hash_str, output, sizeof output );
163 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
164
165 /* Again, to test hmac_reset() */
166 memset( hash_str, 0x00, sizeof hash_str );
167 memset( output, 0x00, sizeof output );
168
169 sha256_hmac_reset( &ctx );
170 sha256_hmac_update( &ctx, src_str, src_len / 2 );
171 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
172 sha256_hmac_finish( &ctx, output );
173
174 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200175 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker14e8be42014-06-26 12:25:06 +0200176
177 sha256_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000178}
Paul Bakker33b43f12013-08-20 11:48:36 +0200179/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000180
Paul Bakker68a4fce2013-08-20 12:42:31 +0200181/* BEGIN_CASE depends_on:POLARSSL_SHA512_C */
Paul Bakker33b43f12013-08-20 11:48:36 +0200182void sha384_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
183 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +0000184{
185 unsigned char src_str[10000];
186 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200187 unsigned char hash_str[97];
188 unsigned char output[48];
Paul Bakker69998dd2009-07-11 19:15:20 +0000189 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200190 sha512_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000191
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200192 memset(src_str, 0x00, sizeof src_str);
193 memset(key_str, 0x00, sizeof key_str);
Paul Bakker14e8be42014-06-26 12:25:06 +0200194 sha512_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000195
Paul Bakker33b43f12013-08-20 11:48:36 +0200196 key_len = unhexify( key_str, hex_key_string );
197 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000198
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200199 /* Test the all-in-one interface */
200 memset(hash_str, 0x00, sizeof hash_str);
201 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +0000202
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200203 sha512_hmac( key_str, key_len, src_str, src_len, output, 1 );
204
205 hexify( hash_str, output, sizeof output );
206 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
207
208 /* Also test the "streaming" interface */
209 memset( hash_str, 0x00, sizeof hash_str );
210 memset( output, 0x00, sizeof output );
211 memset( &ctx, 0x00, sizeof ctx );
212
213 sha512_hmac_starts( &ctx, key_str, key_len, 1 );
214 sha512_hmac_update( &ctx, src_str, 0 );
215 sha512_hmac_update( &ctx, src_str, src_len / 2 );
216 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
217 sha512_hmac_update( &ctx, src_str + src_len, 0 );
218 sha512_hmac_finish( &ctx, output );
219
220 hexify( hash_str, output, sizeof output );
221 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
222
223 /* Again, to test hmac_reset() */
224 memset( hash_str, 0x00, sizeof hash_str );
225 memset( output, 0x00, sizeof output );
226
227 sha512_hmac_reset( &ctx );
228 sha512_hmac_update( &ctx, src_str, src_len / 2 );
229 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
230 sha512_hmac_finish( &ctx, output );
231
232 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200233 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker14e8be42014-06-26 12:25:06 +0200234
235 sha512_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000236}
Paul Bakker33b43f12013-08-20 11:48:36 +0200237/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000238
Paul Bakker68a4fce2013-08-20 12:42:31 +0200239/* BEGIN_CASE depends_on:POLARSSL_SHA512_C */
Paul Bakker33b43f12013-08-20 11:48:36 +0200240void sha512_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
241 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +0000242{
243 unsigned char src_str[10000];
244 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200245 unsigned char hash_str[129];
246 unsigned char output[64];
Paul Bakker69998dd2009-07-11 19:15:20 +0000247 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200248 sha512_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000249
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200250 memset(src_str, 0x00, sizeof src_str);
251 memset(key_str, 0x00, sizeof key_str);
Paul Bakker14e8be42014-06-26 12:25:06 +0200252 sha512_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000253
Paul Bakker33b43f12013-08-20 11:48:36 +0200254 key_len = unhexify( key_str, hex_key_string );
255 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000256
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200257 /* Test the all-in-one interface */
258 memset(hash_str, 0x00, sizeof hash_str);
259 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +0000260
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200261 sha512_hmac( key_str, key_len, src_str, src_len, output, 0 );
262
263 hexify( hash_str, output, sizeof output );
264 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
265
266 /* Also test the "streaming" interface */
267 memset( hash_str, 0x00, sizeof hash_str );
268 memset( output, 0x00, sizeof output );
269 memset( &ctx, 0x00, sizeof ctx );
270
271 sha512_hmac_starts( &ctx, key_str, key_len, 0 );
272 sha512_hmac_update( &ctx, src_str, 0 );
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_update( &ctx, src_str + src_len, 0 );
276 sha512_hmac_finish( &ctx, output );
277
278 hexify( hash_str, output, sizeof output );
279 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
280
281 /* Again, to test hmac_reset() */
282 memset( hash_str, 0x00, sizeof hash_str );
283 memset( output, 0x00, sizeof output );
284
285 sha512_hmac_reset( &ctx );
286 sha512_hmac_update( &ctx, src_str, src_len / 2 );
287 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
288 sha512_hmac_finish( &ctx, output );
289
290 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200291 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker14e8be42014-06-26 12:25:06 +0200292
293 sha512_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000294}
Paul Bakker33b43f12013-08-20 11:48:36 +0200295/* END_CASE */