blob: 502df4533e763678fecff4e489f2cb9eb3df2c10 [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Paul Bakker17373852011-01-06 14:20:01 +00002#include <polarssl/md.h>
Paul Bakker33b43f12013-08-20 11:48:36 +02003/* END_HEADER */
Paul Bakker17373852011-01-06 14:20:01 +00004
Paul Bakker33b43f12013-08-20 11:48:36 +02005/* BEGIN_DEPENDENCIES
6 * depends_on:POLARSSL_MD_C
7 * END_DEPENDENCIES
8 */
Paul Bakker5690efc2011-05-26 13:16:06 +00009
Paul Bakker33b43f12013-08-20 11:48:36 +020010/* BEGIN_CASE */
11void md_text( char *text_md_name, char *text_src_string, char *hex_hash_string )
Paul Bakker17373852011-01-06 14:20:01 +000012{
13 char md_name[100];
14 unsigned char src_str[1000];
15 unsigned char hash_str[1000];
16 unsigned char output[100];
17 const md_info_t *md_info = NULL;
18
19 memset(md_name, 0x00, 100);
20 memset(src_str, 0x00, 1000);
21 memset(hash_str, 0x00, 1000);
22 memset(output, 0x00, 100);
23
Paul Bakker33b43f12013-08-20 11:48:36 +020024 strcpy( (char *) src_str, text_src_string );
Paul Bakker17373852011-01-06 14:20:01 +000025
Paul Bakker33b43f12013-08-20 11:48:36 +020026 strncpy( (char *) md_name, text_md_name, 100 );
Paul Bakker17373852011-01-06 14:20:01 +000027 md_info = md_info_from_string(md_name);
28 TEST_ASSERT( md_info != NULL );
29
30 TEST_ASSERT ( 0 == md( md_info, src_str, strlen( (char *) src_str ), output ) );
31 hexify( hash_str, output, md_get_size(md_info) );
32
Paul Bakker33b43f12013-08-20 11:48:36 +020033 TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
Paul Bakker17373852011-01-06 14:20:01 +000034}
Paul Bakker33b43f12013-08-20 11:48:36 +020035/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +000036
Paul Bakker33b43f12013-08-20 11:48:36 +020037/* BEGIN_CASE */
38void md_hex( char *text_md_name, char *hex_src_string, char *hex_hash_string )
Paul Bakker17373852011-01-06 14:20:01 +000039{
40 char md_name[100];
41 unsigned char src_str[10000];
42 unsigned char hash_str[10000];
43 unsigned char output[100];
44 int src_len;
45 const md_info_t *md_info = NULL;
46
47 memset(md_name, 0x00, 100);
48 memset(src_str, 0x00, 10000);
49 memset(hash_str, 0x00, 10000);
50 memset(output, 0x00, 100);
51
Paul Bakker33b43f12013-08-20 11:48:36 +020052 strncpy( (char *) md_name, text_md_name, 100 );
Paul Bakker17373852011-01-06 14:20:01 +000053 md_info = md_info_from_string(md_name);
54 TEST_ASSERT( md_info != NULL );
55
Paul Bakker33b43f12013-08-20 11:48:36 +020056 src_len = unhexify( src_str, hex_src_string );
Paul Bakker17373852011-01-06 14:20:01 +000057 TEST_ASSERT ( 0 == md( md_info, src_str, src_len, output ) );
58
59 hexify( hash_str, output, md_get_size(md_info) );
60
Paul Bakker33b43f12013-08-20 11:48:36 +020061 TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
Paul Bakker17373852011-01-06 14:20:01 +000062}
Paul Bakker33b43f12013-08-20 11:48:36 +020063/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +000064
Paul Bakker33b43f12013-08-20 11:48:36 +020065/* BEGIN_CASE */
66void md_text_multi( char *text_md_name, char *text_src_string,
67 char *hex_hash_string )
Paul Bakker17373852011-01-06 14:20:01 +000068{
69 char md_name[100];
70 unsigned char src_str[1000];
71 unsigned char hash_str[1000];
72 unsigned char output[100];
73
74 const md_info_t *md_info = NULL;
75 md_context_t ctx = MD_CONTEXT_T_INIT;
76
77 memset(md_name, 0x00, 100);
78 memset(src_str, 0x00, 1000);
79 memset(hash_str, 0x00, 1000);
80 memset(output, 0x00, 100);
81
Paul Bakker33b43f12013-08-20 11:48:36 +020082 strcpy( (char *) src_str, text_src_string );
Paul Bakker17373852011-01-06 14:20:01 +000083
Paul Bakker33b43f12013-08-20 11:48:36 +020084 strncpy( (char *) md_name, text_md_name, 100 );
Paul Bakker17373852011-01-06 14:20:01 +000085 md_info = md_info_from_string(md_name);
86 TEST_ASSERT( md_info != NULL );
Paul Bakker562535d2011-01-20 16:42:01 +000087 TEST_ASSERT ( 0 == md_init_ctx( &ctx, md_info ) );
Paul Bakker17373852011-01-06 14:20:01 +000088
Paul Bakker562535d2011-01-20 16:42:01 +000089 TEST_ASSERT ( 0 == md_starts( &ctx ) );
Paul Bakker17373852011-01-06 14:20:01 +000090 TEST_ASSERT ( ctx.md_ctx != NULL );
91 TEST_ASSERT ( 0 == md_update( &ctx, src_str, strlen( (char *) src_str ) ) );
92 TEST_ASSERT ( 0 == md_finish( &ctx, output ) );
93 TEST_ASSERT ( 0 == md_free_ctx( &ctx ) );
94
95 hexify( hash_str, output, md_get_size(md_info) );
96
Paul Bakker33b43f12013-08-20 11:48:36 +020097 TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
Paul Bakker17373852011-01-06 14:20:01 +000098}
Paul Bakker33b43f12013-08-20 11:48:36 +020099/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000100
Paul Bakker33b43f12013-08-20 11:48:36 +0200101/* BEGIN_CASE */
102void md_hex_multi( char *text_md_name, char *hex_src_string,
103 char *hex_hash_string )
Paul Bakker17373852011-01-06 14:20:01 +0000104{
105 char md_name[100];
106 unsigned char src_str[10000];
107 unsigned char hash_str[10000];
108 unsigned char output[100];
109 int src_len;
110 const md_info_t *md_info = NULL;
111 md_context_t ctx = MD_CONTEXT_T_INIT;
112
113 memset(md_name, 0x00, 100);
114 memset(src_str, 0x00, 10000);
115 memset(hash_str, 0x00, 10000);
116 memset(output, 0x00, 100);
117
Paul Bakker33b43f12013-08-20 11:48:36 +0200118 strncpy( (char *) md_name, text_md_name, 100 );
Paul Bakker17373852011-01-06 14:20:01 +0000119 md_info = md_info_from_string(md_name);
120 TEST_ASSERT( md_info != NULL );
Paul Bakker562535d2011-01-20 16:42:01 +0000121 TEST_ASSERT ( 0 == md_init_ctx( &ctx, md_info ) );
Paul Bakker17373852011-01-06 14:20:01 +0000122
Paul Bakker33b43f12013-08-20 11:48:36 +0200123 src_len = unhexify( src_str, hex_src_string );
Paul Bakker17373852011-01-06 14:20:01 +0000124
Paul Bakker562535d2011-01-20 16:42:01 +0000125 TEST_ASSERT ( 0 == md_starts( &ctx ) );
Paul Bakker17373852011-01-06 14:20:01 +0000126 TEST_ASSERT ( ctx.md_ctx != NULL );
127 TEST_ASSERT ( 0 == md_update( &ctx, src_str, src_len ) );
128 TEST_ASSERT ( 0 == md_finish( &ctx, output ) );
129 TEST_ASSERT ( 0 == md_free_ctx( &ctx ) );
130
131 hexify( hash_str, output, md_get_size(md_info) );
132
Paul Bakker33b43f12013-08-20 11:48:36 +0200133 TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
Paul Bakker17373852011-01-06 14:20:01 +0000134}
Paul Bakker33b43f12013-08-20 11:48:36 +0200135/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000136
Paul Bakker33b43f12013-08-20 11:48:36 +0200137/* BEGIN_CASE */
138void md_hmac( char *text_md_name, int trunc_size, char *hex_key_string,
139 char *hex_src_string, char *hex_hash_string )
Paul Bakker17373852011-01-06 14:20:01 +0000140{
141 char md_name[100];
142 unsigned char src_str[10000];
143 unsigned char key_str[10000];
144 unsigned char hash_str[10000];
145 unsigned char output[100];
146 int key_len, src_len;
147 const md_info_t *md_info = NULL;
148
149 memset(md_name, 0x00, 100);
150 memset(src_str, 0x00, 10000);
151 memset(key_str, 0x00, 10000);
152 memset(hash_str, 0x00, 10000);
153 memset(output, 0x00, 100);
154
Paul Bakker33b43f12013-08-20 11:48:36 +0200155 strncpy( (char *) md_name, text_md_name, 100 );
Paul Bakker17373852011-01-06 14:20:01 +0000156 md_info = md_info_from_string( md_name );
157 TEST_ASSERT( md_info != NULL );
158
Paul Bakker33b43f12013-08-20 11:48:36 +0200159 key_len = unhexify( key_str, hex_key_string );
160 src_len = unhexify( src_str, hex_src_string );
Paul Bakker17373852011-01-06 14:20:01 +0000161
162 TEST_ASSERT ( md_hmac( md_info, key_str, key_len, src_str, src_len, output ) == 0 );
163 hexify( hash_str, output, md_get_size(md_info) );
164
Paul Bakker33b43f12013-08-20 11:48:36 +0200165 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Paul Bakker17373852011-01-06 14:20:01 +0000166}
Paul Bakker33b43f12013-08-20 11:48:36 +0200167/* END_CASE */
Paul Bakker17373852011-01-06 14:20:01 +0000168
Paul Bakker33b43f12013-08-20 11:48:36 +0200169/* BEGIN_CASE */
170void md_hmac_multi( char *text_md_name, int trunc_size, char *hex_key_string,
171 char *hex_src_string, char *hex_hash_string )
Paul Bakker17373852011-01-06 14:20:01 +0000172{
173 char md_name[100];
174 unsigned char src_str[10000];
175 unsigned char key_str[10000];
176 unsigned char hash_str[10000];
177 unsigned char output[100];
178 int key_len, src_len;
179 const md_info_t *md_info = NULL;
180 md_context_t ctx = MD_CONTEXT_T_INIT;
181
182 memset(md_name, 0x00, 100);
183 memset(src_str, 0x00, 10000);
184 memset(key_str, 0x00, 10000);
185 memset(hash_str, 0x00, 10000);
186 memset(output, 0x00, 100);
187
Paul Bakker33b43f12013-08-20 11:48:36 +0200188 strncpy( (char *) md_name, text_md_name, 100 );
Paul Bakker17373852011-01-06 14:20:01 +0000189 md_info = md_info_from_string( md_name );
190 TEST_ASSERT( md_info != NULL );
Paul Bakker562535d2011-01-20 16:42:01 +0000191 TEST_ASSERT ( 0 == md_init_ctx( &ctx, md_info ) );
Paul Bakker17373852011-01-06 14:20:01 +0000192
Paul Bakker33b43f12013-08-20 11:48:36 +0200193 key_len = unhexify( key_str, hex_key_string );
194 src_len = unhexify( src_str, hex_src_string );
Paul Bakker17373852011-01-06 14:20:01 +0000195
Paul Bakker562535d2011-01-20 16:42:01 +0000196 TEST_ASSERT ( 0 == md_hmac_starts( &ctx, key_str, key_len ) );
Paul Bakker17373852011-01-06 14:20:01 +0000197 TEST_ASSERT ( ctx.md_ctx != NULL );
198 TEST_ASSERT ( 0 == md_hmac_update( &ctx, src_str, src_len ) );
199 TEST_ASSERT ( 0 == md_hmac_finish( &ctx, output ) );
Manuel Pégourié-Gonnard59ba4e92014-03-29 14:43:44 +0100200
201 hexify( hash_str, output, md_get_size(md_info) );
202 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
203
204 /* Test again, for reset() */
205 memset(hash_str, 0x00, 10000);
206 memset(output, 0x00, 100);
207
208 TEST_ASSERT ( 0 == md_hmac_reset( &ctx ) );
209 TEST_ASSERT ( 0 == md_hmac_update( &ctx, src_str, src_len ) );
210 TEST_ASSERT ( 0 == md_hmac_finish( &ctx, output ) );
Paul Bakker17373852011-01-06 14:20:01 +0000211 TEST_ASSERT ( 0 == md_free_ctx( &ctx ) );
Paul Bakker33b43f12013-08-20 11:48:36 +0200212
Paul Bakker17373852011-01-06 14:20:01 +0000213 hexify( hash_str, output, md_get_size(md_info) );
Paul Bakker33b43f12013-08-20 11:48:36 +0200214 TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
Manuel Pégourié-Gonnard59ba4e92014-03-29 14:43:44 +0100215
216 TEST_ASSERT ( 0 == md_free_ctx( &ctx ) );
Paul Bakker17373852011-01-06 14:20:01 +0000217}
Paul Bakker33b43f12013-08-20 11:48:36 +0200218/* END_CASE */
Paul Bakker428b9ba2013-09-15 15:20:37 +0200219
220/* BEGIN_CASE depends_on:POLARSSL_FS_IO */
Paul Bakker33b43f12013-08-20 11:48:36 +0200221void md_file( char *text_md_name, char *filename, char *hex_hash_string )
Paul Bakker17373852011-01-06 14:20:01 +0000222{
223 char md_name[100];
224 unsigned char hash_str[1000];
225 unsigned char output[100];
226 const md_info_t *md_info = NULL;
227
228 memset(md_name, 0x00, 100);
229 memset(hash_str, 0x00, 1000);
230 memset(output, 0x00, 100);
231
Paul Bakker33b43f12013-08-20 11:48:36 +0200232 strncpy( (char *) md_name, text_md_name, 100 );
Paul Bakker17373852011-01-06 14:20:01 +0000233 md_info = md_info_from_string( md_name );
234 TEST_ASSERT( md_info != NULL );
235
Paul Bakker33b43f12013-08-20 11:48:36 +0200236 md_file( md_info, filename, output);
Paul Bakker17373852011-01-06 14:20:01 +0000237 hexify( hash_str, output, md_get_size(md_info) );
238
Paul Bakker33b43f12013-08-20 11:48:36 +0200239 TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
Paul Bakker17373852011-01-06 14:20:01 +0000240}
Paul Bakker33b43f12013-08-20 11:48:36 +0200241/* END_CASE */