blob: 54ad02f470cc7796026a793a666b876482a7f077 [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
Paul Bakkerbd51b262014-07-10 15:26:12 +020061exit:
Paul Bakker14e8be42014-06-26 12:25:06 +020062 sha1_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000063}
Paul Bakker33b43f12013-08-20 11:48:36 +020064/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +000065
Paul Bakker68a4fce2013-08-20 12:42:31 +020066/* BEGIN_CASE depends_on:POLARSSL_SHA256_C */
Paul Bakker33b43f12013-08-20 11:48:36 +020067void sha224_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
68 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +000069{
70 unsigned char src_str[10000];
71 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020072 unsigned char hash_str[57];
73 unsigned char output[28];
Paul Bakker69998dd2009-07-11 19:15:20 +000074 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020075 sha256_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +000076
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020077 memset(src_str, 0x00, sizeof src_str);
78 memset(key_str, 0x00, sizeof key_str);
Paul Bakker14e8be42014-06-26 12:25:06 +020079 sha256_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +000080
Paul Bakker33b43f12013-08-20 11:48:36 +020081 key_len = unhexify( key_str, hex_key_string );
82 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +000083
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020084 /* Test the all-in-one interface */
85 memset(hash_str, 0x00, sizeof hash_str);
86 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +000087
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +020088 sha256_hmac( key_str, key_len, src_str, src_len, output, 1 );
89
90 hexify( hash_str, output, sizeof output );
91 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
92
93 /* Also test the "streaming" interface */
94 memset( hash_str, 0x00, sizeof hash_str );
95 memset( output, 0x00, sizeof output );
96 memset( &ctx, 0x00, sizeof ctx );
97
98 sha256_hmac_starts( &ctx, key_str, key_len, 1 );
99 sha256_hmac_update( &ctx, src_str, 0 );
100 sha256_hmac_update( &ctx, src_str, src_len / 2 );
101 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
102 sha256_hmac_update( &ctx, src_str + src_len, 0 );
103 sha256_hmac_finish( &ctx, output );
104
105 hexify( hash_str, output, sizeof output );
106 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
107
108 /* Again, to test hmac_reset() */
109 memset( hash_str, 0x00, sizeof hash_str );
110 memset( output, 0x00, sizeof output );
111
112 sha256_hmac_reset( &ctx );
113 sha256_hmac_update( &ctx, src_str, src_len / 2 );
114 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
115 sha256_hmac_finish( &ctx, output );
116
117 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200118 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker14e8be42014-06-26 12:25:06 +0200119
Paul Bakkerbd51b262014-07-10 15:26:12 +0200120exit:
Paul Bakker14e8be42014-06-26 12:25:06 +0200121 sha256_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000122}
Paul Bakker33b43f12013-08-20 11:48:36 +0200123/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000124
Paul Bakker68a4fce2013-08-20 12:42:31 +0200125/* BEGIN_CASE depends_on:POLARSSL_SHA256_C */
Paul Bakker33b43f12013-08-20 11:48:36 +0200126void sha256_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
127 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +0000128{
129 unsigned char src_str[10000];
130 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200131 unsigned char hash_str[65];
132 unsigned char output[32];
Paul Bakker69998dd2009-07-11 19:15:20 +0000133 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200134 sha256_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000135
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200136 memset(src_str, 0x00, sizeof src_str);
137 memset(key_str, 0x00, sizeof key_str);
Paul Bakker14e8be42014-06-26 12:25:06 +0200138 sha256_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000139
Paul Bakker33b43f12013-08-20 11:48:36 +0200140 key_len = unhexify( key_str, hex_key_string );
141 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000142
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200143 /* Test the all-in-one interface */
144 memset(hash_str, 0x00, sizeof hash_str);
145 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +0000146
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200147 sha256_hmac( key_str, key_len, src_str, src_len, output, 0 );
148
149 hexify( hash_str, output, sizeof output );
150 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
151
152 /* Also test the "streaming" interface */
153 memset( hash_str, 0x00, sizeof hash_str );
154 memset( output, 0x00, sizeof output );
155 memset( &ctx, 0x00, sizeof ctx );
156
157 sha256_hmac_starts( &ctx, key_str, key_len, 0 );
158 sha256_hmac_update( &ctx, src_str, 0 );
159 sha256_hmac_update( &ctx, src_str, src_len / 2 );
160 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
161 sha256_hmac_update( &ctx, src_str + src_len, 0 );
162 sha256_hmac_finish( &ctx, output );
163
164 hexify( hash_str, output, sizeof output );
165 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
166
167 /* Again, to test hmac_reset() */
168 memset( hash_str, 0x00, sizeof hash_str );
169 memset( output, 0x00, sizeof output );
170
171 sha256_hmac_reset( &ctx );
172 sha256_hmac_update( &ctx, src_str, src_len / 2 );
173 sha256_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
174 sha256_hmac_finish( &ctx, output );
175
176 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200177 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker14e8be42014-06-26 12:25:06 +0200178
Paul Bakkerbd51b262014-07-10 15:26:12 +0200179exit:
Paul Bakker14e8be42014-06-26 12:25:06 +0200180 sha256_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000181}
Paul Bakker33b43f12013-08-20 11:48:36 +0200182/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000183
Paul Bakker68a4fce2013-08-20 12:42:31 +0200184/* BEGIN_CASE depends_on:POLARSSL_SHA512_C */
Paul Bakker33b43f12013-08-20 11:48:36 +0200185void sha384_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
186 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +0000187{
188 unsigned char src_str[10000];
189 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200190 unsigned char hash_str[97];
191 unsigned char output[48];
Paul Bakker69998dd2009-07-11 19:15:20 +0000192 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200193 sha512_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000194
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200195 memset(src_str, 0x00, sizeof src_str);
196 memset(key_str, 0x00, sizeof key_str);
Paul Bakker14e8be42014-06-26 12:25:06 +0200197 sha512_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000198
Paul Bakker33b43f12013-08-20 11:48:36 +0200199 key_len = unhexify( key_str, hex_key_string );
200 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000201
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200202 /* Test the all-in-one interface */
203 memset(hash_str, 0x00, sizeof hash_str);
204 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +0000205
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200206 sha512_hmac( key_str, key_len, src_str, src_len, output, 1 );
207
208 hexify( hash_str, output, sizeof output );
209 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
210
211 /* Also test the "streaming" interface */
212 memset( hash_str, 0x00, sizeof hash_str );
213 memset( output, 0x00, sizeof output );
214 memset( &ctx, 0x00, sizeof ctx );
215
216 sha512_hmac_starts( &ctx, key_str, key_len, 1 );
217 sha512_hmac_update( &ctx, src_str, 0 );
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_update( &ctx, src_str + src_len, 0 );
221 sha512_hmac_finish( &ctx, output );
222
223 hexify( hash_str, output, sizeof output );
224 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
225
226 /* Again, to test hmac_reset() */
227 memset( hash_str, 0x00, sizeof hash_str );
228 memset( output, 0x00, sizeof output );
229
230 sha512_hmac_reset( &ctx );
231 sha512_hmac_update( &ctx, src_str, src_len / 2 );
232 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
233 sha512_hmac_finish( &ctx, output );
234
235 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200236 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker14e8be42014-06-26 12:25:06 +0200237
Paul Bakkerbd51b262014-07-10 15:26:12 +0200238exit:
Paul Bakker14e8be42014-06-26 12:25:06 +0200239 sha512_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000240}
Paul Bakker33b43f12013-08-20 11:48:36 +0200241/* END_CASE */
Paul Bakker367dae42009-06-28 21:50:27 +0000242
Paul Bakker68a4fce2013-08-20 12:42:31 +0200243/* BEGIN_CASE depends_on:POLARSSL_SHA512_C */
Paul Bakker33b43f12013-08-20 11:48:36 +0200244void sha512_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
245 char *hex_hash_string)
Paul Bakker367dae42009-06-28 21:50:27 +0000246{
247 unsigned char src_str[10000];
248 unsigned char key_str[10000];
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200249 unsigned char hash_str[129];
250 unsigned char output[64];
Paul Bakker69998dd2009-07-11 19:15:20 +0000251 int key_len, src_len;
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200252 sha512_context ctx;
Paul Bakker367dae42009-06-28 21:50:27 +0000253
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200254 memset(src_str, 0x00, sizeof src_str);
255 memset(key_str, 0x00, sizeof key_str);
Paul Bakker14e8be42014-06-26 12:25:06 +0200256 sha512_init( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000257
Paul Bakker33b43f12013-08-20 11:48:36 +0200258 key_len = unhexify( key_str, hex_key_string );
259 src_len = unhexify( src_str, hex_src_string );
Paul Bakker367dae42009-06-28 21:50:27 +0000260
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200261 /* Test the all-in-one interface */
262 memset(hash_str, 0x00, sizeof hash_str);
263 memset(output, 0x00, sizeof output);
Paul Bakker367dae42009-06-28 21:50:27 +0000264
Manuel Pégourié-Gonnardf8708dd2014-04-02 17:17:19 +0200265 sha512_hmac( key_str, key_len, src_str, src_len, output, 0 );
266
267 hexify( hash_str, output, sizeof output );
268 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
269
270 /* Also test the "streaming" interface */
271 memset( hash_str, 0x00, sizeof hash_str );
272 memset( output, 0x00, sizeof output );
273 memset( &ctx, 0x00, sizeof ctx );
274
275 sha512_hmac_starts( &ctx, key_str, key_len, 0 );
276 sha512_hmac_update( &ctx, src_str, 0 );
277 sha512_hmac_update( &ctx, src_str, src_len / 2 );
278 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
279 sha512_hmac_update( &ctx, src_str + src_len, 0 );
280 sha512_hmac_finish( &ctx, output );
281
282 hexify( hash_str, output, sizeof output );
283 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
284
285 /* Again, to test hmac_reset() */
286 memset( hash_str, 0x00, sizeof hash_str );
287 memset( output, 0x00, sizeof output );
288
289 sha512_hmac_reset( &ctx );
290 sha512_hmac_update( &ctx, src_str, src_len / 2 );
291 sha512_hmac_update( &ctx, src_str + src_len / 2, src_len - src_len / 2 );
292 sha512_hmac_finish( &ctx, output );
293
294 hexify( hash_str, output, sizeof output );
Paul Bakker33b43f12013-08-20 11:48:36 +0200295 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker14e8be42014-06-26 12:25:06 +0200296
Paul Bakkerbd51b262014-07-10 15:26:12 +0200297exit:
Paul Bakker14e8be42014-06-26 12:25:06 +0200298 sha512_free( &ctx );
Paul Bakker367dae42009-06-28 21:50:27 +0000299}
Paul Bakker33b43f12013-08-20 11:48:36 +0200300/* END_CASE */