blob: 759d3a6a3ecb25fcb8f57b8f3c0f41e6bf64edb3 [file] [log] [blame]
Janos Follath8a49a012016-02-12 13:18:20 +00001/* BEGIN_HEADER */
2#include "mbedtls/rsa.h"
3#include "mbedtls/md.h"
4/* END_HEADER */
5
6/* BEGIN_DEPENDENCIES
7 * depends_on:MBEDTLS_PKCS1_V15:MBEDTLS_RSA_C:MBEDTLS_SHA1_C
8 * END_DEPENDENCIES
9 */
10
11/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +010012void pkcs1_rsaes_v15_encrypt( int mod, int radix_N, char * input_N,
13 int radix_E, char * input_E, int hash,
Azim Khan5fcca462018-06-29 11:05:32 +010014 data_t * message_str, data_t * rnd_buf,
15 data_t * result_hex_str, int result )
Janos Follath8a49a012016-02-12 13:18:20 +000016{
Ron Eldor3adb9812018-11-25 15:54:52 +020017 unsigned char output[128];
Janos Follath8a49a012016-02-12 13:18:20 +000018 mbedtls_rsa_context ctx;
Janos Follath8a49a012016-02-12 13:18:20 +000019 rnd_buf_info info;
Hanno Becker6d43f9e2017-08-23 06:35:17 +010020 mbedtls_mpi N, E;
Janos Follath8a49a012016-02-12 13:18:20 +000021
Azim Khand30ca132017-06-09 04:32:58 +010022 info.buf = rnd_buf->x;
23 info.length = rnd_buf->len;
Janos Follath8a49a012016-02-12 13:18:20 +000024
Hanno Becker6d43f9e2017-08-23 06:35:17 +010025 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000026 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Ron Eldor3adb9812018-11-25 15:54:52 +020027 memset( output, 0x00, sizeof( output ) );
Janos Follath8a49a012016-02-12 13:18:20 +000028
Hanno Becker6d43f9e2017-08-23 06:35:17 +010029 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
30 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
31 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
32 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Janos Follath8a49a012016-02-12 13:18:20 +000033 TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
34
Janos Follath8a49a012016-02-12 13:18:20 +000035
Azim Khand30ca132017-06-09 04:32:58 +010036 TEST_ASSERT( mbedtls_rsa_pkcs1_encrypt( &ctx, &rnd_buffer_rand, &info, MBEDTLS_RSA_PUBLIC, message_str->len, message_str->x, output ) == result );
Janos Follath8a49a012016-02-12 13:18:20 +000037 if( result == 0 )
38 {
Ronald Cron9fde3532020-06-10 11:42:32 +020039 TEST_ASSERT( mbedtls_test_hexcmp( output, result_hex_str->x,
40 ctx.len, result_hex_str->len ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000041 }
42
43exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +010044 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000045 mbedtls_rsa_free( &ctx );
46}
47/* END_CASE */
48
49/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +010050void pkcs1_rsaes_v15_decrypt( int mod, int radix_P, char * input_P,
51 int radix_Q, char * input_Q, int radix_N,
52 char * input_N, int radix_E, char * input_E,
Azim Khan5fcca462018-06-29 11:05:32 +010053 int hash, data_t * result_hex_str,
54 char * seed, data_t * message_str,
Azim Khanf1aaec92017-05-30 14:23:15 +010055 int result )
Janos Follath8a49a012016-02-12 13:18:20 +000056{
Ron Eldor3adb9812018-11-25 15:54:52 +020057 unsigned char output[128];
Janos Follath8a49a012016-02-12 13:18:20 +000058 mbedtls_rsa_context ctx;
Janos Follath8a49a012016-02-12 13:18:20 +000059 size_t output_len;
60 rnd_pseudo_info rnd_info;
Hanno Becker6d43f9e2017-08-23 06:35:17 +010061 mbedtls_mpi N, P, Q, E;
Janos Follath8a49a012016-02-12 13:18:20 +000062 ((void) seed);
63
Hanno Becker6d43f9e2017-08-23 06:35:17 +010064 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
65 mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000066 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
67
Ron Eldor3adb9812018-11-25 15:54:52 +020068 memset( output, 0x00, sizeof( output ) );
Janos Follath8a49a012016-02-12 13:18:20 +000069 memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) );
70
Hanno Becker6d43f9e2017-08-23 06:35:17 +010071 TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
72 TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
73 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
74 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000075
Hanno Becker6d43f9e2017-08-23 06:35:17 +010076 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
77 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Hanno Becker7f25f852017-10-10 16:56:22 +010078 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000079 TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
80
Janos Follath8a49a012016-02-12 13:18:20 +000081
Azim Khand30ca132017-06-09 04:32:58 +010082 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, &rnd_pseudo_rand, &rnd_info, MBEDTLS_RSA_PRIVATE, &output_len, message_str->x, output, 1000 ) == result );
Janos Follath8a49a012016-02-12 13:18:20 +000083 if( result == 0 )
84 {
Ronald Cron9fde3532020-06-10 11:42:32 +020085 TEST_ASSERT( mbedtls_test_hexcmp( output, result_hex_str->x,
86 output_len,
87 result_hex_str->len) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000088 }
89
90exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +010091 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
92 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000093 mbedtls_rsa_free( &ctx );
94}
95/* END_CASE */
96
Janos Follathe6aef9f2016-03-16 16:39:41 +000097/* BEGIN_CASE */
Gilles Peskine695a3462018-10-05 18:15:25 +020098void pkcs1_v15_decode( int mode,
99 data_t *input,
100 int expected_plaintext_length_arg,
101 int output_size_arg,
102 int expected_result )
103{
104 size_t expected_plaintext_length = expected_plaintext_length_arg;
105 size_t output_size = output_size_arg;
106 rnd_pseudo_info rnd_info;
107 mbedtls_mpi Nmpi, Empi, Pmpi, Qmpi;
108 mbedtls_rsa_context ctx;
109 static unsigned char N[128] = {
110 0xc4, 0x79, 0x4c, 0x6d, 0xb2, 0xe9, 0xdf, 0xc5,
111 0xe5, 0xd7, 0x55, 0x4b, 0xfb, 0x6c, 0x2e, 0xec,
112 0x84, 0xd0, 0x88, 0x12, 0xaf, 0xbf, 0xb4, 0xf5,
113 0x47, 0x3c, 0x7e, 0x92, 0x4c, 0x58, 0xc8, 0x73,
114 0xfe, 0x8f, 0x2b, 0x8f, 0x8e, 0xc8, 0x5c, 0xf5,
115 0x05, 0xeb, 0xfb, 0x0d, 0x7b, 0x2a, 0x93, 0xde,
116 0x15, 0x0d, 0xc8, 0x13, 0xcf, 0xd2, 0x6f, 0x0d,
117 0x9d, 0xad, 0x30, 0xe5, 0x70, 0x20, 0x92, 0x9e,
118 0xb3, 0x6b, 0xba, 0x5c, 0x50, 0x0f, 0xc3, 0xb2,
119 0x7e, 0x64, 0x07, 0x94, 0x7e, 0xc9, 0x4e, 0xc1,
120 0x65, 0x04, 0xaf, 0xb3, 0x9f, 0xde, 0xa8, 0x46,
121 0xfa, 0x6c, 0xf3, 0x03, 0xaf, 0x1c, 0x1b, 0xec,
122 0x75, 0x44, 0x66, 0x77, 0xc9, 0xde, 0x51, 0x33,
123 0x64, 0x27, 0xb0, 0xd4, 0x8d, 0x31, 0x6a, 0x11,
124 0x27, 0x3c, 0x99, 0xd4, 0x22, 0xc0, 0x9d, 0x12,
125 0x01, 0xc7, 0x4a, 0x73, 0xac, 0xbf, 0xc2, 0xbb
126 };
127 static unsigned char E[1] = { 0x03 };
128 static unsigned char P[64] = {
129 0xe5, 0x53, 0x1f, 0x88, 0x51, 0xee, 0x59, 0xf8,
130 0xc1, 0xe4, 0xcc, 0x5b, 0xb3, 0x75, 0x8d, 0xc8,
131 0xe8, 0x95, 0x2f, 0xd0, 0xef, 0x37, 0xb4, 0xcd,
132 0xd3, 0x9e, 0x48, 0x8b, 0x81, 0x58, 0x60, 0xb9,
133 0x27, 0x1d, 0xb6, 0x28, 0x92, 0x64, 0xa3, 0xa5,
134 0x64, 0xbd, 0xcc, 0x53, 0x68, 0xdd, 0x3e, 0x55,
135 0xea, 0x9d, 0x5e, 0xcd, 0x1f, 0x96, 0x87, 0xf1,
136 0x29, 0x75, 0x92, 0x70, 0x8f, 0x28, 0xfb, 0x2b
137 };
138 static unsigned char Q[64] = {
139 0xdb, 0x53, 0xef, 0x74, 0x61, 0xb4, 0x20, 0x3b,
140 0x3b, 0x87, 0x76, 0x75, 0x81, 0x56, 0x11, 0x03,
141 0x59, 0x31, 0xe3, 0x38, 0x4b, 0x8c, 0x7a, 0x9c,
142 0x05, 0xd6, 0x7f, 0x1e, 0x5e, 0x60, 0xf0, 0x4e,
143 0x0b, 0xdc, 0x34, 0x54, 0x1c, 0x2e, 0x90, 0x83,
144 0x14, 0xef, 0xc0, 0x96, 0x5c, 0x30, 0x10, 0xcc,
145 0xc1, 0xba, 0xa0, 0x54, 0x3f, 0x96, 0x24, 0xca,
146 0xa3, 0xfb, 0x55, 0xbc, 0x71, 0x29, 0x4e, 0xb1
147 };
148 unsigned char original[128];
149 unsigned char intermediate[128];
150 static unsigned char default_content[128] = {
151 /* A randomly generated pattern. */
152 0x4c, 0x27, 0x54, 0xa0, 0xce, 0x0d, 0x09, 0x4a,
153 0x1c, 0x38, 0x8e, 0x2d, 0xa3, 0xc4, 0xe0, 0x19,
154 0x4c, 0x99, 0xb2, 0xbf, 0xe6, 0x65, 0x7e, 0x58,
155 0xd7, 0xb6, 0x8a, 0x05, 0x2f, 0xa5, 0xec, 0xa4,
156 0x35, 0xad, 0x10, 0x36, 0xff, 0x0d, 0x08, 0x50,
157 0x74, 0x47, 0xc9, 0x9c, 0x4a, 0xe7, 0xfd, 0xfa,
158 0x83, 0x5f, 0x14, 0x5a, 0x1e, 0xe7, 0x35, 0x08,
159 0xad, 0xf7, 0x0d, 0x86, 0xdf, 0xb8, 0xd4, 0xcf,
160 0x32, 0xb9, 0x5c, 0xbe, 0xa3, 0xd2, 0x89, 0x70,
161 0x7b, 0xc6, 0x48, 0x7e, 0x58, 0x4d, 0xf3, 0xef,
162 0x34, 0xb7, 0x57, 0x54, 0x79, 0xc5, 0x8e, 0x0a,
163 0xa3, 0xbf, 0x6d, 0x42, 0x83, 0x25, 0x13, 0xa2,
164 0x95, 0xc0, 0x0d, 0x32, 0xec, 0x77, 0x91, 0x2b,
165 0x68, 0xb6, 0x8c, 0x79, 0x15, 0xfb, 0x94, 0xde,
166 0xb9, 0x2b, 0x94, 0xb3, 0x28, 0x23, 0x86, 0x3d,
167 0x37, 0x00, 0xe6, 0xf1, 0x1f, 0x4e, 0xd4, 0x42
168 };
169 unsigned char final[128];
170 size_t output_length = 0x7EA0;
171
172 memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) );
173 mbedtls_mpi_init( &Nmpi ); mbedtls_mpi_init( &Empi );
174 mbedtls_mpi_init( &Pmpi ); mbedtls_mpi_init( &Qmpi );
175 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, 0 );
176
177 TEST_ASSERT( mbedtls_mpi_read_binary( &Nmpi, N, sizeof( N ) ) == 0 );
178 TEST_ASSERT( mbedtls_mpi_read_binary( &Empi, E, sizeof( E ) ) == 0 );
179 TEST_ASSERT( mbedtls_mpi_read_binary( &Pmpi, P, sizeof( P ) ) == 0 );
180 TEST_ASSERT( mbedtls_mpi_read_binary( &Qmpi, Q, sizeof( Q ) ) == 0 );
181
182 TEST_ASSERT( mbedtls_rsa_import( &ctx, &Nmpi, &Pmpi, &Qmpi,
183 NULL, &Empi ) == 0 );
184 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
185
186 TEST_ASSERT( input->len <= sizeof( N ) );
187 memcpy( original, input->x, input->len );
188 memset( original + input->len, 'd', sizeof( original ) - input->len );
189 if( mode == MBEDTLS_RSA_PRIVATE )
190 TEST_ASSERT( mbedtls_rsa_public( &ctx, original, intermediate ) == 0 );
191 else
192 TEST_ASSERT( mbedtls_rsa_private( &ctx, &rnd_pseudo_rand, &rnd_info,
193 original, intermediate ) == 0 );
194
195 memcpy( final, default_content, sizeof( final ) );
196 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx,
197 &rnd_pseudo_rand, &rnd_info,
198 mode,
199 &output_length,
200 intermediate,
201 final,
202 output_size ) == expected_result );
203 if( expected_result == 0 )
204 {
205 TEST_ASSERT( output_length == expected_plaintext_length );
206 TEST_ASSERT( memcmp( original + sizeof( N ) - output_length,
207 final,
208 output_length ) == 0 );
209 }
210 else if( expected_result == MBEDTLS_ERR_RSA_INVALID_PADDING ||
211 expected_result == MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE )
212 {
213 size_t max_payload_length =
214 output_size > sizeof( N ) - 11 ? sizeof( N ) - 11 : output_size;
215 size_t i;
216 size_t count = 0;
217
218#if !defined(MBEDTLS_RSA_ALT)
219 /* Check that the output in invalid cases is what the default
220 * implementation currently does. Alternative implementations
221 * may produce different output, so we only perform these precise
222 * checks when using the default implementation. */
223 TEST_ASSERT( output_length == max_payload_length );
224 for( i = 0; i < max_payload_length; i++ )
225 TEST_ASSERT( final[i] == 0 );
226#endif
227 /* Even in alternative implementations, the outputs must have
228 * changed, otherwise it indicates at least a timing vulnerability
229 * because no write to the outputs is performed in the bad case. */
230 TEST_ASSERT( output_length != 0x7EA0 );
231 for( i = 0; i < max_payload_length; i++ )
232 count += ( final[i] == default_content[i] );
233 /* If more than 16 bytes are unchanged in final, that's evidence
234 * that final wasn't overwritten. */
235 TEST_ASSERT( count < 16 );
236 }
237
238exit:
239 mbedtls_mpi_free( &Nmpi ); mbedtls_mpi_free( &Empi );
240 mbedtls_mpi_free( &Pmpi ); mbedtls_mpi_free( &Qmpi );
241 mbedtls_rsa_free( &ctx );
242}
243/* END_CASE */
244
245/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100246void pkcs1_rsassa_v15_sign( int mod, int radix_P, char * input_P, int radix_Q,
247 char * input_Q, int radix_N, char * input_N,
248 int radix_E, char * input_E, int digest, int hash,
Azim Khan5fcca462018-06-29 11:05:32 +0100249 data_t * message_str, data_t * rnd_buf,
250 data_t * result_hex_str, int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000251{
Ron Eldor3adb9812018-11-25 15:54:52 +0200252 unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
253 unsigned char output[128];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000254 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100255 mbedtls_mpi N, P, Q, E;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000256 rnd_buf_info info;
257
Azim Khand30ca132017-06-09 04:32:58 +0100258 info.buf = rnd_buf->x;
259 info.length = rnd_buf->len;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000260
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100261 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
262 mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000263 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
264
Ron Eldor3adb9812018-11-25 15:54:52 +0200265 memset( hash_result, 0x00, sizeof( hash_result ) );
266 memset( output, 0x00, sizeof( output ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000267
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100268 TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
269 TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
270 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
271 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000272
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100273 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
274 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Hanno Becker7f25f852017-10-10 16:56:22 +0100275 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000276 TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
277
Janos Follathe6aef9f2016-03-16 16:39:41 +0000278
279 if( mbedtls_md_info_from_type( digest ) != NULL )
Azim Khand30ca132017-06-09 04:32:58 +0100280 TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000281
282 TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &rnd_buffer_rand, &info, MBEDTLS_RSA_PRIVATE, digest, 0, hash_result, output ) == result );
283 if( result == 0 )
284 {
Janos Follathe6aef9f2016-03-16 16:39:41 +0000285
Ronald Cron9fde3532020-06-10 11:42:32 +0200286 TEST_ASSERT( mbedtls_test_hexcmp( output, result_hex_str->x,
287 ctx.len, result_hex_str->len ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000288 }
289
290exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100291 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
292 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000293 mbedtls_rsa_free( &ctx );
294}
295/* END_CASE */
296
297/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100298void pkcs1_rsassa_v15_verify( int mod, int radix_N, char * input_N,
299 int radix_E, char * input_E, int digest,
Azim Khan5fcca462018-06-29 11:05:32 +0100300 int hash, data_t * message_str, char * salt,
301 data_t * result_str, int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000302{
Ron Eldor3adb9812018-11-25 15:54:52 +0200303 unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000304 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100305 mbedtls_mpi N, E;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000306 ((void) salt);
307
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100308 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000309 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Ron Eldor3adb9812018-11-25 15:54:52 +0200310 memset( hash_result, 0x00, sizeof( hash_result ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000311
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100312 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
313 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
314 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
315 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000316 TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
317
Janos Follathe6aef9f2016-03-16 16:39:41 +0000318
319 if( mbedtls_md_info_from_type( digest ) != NULL )
Azim Khand30ca132017-06-09 04:32:58 +0100320 TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000321
Azim Khand30ca132017-06-09 04:32:58 +0100322 TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, digest, 0, hash_result, result_str->x ) == result );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000323
324exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100325 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000326 mbedtls_rsa_free( &ctx );
327}
328/* END_CASE */