blob: d558c386fc8d2bd2f24551a16c72c9e6b7bf307a [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,
Ronald Cronac6ae352020-06-26 14:33:03 +020015 data_t * result_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;
Ronald Cron351f0ee2020-06-10 12:12:18 +020019 mbedtls_test_rnd_buf_info info;
Hanno Becker6d43f9e2017-08-23 06:35:17 +010020 mbedtls_mpi N, E;
Janos Follath8a49a012016-02-12 13:18:20 +000021
Gilles Peskineecacc3c2021-03-24 00:48:57 +010022 info.fallback_f_rng = mbedtls_test_rnd_std_rand;
23 info.fallback_p_rng = NULL;
Azim Khand30ca132017-06-09 04:32:58 +010024 info.buf = rnd_buf->x;
25 info.length = rnd_buf->len;
Janos Follath8a49a012016-02-12 13:18:20 +000026
Hanno Becker6d43f9e2017-08-23 06:35:17 +010027 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
Ronald Cronc1905a12021-06-05 11:11:14 +020028 mbedtls_rsa_init( &ctx );
29 mbedtls_rsa_set_padding( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Ron Eldor635888b2018-11-25 15:54:52 +020030 memset( output, 0x00, sizeof( output ) );
Janos Follath8a49a012016-02-12 13:18:20 +000031
Hanno Becker6d43f9e2017-08-23 06:35:17 +010032 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
33 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
34 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
35 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Janos Follath8a49a012016-02-12 13:18:20 +000036 TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
37
Gilles Peskine85a6dd42018-10-15 16:32:42 +020038 if( message_str->len == 0 )
39 message_str->x = NULL;
Ronald Cron6c5bd7f2020-06-10 14:08:26 +020040 TEST_ASSERT( mbedtls_rsa_pkcs1_encrypt( &ctx,
41 &mbedtls_test_rnd_buffer_rand,
Thomas Daubney21772772021-05-13 17:30:32 +010042 &info, message_str->len,
43 message_str->x,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +020044 output ) == result );
45
Janos Follath8a49a012016-02-12 13:18:20 +000046 if( result == 0 )
47 {
Ronald Cronac6ae352020-06-26 14:33:03 +020048 TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x,
49 ctx.len, result_str->len ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000050 }
51
52exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +010053 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000054 mbedtls_rsa_free( &ctx );
55}
56/* END_CASE */
57
58/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +010059void pkcs1_rsaes_v15_decrypt( int mod, int radix_P, char * input_P,
60 int radix_Q, char * input_Q, int radix_N,
61 char * input_N, int radix_E, char * input_E,
Ronald Cronac6ae352020-06-26 14:33:03 +020062 int hash, data_t * result_str,
Azim Khan5fcca462018-06-29 11:05:32 +010063 char * seed, data_t * message_str,
Azim Khanf1aaec92017-05-30 14:23:15 +010064 int result )
Janos Follath8a49a012016-02-12 13:18:20 +000065{
Ron Eldor635888b2018-11-25 15:54:52 +020066 unsigned char output[128];
Janos Follath8a49a012016-02-12 13:18:20 +000067 mbedtls_rsa_context ctx;
Janos Follath8a49a012016-02-12 13:18:20 +000068 size_t output_len;
Ronald Cron351f0ee2020-06-10 12:12:18 +020069 mbedtls_test_rnd_pseudo_info rnd_info;
Hanno Becker6d43f9e2017-08-23 06:35:17 +010070 mbedtls_mpi N, P, Q, E;
Janos Follath8a49a012016-02-12 13:18:20 +000071 ((void) seed);
72
Hanno Becker6d43f9e2017-08-23 06:35:17 +010073 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
74 mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
Ronald Cronc1905a12021-06-05 11:11:14 +020075 mbedtls_rsa_init( &ctx );
76 mbedtls_rsa_set_padding( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Janos Follath8a49a012016-02-12 13:18:20 +000077
Ron Eldor635888b2018-11-25 15:54:52 +020078 memset( output, 0x00, sizeof( output ) );
Ronald Cron351f0ee2020-06-10 12:12:18 +020079 memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) );
Janos Follath8a49a012016-02-12 13:18:20 +000080
Hanno Becker6d43f9e2017-08-23 06:35:17 +010081 TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
82 TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
83 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
84 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000085
Hanno Becker6d43f9e2017-08-23 06:35:17 +010086 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
87 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Hanno Becker7f25f852017-10-10 16:56:22 +010088 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000089 TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
90
Ronald Cronac6ae352020-06-26 14:33:03 +020091 if( result_str->len == 0 )
Janos Follath8a49a012016-02-12 13:18:20 +000092 {
Ronald Cron6c5bd7f2020-06-10 14:08:26 +020093 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx,
94 &mbedtls_test_rnd_pseudo_rand,
95 &rnd_info,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +020096 &output_len, message_str->x,
97 NULL, 0 ) == result );
Gilles Peskine85a6dd42018-10-15 16:32:42 +020098 }
99 else
100 {
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200101 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx,
102 &mbedtls_test_rnd_pseudo_rand,
Thomas Daubneyc7feaf32021-05-07 14:02:43 +0100103 &rnd_info,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200104 &output_len, message_str->x,
105 output, 1000 ) == result );
Gilles Peskine85a6dd42018-10-15 16:32:42 +0200106 if( result == 0 )
107 {
Ronald Cronac6ae352020-06-26 14:33:03 +0200108 TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x,
Ronald Cron2dbba992020-06-10 11:42:32 +0200109 output_len,
Ronald Cronac6ae352020-06-26 14:33:03 +0200110 result_str->len) == 0 );
Gilles Peskine85a6dd42018-10-15 16:32:42 +0200111 }
Janos Follath8a49a012016-02-12 13:18:20 +0000112 }
113
114exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100115 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
116 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follath8a49a012016-02-12 13:18:20 +0000117 mbedtls_rsa_free( &ctx );
118}
119/* END_CASE */
120
Janos Follathe6aef9f2016-03-16 16:39:41 +0000121/* BEGIN_CASE */
Thomas Daubney99914142021-05-06 15:17:03 +0100122void pkcs1_v15_decode( data_t *input,
Gilles Peskine695a3462018-10-05 18:15:25 +0200123 int expected_plaintext_length_arg,
124 int output_size_arg,
125 int expected_result )
126{
127 size_t expected_plaintext_length = expected_plaintext_length_arg;
128 size_t output_size = output_size_arg;
Ronald Cron351f0ee2020-06-10 12:12:18 +0200129 mbedtls_test_rnd_pseudo_info rnd_info;
Gilles Peskine695a3462018-10-05 18:15:25 +0200130 mbedtls_mpi Nmpi, Empi, Pmpi, Qmpi;
131 mbedtls_rsa_context ctx;
132 static unsigned char N[128] = {
133 0xc4, 0x79, 0x4c, 0x6d, 0xb2, 0xe9, 0xdf, 0xc5,
134 0xe5, 0xd7, 0x55, 0x4b, 0xfb, 0x6c, 0x2e, 0xec,
135 0x84, 0xd0, 0x88, 0x12, 0xaf, 0xbf, 0xb4, 0xf5,
136 0x47, 0x3c, 0x7e, 0x92, 0x4c, 0x58, 0xc8, 0x73,
137 0xfe, 0x8f, 0x2b, 0x8f, 0x8e, 0xc8, 0x5c, 0xf5,
138 0x05, 0xeb, 0xfb, 0x0d, 0x7b, 0x2a, 0x93, 0xde,
139 0x15, 0x0d, 0xc8, 0x13, 0xcf, 0xd2, 0x6f, 0x0d,
140 0x9d, 0xad, 0x30, 0xe5, 0x70, 0x20, 0x92, 0x9e,
141 0xb3, 0x6b, 0xba, 0x5c, 0x50, 0x0f, 0xc3, 0xb2,
142 0x7e, 0x64, 0x07, 0x94, 0x7e, 0xc9, 0x4e, 0xc1,
143 0x65, 0x04, 0xaf, 0xb3, 0x9f, 0xde, 0xa8, 0x46,
144 0xfa, 0x6c, 0xf3, 0x03, 0xaf, 0x1c, 0x1b, 0xec,
145 0x75, 0x44, 0x66, 0x77, 0xc9, 0xde, 0x51, 0x33,
146 0x64, 0x27, 0xb0, 0xd4, 0x8d, 0x31, 0x6a, 0x11,
147 0x27, 0x3c, 0x99, 0xd4, 0x22, 0xc0, 0x9d, 0x12,
148 0x01, 0xc7, 0x4a, 0x73, 0xac, 0xbf, 0xc2, 0xbb
149 };
150 static unsigned char E[1] = { 0x03 };
151 static unsigned char P[64] = {
152 0xe5, 0x53, 0x1f, 0x88, 0x51, 0xee, 0x59, 0xf8,
153 0xc1, 0xe4, 0xcc, 0x5b, 0xb3, 0x75, 0x8d, 0xc8,
154 0xe8, 0x95, 0x2f, 0xd0, 0xef, 0x37, 0xb4, 0xcd,
155 0xd3, 0x9e, 0x48, 0x8b, 0x81, 0x58, 0x60, 0xb9,
156 0x27, 0x1d, 0xb6, 0x28, 0x92, 0x64, 0xa3, 0xa5,
157 0x64, 0xbd, 0xcc, 0x53, 0x68, 0xdd, 0x3e, 0x55,
158 0xea, 0x9d, 0x5e, 0xcd, 0x1f, 0x96, 0x87, 0xf1,
159 0x29, 0x75, 0x92, 0x70, 0x8f, 0x28, 0xfb, 0x2b
160 };
161 static unsigned char Q[64] = {
162 0xdb, 0x53, 0xef, 0x74, 0x61, 0xb4, 0x20, 0x3b,
163 0x3b, 0x87, 0x76, 0x75, 0x81, 0x56, 0x11, 0x03,
164 0x59, 0x31, 0xe3, 0x38, 0x4b, 0x8c, 0x7a, 0x9c,
165 0x05, 0xd6, 0x7f, 0x1e, 0x5e, 0x60, 0xf0, 0x4e,
166 0x0b, 0xdc, 0x34, 0x54, 0x1c, 0x2e, 0x90, 0x83,
167 0x14, 0xef, 0xc0, 0x96, 0x5c, 0x30, 0x10, 0xcc,
168 0xc1, 0xba, 0xa0, 0x54, 0x3f, 0x96, 0x24, 0xca,
169 0xa3, 0xfb, 0x55, 0xbc, 0x71, 0x29, 0x4e, 0xb1
170 };
171 unsigned char original[128];
172 unsigned char intermediate[128];
173 static unsigned char default_content[128] = {
174 /* A randomly generated pattern. */
175 0x4c, 0x27, 0x54, 0xa0, 0xce, 0x0d, 0x09, 0x4a,
176 0x1c, 0x38, 0x8e, 0x2d, 0xa3, 0xc4, 0xe0, 0x19,
177 0x4c, 0x99, 0xb2, 0xbf, 0xe6, 0x65, 0x7e, 0x58,
178 0xd7, 0xb6, 0x8a, 0x05, 0x2f, 0xa5, 0xec, 0xa4,
179 0x35, 0xad, 0x10, 0x36, 0xff, 0x0d, 0x08, 0x50,
180 0x74, 0x47, 0xc9, 0x9c, 0x4a, 0xe7, 0xfd, 0xfa,
181 0x83, 0x5f, 0x14, 0x5a, 0x1e, 0xe7, 0x35, 0x08,
182 0xad, 0xf7, 0x0d, 0x86, 0xdf, 0xb8, 0xd4, 0xcf,
183 0x32, 0xb9, 0x5c, 0xbe, 0xa3, 0xd2, 0x89, 0x70,
184 0x7b, 0xc6, 0x48, 0x7e, 0x58, 0x4d, 0xf3, 0xef,
185 0x34, 0xb7, 0x57, 0x54, 0x79, 0xc5, 0x8e, 0x0a,
186 0xa3, 0xbf, 0x6d, 0x42, 0x83, 0x25, 0x13, 0xa2,
187 0x95, 0xc0, 0x0d, 0x32, 0xec, 0x77, 0x91, 0x2b,
188 0x68, 0xb6, 0x8c, 0x79, 0x15, 0xfb, 0x94, 0xde,
189 0xb9, 0x2b, 0x94, 0xb3, 0x28, 0x23, 0x86, 0x3d,
190 0x37, 0x00, 0xe6, 0xf1, 0x1f, 0x4e, 0xd4, 0x42
191 };
192 unsigned char final[128];
193 size_t output_length = 0x7EA0;
194
Ronald Cron351f0ee2020-06-10 12:12:18 +0200195 memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) );
Gilles Peskine695a3462018-10-05 18:15:25 +0200196 mbedtls_mpi_init( &Nmpi ); mbedtls_mpi_init( &Empi );
197 mbedtls_mpi_init( &Pmpi ); mbedtls_mpi_init( &Qmpi );
Ronald Cronc1905a12021-06-05 11:11:14 +0200198 mbedtls_rsa_init( &ctx );
Gilles Peskine695a3462018-10-05 18:15:25 +0200199
200 TEST_ASSERT( mbedtls_mpi_read_binary( &Nmpi, N, sizeof( N ) ) == 0 );
201 TEST_ASSERT( mbedtls_mpi_read_binary( &Empi, E, sizeof( E ) ) == 0 );
202 TEST_ASSERT( mbedtls_mpi_read_binary( &Pmpi, P, sizeof( P ) ) == 0 );
203 TEST_ASSERT( mbedtls_mpi_read_binary( &Qmpi, Q, sizeof( Q ) ) == 0 );
204
205 TEST_ASSERT( mbedtls_rsa_import( &ctx, &Nmpi, &Pmpi, &Qmpi,
206 NULL, &Empi ) == 0 );
207 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
208
209 TEST_ASSERT( input->len <= sizeof( N ) );
210 memcpy( original, input->x, input->len );
211 memset( original + input->len, 'd', sizeof( original ) - input->len );
Thomas Daubney99914142021-05-06 15:17:03 +0100212 TEST_ASSERT( mbedtls_rsa_public( &ctx, original, intermediate ) == 0 );
Gilles Peskine695a3462018-10-05 18:15:25 +0200213
214 memcpy( final, default_content, sizeof( final ) );
215 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200216 &mbedtls_test_rnd_pseudo_rand,
Thomas Daubneyc7feaf32021-05-07 14:02:43 +0100217 &rnd_info, &output_length,
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200218 intermediate, final,
Gilles Peskine695a3462018-10-05 18:15:25 +0200219 output_size ) == expected_result );
220 if( expected_result == 0 )
221 {
222 TEST_ASSERT( output_length == expected_plaintext_length );
223 TEST_ASSERT( memcmp( original + sizeof( N ) - output_length,
224 final,
225 output_length ) == 0 );
226 }
227 else if( expected_result == MBEDTLS_ERR_RSA_INVALID_PADDING ||
228 expected_result == MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE )
229 {
230 size_t max_payload_length =
231 output_size > sizeof( N ) - 11 ? sizeof( N ) - 11 : output_size;
232 size_t i;
233 size_t count = 0;
234
235#if !defined(MBEDTLS_RSA_ALT)
236 /* Check that the output in invalid cases is what the default
237 * implementation currently does. Alternative implementations
238 * may produce different output, so we only perform these precise
239 * checks when using the default implementation. */
240 TEST_ASSERT( output_length == max_payload_length );
241 for( i = 0; i < max_payload_length; i++ )
242 TEST_ASSERT( final[i] == 0 );
243#endif
244 /* Even in alternative implementations, the outputs must have
245 * changed, otherwise it indicates at least a timing vulnerability
246 * because no write to the outputs is performed in the bad case. */
247 TEST_ASSERT( output_length != 0x7EA0 );
248 for( i = 0; i < max_payload_length; i++ )
249 count += ( final[i] == default_content[i] );
250 /* If more than 16 bytes are unchanged in final, that's evidence
251 * that final wasn't overwritten. */
252 TEST_ASSERT( count < 16 );
253 }
254
255exit:
256 mbedtls_mpi_free( &Nmpi ); mbedtls_mpi_free( &Empi );
257 mbedtls_mpi_free( &Pmpi ); mbedtls_mpi_free( &Qmpi );
258 mbedtls_rsa_free( &ctx );
259}
260/* END_CASE */
261
262/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100263void pkcs1_rsassa_v15_sign( int mod, int radix_P, char * input_P, int radix_Q,
264 char * input_Q, int radix_N, char * input_N,
265 int radix_E, char * input_E, int digest, int hash,
Azim Khan5fcca462018-06-29 11:05:32 +0100266 data_t * message_str, data_t * rnd_buf,
Ronald Cronac6ae352020-06-26 14:33:03 +0200267 data_t * result_str, int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000268{
Ron Eldor635888b2018-11-25 15:54:52 +0200269 unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
270 unsigned char output[128];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000271 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100272 mbedtls_mpi N, P, Q, E;
Ronald Cron351f0ee2020-06-10 12:12:18 +0200273 mbedtls_test_rnd_buf_info info;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000274
Gilles Peskineecacc3c2021-03-24 00:48:57 +0100275 info.fallback_f_rng = mbedtls_test_rnd_std_rand;
276 info.fallback_p_rng = NULL;
Azim Khand30ca132017-06-09 04:32:58 +0100277 info.buf = rnd_buf->x;
278 info.length = rnd_buf->len;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000279
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100280 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
281 mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
Ronald Cronc1905a12021-06-05 11:11:14 +0200282 mbedtls_rsa_init( &ctx );
283 mbedtls_rsa_set_padding( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000284
Ron Eldor635888b2018-11-25 15:54:52 +0200285 memset( hash_result, 0x00, sizeof( hash_result ) );
286 memset( output, 0x00, sizeof( output ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000287
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100288 TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
289 TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
290 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
291 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000292
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100293 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
294 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Hanno Becker7f25f852017-10-10 16:56:22 +0100295 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000296 TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
297
Janos Follathe6aef9f2016-03-16 16:39:41 +0000298
299 if( mbedtls_md_info_from_type( digest ) != NULL )
Azim Khand30ca132017-06-09 04:32:58 +0100300 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 +0000301
Ronald Cron6c5bd7f2020-06-10 14:08:26 +0200302 TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &mbedtls_test_rnd_buffer_rand,
Thomas Daubney140184d2021-05-18 16:04:07 +0100303 &info, digest, 0, hash_result,
304 output ) == result );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000305 if( result == 0 )
306 {
Janos Follathe6aef9f2016-03-16 16:39:41 +0000307
Ronald Cronac6ae352020-06-26 14:33:03 +0200308 TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x,
309 ctx.len, result_str->len ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000310 }
311
312exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100313 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
314 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000315 mbedtls_rsa_free( &ctx );
316}
317/* END_CASE */
318
319/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100320void pkcs1_rsassa_v15_verify( int mod, int radix_N, char * input_N,
321 int radix_E, char * input_E, int digest,
Azim Khan5fcca462018-06-29 11:05:32 +0100322 int hash, data_t * message_str, char * salt,
323 data_t * result_str, int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000324{
Ron Eldor635888b2018-11-25 15:54:52 +0200325 unsigned char hash_result[MBEDTLS_MD_MAX_SIZE];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000326 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100327 mbedtls_mpi N, E;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000328 ((void) salt);
329
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100330 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
Ronald Cronc1905a12021-06-05 11:11:14 +0200331 mbedtls_rsa_init( &ctx );
332 mbedtls_rsa_set_padding( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Ron Eldor635888b2018-11-25 15:54:52 +0200333 memset( hash_result, 0x00, sizeof( hash_result ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000334
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100335 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
336 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
337 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
338 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000339 TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
340
Janos Follathe6aef9f2016-03-16 16:39:41 +0000341
342 if( mbedtls_md_info_from_type( digest ) != NULL )
Azim Khand30ca132017-06-09 04:32:58 +0100343 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 +0000344
Thomas Daubney68d9cbc2021-05-18 18:45:09 +0100345 TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, digest, 0, hash_result, result_str->x ) == result );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000346
347exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100348 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000349 mbedtls_rsa_free( &ctx );
350}
351/* END_CASE */