blob: 1f6597482b57d2f61200824daf86b477bae1813a [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 Eldor635888b2018-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 Eldor635888b2018-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
Gilles Peskine85a6dd42018-10-15 16:32:42 +020035 if( message_str->len == 0 )
36 message_str->x = NULL;
Azim Khand30ca132017-06-09 04:32:58 +010037 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 +000038 if( result == 0 )
39 {
Ronald Cronde70b162020-06-10 11:03:08 +020040 TEST_ASSERT( mbedtls_test_hexcmp( output, result_hex_str->x, 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 Eldor635888b2018-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 Eldor635888b2018-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
Gilles Peskine85a6dd42018-10-15 16:32:42 +020081 if( result_hex_str->len == 0 )
Janos Follath8a49a012016-02-12 13:18:20 +000082 {
Gilles Peskine85a6dd42018-10-15 16:32:42 +020083 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, &rnd_pseudo_rand, &rnd_info, MBEDTLS_RSA_PRIVATE, &output_len, message_str->x, NULL, 0 ) == result );
84 }
85 else
86 {
87 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, &rnd_pseudo_rand, &rnd_info, MBEDTLS_RSA_PRIVATE, &output_len, message_str->x, output, 1000 ) == result );
88 if( result == 0 )
89 {
Ronald Cronde70b162020-06-10 11:03:08 +020090 TEST_ASSERT( mbedtls_test_hexcmp( output, result_hex_str->x, output_len, result_hex_str->len) == 0 );
Gilles Peskine85a6dd42018-10-15 16:32:42 +020091 }
Janos Follath8a49a012016-02-12 13:18:20 +000092 }
93
94exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +010095 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
96 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000097 mbedtls_rsa_free( &ctx );
98}
99/* END_CASE */
100
Janos Follathe6aef9f2016-03-16 16:39:41 +0000101/* BEGIN_CASE */
Gilles Peskine695a3462018-10-05 18:15:25 +0200102void pkcs1_v15_decode( int mode,
103 data_t *input,
104 int expected_plaintext_length_arg,
105 int output_size_arg,
106 int expected_result )
107{
108 size_t expected_plaintext_length = expected_plaintext_length_arg;
109 size_t output_size = output_size_arg;
110 rnd_pseudo_info rnd_info;
111 mbedtls_mpi Nmpi, Empi, Pmpi, Qmpi;
112 mbedtls_rsa_context ctx;
113 static unsigned char N[128] = {
114 0xc4, 0x79, 0x4c, 0x6d, 0xb2, 0xe9, 0xdf, 0xc5,
115 0xe5, 0xd7, 0x55, 0x4b, 0xfb, 0x6c, 0x2e, 0xec,
116 0x84, 0xd0, 0x88, 0x12, 0xaf, 0xbf, 0xb4, 0xf5,
117 0x47, 0x3c, 0x7e, 0x92, 0x4c, 0x58, 0xc8, 0x73,
118 0xfe, 0x8f, 0x2b, 0x8f, 0x8e, 0xc8, 0x5c, 0xf5,
119 0x05, 0xeb, 0xfb, 0x0d, 0x7b, 0x2a, 0x93, 0xde,
120 0x15, 0x0d, 0xc8, 0x13, 0xcf, 0xd2, 0x6f, 0x0d,
121 0x9d, 0xad, 0x30, 0xe5, 0x70, 0x20, 0x92, 0x9e,
122 0xb3, 0x6b, 0xba, 0x5c, 0x50, 0x0f, 0xc3, 0xb2,
123 0x7e, 0x64, 0x07, 0x94, 0x7e, 0xc9, 0x4e, 0xc1,
124 0x65, 0x04, 0xaf, 0xb3, 0x9f, 0xde, 0xa8, 0x46,
125 0xfa, 0x6c, 0xf3, 0x03, 0xaf, 0x1c, 0x1b, 0xec,
126 0x75, 0x44, 0x66, 0x77, 0xc9, 0xde, 0x51, 0x33,
127 0x64, 0x27, 0xb0, 0xd4, 0x8d, 0x31, 0x6a, 0x11,
128 0x27, 0x3c, 0x99, 0xd4, 0x22, 0xc0, 0x9d, 0x12,
129 0x01, 0xc7, 0x4a, 0x73, 0xac, 0xbf, 0xc2, 0xbb
130 };
131 static unsigned char E[1] = { 0x03 };
132 static unsigned char P[64] = {
133 0xe5, 0x53, 0x1f, 0x88, 0x51, 0xee, 0x59, 0xf8,
134 0xc1, 0xe4, 0xcc, 0x5b, 0xb3, 0x75, 0x8d, 0xc8,
135 0xe8, 0x95, 0x2f, 0xd0, 0xef, 0x37, 0xb4, 0xcd,
136 0xd3, 0x9e, 0x48, 0x8b, 0x81, 0x58, 0x60, 0xb9,
137 0x27, 0x1d, 0xb6, 0x28, 0x92, 0x64, 0xa3, 0xa5,
138 0x64, 0xbd, 0xcc, 0x53, 0x68, 0xdd, 0x3e, 0x55,
139 0xea, 0x9d, 0x5e, 0xcd, 0x1f, 0x96, 0x87, 0xf1,
140 0x29, 0x75, 0x92, 0x70, 0x8f, 0x28, 0xfb, 0x2b
141 };
142 static unsigned char Q[64] = {
143 0xdb, 0x53, 0xef, 0x74, 0x61, 0xb4, 0x20, 0x3b,
144 0x3b, 0x87, 0x76, 0x75, 0x81, 0x56, 0x11, 0x03,
145 0x59, 0x31, 0xe3, 0x38, 0x4b, 0x8c, 0x7a, 0x9c,
146 0x05, 0xd6, 0x7f, 0x1e, 0x5e, 0x60, 0xf0, 0x4e,
147 0x0b, 0xdc, 0x34, 0x54, 0x1c, 0x2e, 0x90, 0x83,
148 0x14, 0xef, 0xc0, 0x96, 0x5c, 0x30, 0x10, 0xcc,
149 0xc1, 0xba, 0xa0, 0x54, 0x3f, 0x96, 0x24, 0xca,
150 0xa3, 0xfb, 0x55, 0xbc, 0x71, 0x29, 0x4e, 0xb1
151 };
152 unsigned char original[128];
153 unsigned char intermediate[128];
154 static unsigned char default_content[128] = {
155 /* A randomly generated pattern. */
156 0x4c, 0x27, 0x54, 0xa0, 0xce, 0x0d, 0x09, 0x4a,
157 0x1c, 0x38, 0x8e, 0x2d, 0xa3, 0xc4, 0xe0, 0x19,
158 0x4c, 0x99, 0xb2, 0xbf, 0xe6, 0x65, 0x7e, 0x58,
159 0xd7, 0xb6, 0x8a, 0x05, 0x2f, 0xa5, 0xec, 0xa4,
160 0x35, 0xad, 0x10, 0x36, 0xff, 0x0d, 0x08, 0x50,
161 0x74, 0x47, 0xc9, 0x9c, 0x4a, 0xe7, 0xfd, 0xfa,
162 0x83, 0x5f, 0x14, 0x5a, 0x1e, 0xe7, 0x35, 0x08,
163 0xad, 0xf7, 0x0d, 0x86, 0xdf, 0xb8, 0xd4, 0xcf,
164 0x32, 0xb9, 0x5c, 0xbe, 0xa3, 0xd2, 0x89, 0x70,
165 0x7b, 0xc6, 0x48, 0x7e, 0x58, 0x4d, 0xf3, 0xef,
166 0x34, 0xb7, 0x57, 0x54, 0x79, 0xc5, 0x8e, 0x0a,
167 0xa3, 0xbf, 0x6d, 0x42, 0x83, 0x25, 0x13, 0xa2,
168 0x95, 0xc0, 0x0d, 0x32, 0xec, 0x77, 0x91, 0x2b,
169 0x68, 0xb6, 0x8c, 0x79, 0x15, 0xfb, 0x94, 0xde,
170 0xb9, 0x2b, 0x94, 0xb3, 0x28, 0x23, 0x86, 0x3d,
171 0x37, 0x00, 0xe6, 0xf1, 0x1f, 0x4e, 0xd4, 0x42
172 };
173 unsigned char final[128];
174 size_t output_length = 0x7EA0;
175
176 memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) );
177 mbedtls_mpi_init( &Nmpi ); mbedtls_mpi_init( &Empi );
178 mbedtls_mpi_init( &Pmpi ); mbedtls_mpi_init( &Qmpi );
179 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, 0 );
180
181 TEST_ASSERT( mbedtls_mpi_read_binary( &Nmpi, N, sizeof( N ) ) == 0 );
182 TEST_ASSERT( mbedtls_mpi_read_binary( &Empi, E, sizeof( E ) ) == 0 );
183 TEST_ASSERT( mbedtls_mpi_read_binary( &Pmpi, P, sizeof( P ) ) == 0 );
184 TEST_ASSERT( mbedtls_mpi_read_binary( &Qmpi, Q, sizeof( Q ) ) == 0 );
185
186 TEST_ASSERT( mbedtls_rsa_import( &ctx, &Nmpi, &Pmpi, &Qmpi,
187 NULL, &Empi ) == 0 );
188 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
189
190 TEST_ASSERT( input->len <= sizeof( N ) );
191 memcpy( original, input->x, input->len );
192 memset( original + input->len, 'd', sizeof( original ) - input->len );
193 if( mode == MBEDTLS_RSA_PRIVATE )
194 TEST_ASSERT( mbedtls_rsa_public( &ctx, original, intermediate ) == 0 );
195 else
196 TEST_ASSERT( mbedtls_rsa_private( &ctx, &rnd_pseudo_rand, &rnd_info,
197 original, intermediate ) == 0 );
198
199 memcpy( final, default_content, sizeof( final ) );
200 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx,
201 &rnd_pseudo_rand, &rnd_info,
202 mode,
203 &output_length,
204 intermediate,
205 final,
206 output_size ) == expected_result );
207 if( expected_result == 0 )
208 {
209 TEST_ASSERT( output_length == expected_plaintext_length );
210 TEST_ASSERT( memcmp( original + sizeof( N ) - output_length,
211 final,
212 output_length ) == 0 );
213 }
214 else if( expected_result == MBEDTLS_ERR_RSA_INVALID_PADDING ||
215 expected_result == MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE )
216 {
217 size_t max_payload_length =
218 output_size > sizeof( N ) - 11 ? sizeof( N ) - 11 : output_size;
219 size_t i;
220 size_t count = 0;
221
222#if !defined(MBEDTLS_RSA_ALT)
223 /* Check that the output in invalid cases is what the default
224 * implementation currently does. Alternative implementations
225 * may produce different output, so we only perform these precise
226 * checks when using the default implementation. */
227 TEST_ASSERT( output_length == max_payload_length );
228 for( i = 0; i < max_payload_length; i++ )
229 TEST_ASSERT( final[i] == 0 );
230#endif
231 /* Even in alternative implementations, the outputs must have
232 * changed, otherwise it indicates at least a timing vulnerability
233 * because no write to the outputs is performed in the bad case. */
234 TEST_ASSERT( output_length != 0x7EA0 );
235 for( i = 0; i < max_payload_length; i++ )
236 count += ( final[i] == default_content[i] );
237 /* If more than 16 bytes are unchanged in final, that's evidence
238 * that final wasn't overwritten. */
239 TEST_ASSERT( count < 16 );
240 }
241
242exit:
243 mbedtls_mpi_free( &Nmpi ); mbedtls_mpi_free( &Empi );
244 mbedtls_mpi_free( &Pmpi ); mbedtls_mpi_free( &Qmpi );
245 mbedtls_rsa_free( &ctx );
246}
247/* END_CASE */
248
249/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100250void pkcs1_rsassa_v15_sign( int mod, int radix_P, char * input_P, int radix_Q,
251 char * input_Q, int radix_N, char * input_N,
252 int radix_E, char * input_E, int digest, int hash,
Azim Khan5fcca462018-06-29 11:05:32 +0100253 data_t * message_str, data_t * rnd_buf,
254 data_t * result_hex_str, int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000255{
Ron Eldor635888b2018-11-25 15:54:52 +0200256 unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
257 unsigned char output[128];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000258 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100259 mbedtls_mpi N, P, Q, E;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000260 rnd_buf_info info;
261
Azim Khand30ca132017-06-09 04:32:58 +0100262 info.buf = rnd_buf->x;
263 info.length = rnd_buf->len;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000264
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100265 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
266 mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000267 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
268
Ron Eldor635888b2018-11-25 15:54:52 +0200269 memset( hash_result, 0x00, sizeof( hash_result ) );
270 memset( output, 0x00, sizeof( output ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000271
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100272 TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
273 TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
274 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
275 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000276
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100277 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
278 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Hanno Becker7f25f852017-10-10 16:56:22 +0100279 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000280 TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
281
Janos Follathe6aef9f2016-03-16 16:39:41 +0000282
283 if( mbedtls_md_info_from_type( digest ) != NULL )
Azim Khand30ca132017-06-09 04:32:58 +0100284 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 +0000285
286 TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &rnd_buffer_rand, &info, MBEDTLS_RSA_PRIVATE, digest, 0, hash_result, output ) == result );
287 if( result == 0 )
288 {
Janos Follathe6aef9f2016-03-16 16:39:41 +0000289
Ronald Cronde70b162020-06-10 11:03:08 +0200290 TEST_ASSERT( mbedtls_test_hexcmp( output, result_hex_str->x, ctx.len, result_hex_str->len ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000291 }
292
293exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100294 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
295 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000296 mbedtls_rsa_free( &ctx );
297}
298/* END_CASE */
299
300/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100301void pkcs1_rsassa_v15_verify( int mod, int radix_N, char * input_N,
302 int radix_E, char * input_E, int digest,
Azim Khan5fcca462018-06-29 11:05:32 +0100303 int hash, data_t * message_str, char * salt,
304 data_t * result_str, int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000305{
Ron Eldor635888b2018-11-25 15:54:52 +0200306 unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000307 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100308 mbedtls_mpi N, E;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000309 ((void) salt);
310
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100311 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000312 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Ron Eldor635888b2018-11-25 15:54:52 +0200313 memset( hash_result, 0x00, sizeof( hash_result ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000314
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100315 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
316 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
317 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
318 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000319 TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
320
Janos Follathe6aef9f2016-03-16 16:39:41 +0000321
322 if( mbedtls_md_info_from_type( digest ) != NULL )
Azim Khand30ca132017-06-09 04:32:58 +0100323 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 +0000324
Azim Khand30ca132017-06-09 04:32:58 +0100325 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 +0000326
327exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100328 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000329 mbedtls_rsa_free( &ctx );
330}
331/* END_CASE */