blob: 7b57bee5359c96b39762eb5d06df8b26f919f4a2 [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,
14 uint8_t * message_str, uint32_t msg_len,
15 uint8_t * rnd_buf, uint32_t rnd_buf_len,
16 uint8_t * result_hex_str,
17 uint32_t result_hex_str_len, int result )
Janos Follath8a49a012016-02-12 13:18:20 +000018{
Janos Follath8a49a012016-02-12 13:18:20 +000019 unsigned char output[1000];
Janos Follath8a49a012016-02-12 13:18:20 +000020 mbedtls_rsa_context ctx;
Janos Follath8a49a012016-02-12 13:18:20 +000021 rnd_buf_info info;
Hanno Becker6d43f9e2017-08-23 06:35:17 +010022 mbedtls_mpi N, E;
Janos Follath8a49a012016-02-12 13:18:20 +000023
Janos Follath8a49a012016-02-12 13:18:20 +000024 info.buf = rnd_buf;
Azim Khanf1aaec92017-05-30 14:23:15 +010025 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 );
Janos Follath8a49a012016-02-12 13:18:20 +000028 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Janos Follath8a49a012016-02-12 13:18:20 +000029 memset( output, 0x00, 1000 );
Janos Follath8a49a012016-02-12 13:18:20 +000030
Hanno Becker6d43f9e2017-08-23 06:35:17 +010031 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
32 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
33 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
34 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Janos Follath8a49a012016-02-12 13:18:20 +000035 TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
36
Janos Follath8a49a012016-02-12 13:18:20 +000037
38 TEST_ASSERT( mbedtls_rsa_pkcs1_encrypt( &ctx, &rnd_buffer_rand, &info, MBEDTLS_RSA_PUBLIC, msg_len, message_str, output ) == result );
39 if( result == 0 )
40 {
Janos Follath8a49a012016-02-12 13:18:20 +000041
Azim Khanf1aaec92017-05-30 14:23:15 +010042 TEST_ASSERT( hexcmp( output, result_hex_str, ctx.len, result_hex_str_len ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000043 }
44
45exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +010046 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000047 mbedtls_rsa_free( &ctx );
48}
49/* END_CASE */
50
51/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +010052void pkcs1_rsaes_v15_decrypt( int mod, int radix_P, char * input_P,
53 int radix_Q, char * input_Q, int radix_N,
54 char * input_N, int radix_E, char * input_E,
55 int hash, uint8_t * result_hex_str, uint32_t result_hex_str_len,
56 char * seed, uint8_t * message_str, uint32_t message_str_len,
57 int result )
Janos Follath8a49a012016-02-12 13:18:20 +000058{
Janos Follath8a49a012016-02-12 13:18:20 +000059 unsigned char output[1000];
Janos Follath8a49a012016-02-12 13:18:20 +000060 mbedtls_rsa_context ctx;
Janos Follath8a49a012016-02-12 13:18:20 +000061 size_t output_len;
62 rnd_pseudo_info rnd_info;
Hanno Becker6d43f9e2017-08-23 06:35:17 +010063 mbedtls_mpi N, P, Q, E;
Janos Follath8a49a012016-02-12 13:18:20 +000064 ((void) seed);
65
Hanno Becker6d43f9e2017-08-23 06:35:17 +010066 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
67 mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000068 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
69
Janos Follath8a49a012016-02-12 13:18:20 +000070 memset( output, 0x00, 1000 );
Janos Follath8a49a012016-02-12 13:18:20 +000071 memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) );
72
Hanno Becker6d43f9e2017-08-23 06:35:17 +010073 TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
74 TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
75 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
76 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000077
Hanno Becker6d43f9e2017-08-23 06:35:17 +010078 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
79 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Hanno Becker7f25f852017-10-10 16:56:22 +010080 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000081 TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
82
Janos Follath8a49a012016-02-12 13:18:20 +000083
84 TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, &rnd_pseudo_rand, &rnd_info, MBEDTLS_RSA_PRIVATE, &output_len, message_str, output, 1000 ) == result );
85 if( result == 0 )
86 {
Janos Follath8a49a012016-02-12 13:18:20 +000087
Azim Khan46c9b1f2017-05-31 20:46:35 +010088 TEST_ASSERT( hexcmp( output, result_hex_str, output_len, result_hex_str_len) == 0 );
Janos Follath8a49a012016-02-12 13:18:20 +000089 }
90
91exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +010092 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
93 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follath8a49a012016-02-12 13:18:20 +000094 mbedtls_rsa_free( &ctx );
95}
96/* END_CASE */
97
Janos Follathe6aef9f2016-03-16 16:39:41 +000098/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +010099void pkcs1_rsassa_v15_sign( int mod, int radix_P, char * input_P, int radix_Q,
100 char * input_Q, int radix_N, char * input_N,
101 int radix_E, char * input_E, int digest, int hash,
102 uint8_t * message_str, uint32_t msg_len,
103 uint8_t * rnd_buf, uint32_t rnd_buf_len,
104 uint8_t * result_hex_str,
105 uint32_t result_hex_str_len, int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000106{
Janos Follathe6aef9f2016-03-16 16:39:41 +0000107 unsigned char hash_result[1000];
108 unsigned char output[1000];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000109 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100110 mbedtls_mpi N, P, Q, E;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000111 rnd_buf_info info;
112
Janos Follathe6aef9f2016-03-16 16:39:41 +0000113 info.buf = rnd_buf;
Azim Khanf1aaec92017-05-30 14:23:15 +0100114 info.length = rnd_buf_len;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000115
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100116 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P );
117 mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000118 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
119
Janos Follathe6aef9f2016-03-16 16:39:41 +0000120 memset( hash_result, 0x00, 1000 );
121 memset( output, 0x00, 1000 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000122
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100123 TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 );
124 TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 );
125 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
126 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000127
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100128 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 );
129 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Hanno Becker7f25f852017-10-10 16:56:22 +0100130 TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000131 TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 );
132
Janos Follathe6aef9f2016-03-16 16:39:41 +0000133
134 if( mbedtls_md_info_from_type( digest ) != NULL )
135 TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str, msg_len, hash_result ) == 0 );
136
137 TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &rnd_buffer_rand, &info, MBEDTLS_RSA_PRIVATE, digest, 0, hash_result, output ) == result );
138 if( result == 0 )
139 {
Janos Follathe6aef9f2016-03-16 16:39:41 +0000140
Azim Khanf1aaec92017-05-30 14:23:15 +0100141 TEST_ASSERT( hexcmp( output, result_hex_str, ctx.len, result_hex_str_len ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000142 }
143
144exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100145 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P );
146 mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000147 mbedtls_rsa_free( &ctx );
148}
149/* END_CASE */
150
151/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100152void pkcs1_rsassa_v15_verify( int mod, int radix_N, char * input_N,
153 int radix_E, char * input_E, int digest,
154 int hash, uint8_t * message_str,
155 uint32_t msg_len, char * salt,
156 uint8_t * result_str, uint32_t result_str_len,
157 int result )
Janos Follathe6aef9f2016-03-16 16:39:41 +0000158{
Janos Follathe6aef9f2016-03-16 16:39:41 +0000159 unsigned char hash_result[1000];
Janos Follathe6aef9f2016-03-16 16:39:41 +0000160 mbedtls_rsa_context ctx;
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100161 mbedtls_mpi N, E;
Janos Follathe6aef9f2016-03-16 16:39:41 +0000162 ((void) salt);
163
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100164 mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000165 mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000166 memset( hash_result, 0x00, 1000 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000167
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100168 TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 );
169 TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 );
170 TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 );
171 TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000172 TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 );
173
Janos Follathe6aef9f2016-03-16 16:39:41 +0000174
175 if( mbedtls_md_info_from_type( digest ) != NULL )
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100176 TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ),
177 message_str, msg_len, hash_result ) == 0 );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000178
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100179 TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC,
180 digest, 0, hash_result,
181 result_str ) == result );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000182
183exit:
Hanno Becker6d43f9e2017-08-23 06:35:17 +0100184 mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E );
Janos Follathe6aef9f2016-03-16 16:39:41 +0000185 mbedtls_rsa_free( &ctx );
186}
187/* END_CASE */