blob: 7941297dfbbf99af514937bd7d80f9c420d33be2 [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 Crond2397942020-06-10 11:03:08 +020039 TEST_ASSERT( mbedtls_test_hexcmp( output, result_hex_str->x, ctx.len, result_hex_str->len ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000040 }
41
42exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +010043 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000044 mbedtls_rsa_free( &ctx );
45}
46/* END_CASE */
47
48/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +010049void pkcs1_rsaes_v15_decrypt( int mod, int radix_P, char * input_P,
50 int radix_Q, char * input_Q, int radix_N,
51 char * input_N, int radix_E, char * input_E,
Azim Khan5fcca462018-06-29 11:05:32 +010052 int hash, data_t * result_hex_str,
53 char * seed, data_t * message_str,
Azim Khanf1aaec92017-05-30 14:23:15 +010054 int result )
Janos Follath8a49a012016-02-12 13:18:20 +000055{
Ron Eldor3adb9812018-11-25 15:54:52 +020056 unsigned char output[128];
Janos Follath8a49a012016-02-12 13:18:20 +000057 mbedtls_rsa_context ctx;
Janos Follath8a49a012016-02-12 13:18:20 +000058 size_t output_len;
59 rnd_pseudo_info rnd_info;
Hanno Becker6d43f9e2017-08-23 06:35:17 +010060 mbedtls_mpi N, P, Q, E;
Janos Follath8a49a012016-02-12 13:18:20 +000061 ((void) seed);
62
Hanno Becker6d43f9e2017-08-23 06:35:17 +010063 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
64 mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000065 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
66
Ron Eldor3adb9812018-11-25 15:54:52 +020067 memset( output, 0x00, sizeof( output ) );
Janos Follath8a49a012016-02-12 13:18:20 +000068 memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) );
69
Hanno Becker6d43f9e2017-08-23 06:35:17 +010070 TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
71 TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
72 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
73 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000074
Hanno Becker6d43f9e2017-08-23 06:35:17 +010075 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
76 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Hanno Becker7f25f852017-10-10 16:56:22 +010077 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000078 TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
79
Janos Follath8a49a012016-02-12 13:18:20 +000080
Azim Khand30ca132017-06-09 04:32:58 +010081 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 +000082 if( result == 0 )
83 {
Janos Follath8a49a012016-02-12 13:18:20 +000084
Ronald Crond2397942020-06-10 11:03:08 +020085 TEST_ASSERT( mbedtls_test_hexcmp( output, result_hex_str->x, output_len, result_hex_str->len) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000086 }
87
88exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +010089 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
90 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000091 mbedtls_rsa_free( &ctx );
92}
93/* END_CASE */
94
Janos Follathe6aef9f2016-03-16 16:39:41 +000095/* BEGIN_CASE */
Gilles Peskine695a3462018-10-05 18:15:25 +020096void pkcs1_v15_decode( int mode,
97 data_t *input,
98 int expected_plaintext_length_arg,
99 int output_size_arg,
100 int expected_result )
101{
102 size_t expected_plaintext_length = expected_plaintext_length_arg;
103 size_t output_size = output_size_arg;
104 rnd_pseudo_info rnd_info;
105 mbedtls_mpi Nmpi, Empi, Pmpi, Qmpi;
106 mbedtls_rsa_context ctx;
107 static unsigned char N[128] = {
108 0xc4, 0x79, 0x4c, 0x6d, 0xb2, 0xe9, 0xdf, 0xc5,
109 0xe5, 0xd7, 0x55, 0x4b, 0xfb, 0x6c, 0x2e, 0xec,
110 0x84, 0xd0, 0x88, 0x12, 0xaf, 0xbf, 0xb4, 0xf5,
111 0x47, 0x3c, 0x7e, 0x92, 0x4c, 0x58, 0xc8, 0x73,
112 0xfe, 0x8f, 0x2b, 0x8f, 0x8e, 0xc8, 0x5c, 0xf5,
113 0x05, 0xeb, 0xfb, 0x0d, 0x7b, 0x2a, 0x93, 0xde,
114 0x15, 0x0d, 0xc8, 0x13, 0xcf, 0xd2, 0x6f, 0x0d,
115 0x9d, 0xad, 0x30, 0xe5, 0x70, 0x20, 0x92, 0x9e,
116 0xb3, 0x6b, 0xba, 0x5c, 0x50, 0x0f, 0xc3, 0xb2,
117 0x7e, 0x64, 0x07, 0x94, 0x7e, 0xc9, 0x4e, 0xc1,
118 0x65, 0x04, 0xaf, 0xb3, 0x9f, 0xde, 0xa8, 0x46,
119 0xfa, 0x6c, 0xf3, 0x03, 0xaf, 0x1c, 0x1b, 0xec,
120 0x75, 0x44, 0x66, 0x77, 0xc9, 0xde, 0x51, 0x33,
121 0x64, 0x27, 0xb0, 0xd4, 0x8d, 0x31, 0x6a, 0x11,
122 0x27, 0x3c, 0x99, 0xd4, 0x22, 0xc0, 0x9d, 0x12,
123 0x01, 0xc7, 0x4a, 0x73, 0xac, 0xbf, 0xc2, 0xbb
124 };
125 static unsigned char E[1] = { 0x03 };
126 static unsigned char P[64] = {
127 0xe5, 0x53, 0x1f, 0x88, 0x51, 0xee, 0x59, 0xf8,
128 0xc1, 0xe4, 0xcc, 0x5b, 0xb3, 0x75, 0x8d, 0xc8,
129 0xe8, 0x95, 0x2f, 0xd0, 0xef, 0x37, 0xb4, 0xcd,
130 0xd3, 0x9e, 0x48, 0x8b, 0x81, 0x58, 0x60, 0xb9,
131 0x27, 0x1d, 0xb6, 0x28, 0x92, 0x64, 0xa3, 0xa5,
132 0x64, 0xbd, 0xcc, 0x53, 0x68, 0xdd, 0x3e, 0x55,
133 0xea, 0x9d, 0x5e, 0xcd, 0x1f, 0x96, 0x87, 0xf1,
134 0x29, 0x75, 0x92, 0x70, 0x8f, 0x28, 0xfb, 0x2b
135 };
136 static unsigned char Q[64] = {
137 0xdb, 0x53, 0xef, 0x74, 0x61, 0xb4, 0x20, 0x3b,
138 0x3b, 0x87, 0x76, 0x75, 0x81, 0x56, 0x11, 0x03,
139 0x59, 0x31, 0xe3, 0x38, 0x4b, 0x8c, 0x7a, 0x9c,
140 0x05, 0xd6, 0x7f, 0x1e, 0x5e, 0x60, 0xf0, 0x4e,
141 0x0b, 0xdc, 0x34, 0x54, 0x1c, 0x2e, 0x90, 0x83,
142 0x14, 0xef, 0xc0, 0x96, 0x5c, 0x30, 0x10, 0xcc,
143 0xc1, 0xba, 0xa0, 0x54, 0x3f, 0x96, 0x24, 0xca,
144 0xa3, 0xfb, 0x55, 0xbc, 0x71, 0x29, 0x4e, 0xb1
145 };
146 unsigned char original[128];
147 unsigned char intermediate[128];
148 static unsigned char default_content[128] = {
149 /* A randomly generated pattern. */
150 0x4c, 0x27, 0x54, 0xa0, 0xce, 0x0d, 0x09, 0x4a,
151 0x1c, 0x38, 0x8e, 0x2d, 0xa3, 0xc4, 0xe0, 0x19,
152 0x4c, 0x99, 0xb2, 0xbf, 0xe6, 0x65, 0x7e, 0x58,
153 0xd7, 0xb6, 0x8a, 0x05, 0x2f, 0xa5, 0xec, 0xa4,
154 0x35, 0xad, 0x10, 0x36, 0xff, 0x0d, 0x08, 0x50,
155 0x74, 0x47, 0xc9, 0x9c, 0x4a, 0xe7, 0xfd, 0xfa,
156 0x83, 0x5f, 0x14, 0x5a, 0x1e, 0xe7, 0x35, 0x08,
157 0xad, 0xf7, 0x0d, 0x86, 0xdf, 0xb8, 0xd4, 0xcf,
158 0x32, 0xb9, 0x5c, 0xbe, 0xa3, 0xd2, 0x89, 0x70,
159 0x7b, 0xc6, 0x48, 0x7e, 0x58, 0x4d, 0xf3, 0xef,
160 0x34, 0xb7, 0x57, 0x54, 0x79, 0xc5, 0x8e, 0x0a,
161 0xa3, 0xbf, 0x6d, 0x42, 0x83, 0x25, 0x13, 0xa2,
162 0x95, 0xc0, 0x0d, 0x32, 0xec, 0x77, 0x91, 0x2b,
163 0x68, 0xb6, 0x8c, 0x79, 0x15, 0xfb, 0x94, 0xde,
164 0xb9, 0x2b, 0x94, 0xb3, 0x28, 0x23, 0x86, 0x3d,
165 0x37, 0x00, 0xe6, 0xf1, 0x1f, 0x4e, 0xd4, 0x42
166 };
167 unsigned char final[128];
168 size_t output_length = 0x7EA0;
169
170 memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) );
171 mbedtls_mpi_init( &Nmpi ); mbedtls_mpi_init( &Empi );
172 mbedtls_mpi_init( &Pmpi ); mbedtls_mpi_init( &Qmpi );
173 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, 0 );
174
175 TEST_ASSERT( mbedtls_mpi_read_binary( &Nmpi, N, sizeof( N ) ) == 0 );
176 TEST_ASSERT( mbedtls_mpi_read_binary( &Empi, E, sizeof( E ) ) == 0 );
177 TEST_ASSERT( mbedtls_mpi_read_binary( &Pmpi, P, sizeof( P ) ) == 0 );
178 TEST_ASSERT( mbedtls_mpi_read_binary( &Qmpi, Q, sizeof( Q ) ) == 0 );
179
180 TEST_ASSERT( mbedtls_rsa_import( &ctx, &Nmpi, &Pmpi, &Qmpi,
181 NULL, &Empi ) == 0 );
182 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
183
184 TEST_ASSERT( input->len <= sizeof( N ) );
185 memcpy( original, input->x, input->len );
186 memset( original + input->len, 'd', sizeof( original ) - input->len );
187 if( mode == MBEDTLS_RSA_PRIVATE )
188 TEST_ASSERT( mbedtls_rsa_public( &ctx, original, intermediate ) == 0 );
189 else
190 TEST_ASSERT( mbedtls_rsa_private( &ctx, &rnd_pseudo_rand, &rnd_info,
191 original, intermediate ) == 0 );
192
193 memcpy( final, default_content, sizeof( final ) );
194 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx,
195 &rnd_pseudo_rand, &rnd_info,
196 mode,
197 &output_length,
198 intermediate,
199 final,
200 output_size ) == expected_result );
201 if( expected_result == 0 )
202 {
203 TEST_ASSERT( output_length == expected_plaintext_length );
204 TEST_ASSERT( memcmp( original + sizeof( N ) - output_length,
205 final,
206 output_length ) == 0 );
207 }
208 else if( expected_result == MBEDTLS_ERR_RSA_INVALID_PADDING ||
209 expected_result == MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE )
210 {
211 size_t max_payload_length =
212 output_size > sizeof( N ) - 11 ? sizeof( N ) - 11 : output_size;
213 size_t i;
214 size_t count = 0;
215
216#if !defined(MBEDTLS_RSA_ALT)
217 /* Check that the output in invalid cases is what the default
218 * implementation currently does. Alternative implementations
219 * may produce different output, so we only perform these precise
220 * checks when using the default implementation. */
221 TEST_ASSERT( output_length == max_payload_length );
222 for( i = 0; i < max_payload_length; i++ )
223 TEST_ASSERT( final[i] == 0 );
224#endif
225 /* Even in alternative implementations, the outputs must have
226 * changed, otherwise it indicates at least a timing vulnerability
227 * because no write to the outputs is performed in the bad case. */
228 TEST_ASSERT( output_length != 0x7EA0 );
229 for( i = 0; i < max_payload_length; i++ )
230 count += ( final[i] == default_content[i] );
231 /* If more than 16 bytes are unchanged in final, that's evidence
232 * that final wasn't overwritten. */
233 TEST_ASSERT( count < 16 );
234 }
235
236exit:
237 mbedtls_mpi_free( &Nmpi ); mbedtls_mpi_free( &Empi );
238 mbedtls_mpi_free( &Pmpi ); mbedtls_mpi_free( &Qmpi );
239 mbedtls_rsa_free( &ctx );
240}
241/* END_CASE */
242
243/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100244void pkcs1_rsassa_v15_sign( int mod, int radix_P, char * input_P, int radix_Q,
245 char * input_Q, int radix_N, char * input_N,
246 int radix_E, char * input_E, int digest, int hash,
Azim Khan5fcca462018-06-29 11:05:32 +0100247 data_t * message_str, data_t * rnd_buf,
248 data_t * result_hex_str, int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000249{
Ron Eldor3adb9812018-11-25 15:54:52 +0200250 unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
251 unsigned char output[128];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000252 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100253 mbedtls_mpi N, P, Q, E;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000254 rnd_buf_info info;
255
Azim Khand30ca132017-06-09 04:32:58 +0100256 info.buf = rnd_buf->x;
257 info.length = rnd_buf->len;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000258
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100259 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
260 mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000261 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
262
Ron Eldor3adb9812018-11-25 15:54:52 +0200263 memset( hash_result, 0x00, sizeof( hash_result ) );
264 memset( output, 0x00, sizeof( output ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000265
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100266 TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
267 TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
268 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
269 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000270
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100271 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
272 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Hanno Becker7f25f852017-10-10 16:56:22 +0100273 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000274 TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
275
Janos Follathe6aef9f2016-03-16 16:39:41 +0000276
277 if( mbedtls_md_info_from_type( digest ) != NULL )
Azim Khand30ca132017-06-09 04:32:58 +0100278 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 +0000279
280 TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &rnd_buffer_rand, &info, MBEDTLS_RSA_PRIVATE, digest, 0, hash_result, output ) == result );
281 if( result == 0 )
282 {
Janos Follathe6aef9f2016-03-16 16:39:41 +0000283
Ronald Crond2397942020-06-10 11:03:08 +0200284 TEST_ASSERT( mbedtls_test_hexcmp( output, result_hex_str->x, ctx.len, result_hex_str->len ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000285 }
286
287exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100288 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
289 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000290 mbedtls_rsa_free( &ctx );
291}
292/* END_CASE */
293
294/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100295void pkcs1_rsassa_v15_verify( int mod, int radix_N, char * input_N,
296 int radix_E, char * input_E, int digest,
Azim Khan5fcca462018-06-29 11:05:32 +0100297 int hash, data_t * message_str, char * salt,
298 data_t * result_str, int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000299{
Ron Eldor3adb9812018-11-25 15:54:52 +0200300 unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000301 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100302 mbedtls_mpi N, E;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000303 ((void) salt);
304
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100305 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000306 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Ron Eldor3adb9812018-11-25 15:54:52 +0200307 memset( hash_result, 0x00, sizeof( hash_result ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000308
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100309 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
310 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
311 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
312 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000313 TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
314
Janos Follathe6aef9f2016-03-16 16:39:41 +0000315
316 if( mbedtls_md_info_from_type( digest ) != NULL )
Azim Khand30ca132017-06-09 04:32:58 +0100317 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 +0000318
Azim Khand30ca132017-06-09 04:32:58 +0100319 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 +0000320
321exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100322 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000323 mbedtls_rsa_free( &ctx );
324}
325/* END_CASE */