Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbedtls by
tests/suites/test_suite_pk.function@1:9ebc941037d5, 2017-09-29 (annotated)
- Committer:
- Jasper Wallace
- Date:
- Fri Sep 29 18:41:59 2017 +0100
- Revision:
- 1:9ebc941037d5
- Parent:
- 0:cdf462088d13
Update to mbedtls 2.4.2, security fixes
Changes to mbedtls sources made:
in include/mbedtls/config.h comment out:
#define MBEDTLS_FS_IO
#define MBEDTLS_NET_C
#define MBEDTLS_TIMING_C
uncomment:
#define MBEDTLS_NO_PLATFORM_ENTROPY
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
markrad | 0:cdf462088d13 | 1 | /* BEGIN_HEADER */ |
markrad | 0:cdf462088d13 | 2 | #include "mbedtls/pk.h" |
markrad | 0:cdf462088d13 | 3 | |
markrad | 0:cdf462088d13 | 4 | /* For error codes */ |
markrad | 0:cdf462088d13 | 5 | #include "mbedtls/ecp.h" |
markrad | 0:cdf462088d13 | 6 | #include "mbedtls/rsa.h" |
markrad | 0:cdf462088d13 | 7 | |
Jasper Wallace |
1:9ebc941037d5 | 8 | /* For detecting 64-bit compilation */ |
Jasper Wallace |
1:9ebc941037d5 | 9 | #include "mbedtls/bignum.h" |
Jasper Wallace |
1:9ebc941037d5 | 10 | |
markrad | 0:cdf462088d13 | 11 | static int rnd_std_rand( void *rng_state, unsigned char *output, size_t len ); |
markrad | 0:cdf462088d13 | 12 | |
markrad | 0:cdf462088d13 | 13 | #define RSA_KEY_SIZE 512 |
markrad | 0:cdf462088d13 | 14 | #define RSA_KEY_LEN 64 |
markrad | 0:cdf462088d13 | 15 | |
markrad | 0:cdf462088d13 | 16 | static int pk_genkey( mbedtls_pk_context *pk ) |
markrad | 0:cdf462088d13 | 17 | { |
markrad | 0:cdf462088d13 | 18 | ((void) pk); |
markrad | 0:cdf462088d13 | 19 | |
markrad | 0:cdf462088d13 | 20 | #if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_GENPRIME) |
markrad | 0:cdf462088d13 | 21 | if( mbedtls_pk_get_type( pk ) == MBEDTLS_PK_RSA ) |
markrad | 0:cdf462088d13 | 22 | return mbedtls_rsa_gen_key( mbedtls_pk_rsa( *pk ), rnd_std_rand, NULL, RSA_KEY_SIZE, 3 ); |
markrad | 0:cdf462088d13 | 23 | #endif |
markrad | 0:cdf462088d13 | 24 | #if defined(MBEDTLS_ECP_C) |
markrad | 0:cdf462088d13 | 25 | if( mbedtls_pk_get_type( pk ) == MBEDTLS_PK_ECKEY || |
markrad | 0:cdf462088d13 | 26 | mbedtls_pk_get_type( pk ) == MBEDTLS_PK_ECKEY_DH || |
markrad | 0:cdf462088d13 | 27 | mbedtls_pk_get_type( pk ) == MBEDTLS_PK_ECDSA ) |
markrad | 0:cdf462088d13 | 28 | { |
markrad | 0:cdf462088d13 | 29 | int ret; |
markrad | 0:cdf462088d13 | 30 | if( ( ret = mbedtls_ecp_group_load( &mbedtls_pk_ec( *pk )->grp, |
markrad | 0:cdf462088d13 | 31 | MBEDTLS_ECP_DP_SECP192R1 ) ) != 0 ) |
markrad | 0:cdf462088d13 | 32 | return( ret ); |
markrad | 0:cdf462088d13 | 33 | |
markrad | 0:cdf462088d13 | 34 | return mbedtls_ecp_gen_keypair( &mbedtls_pk_ec( *pk )->grp, &mbedtls_pk_ec( *pk )->d, |
markrad | 0:cdf462088d13 | 35 | &mbedtls_pk_ec( *pk )->Q, rnd_std_rand, NULL ); |
markrad | 0:cdf462088d13 | 36 | } |
markrad | 0:cdf462088d13 | 37 | #endif |
markrad | 0:cdf462088d13 | 38 | return( -1 ); |
markrad | 0:cdf462088d13 | 39 | } |
markrad | 0:cdf462088d13 | 40 | |
markrad | 0:cdf462088d13 | 41 | #if defined(MBEDTLS_RSA_C) |
markrad | 0:cdf462088d13 | 42 | int mbedtls_rsa_decrypt_func( void *ctx, int mode, size_t *olen, |
markrad | 0:cdf462088d13 | 43 | const unsigned char *input, unsigned char *output, |
markrad | 0:cdf462088d13 | 44 | size_t output_max_len ) |
markrad | 0:cdf462088d13 | 45 | { |
markrad | 0:cdf462088d13 | 46 | return( mbedtls_rsa_pkcs1_decrypt( (mbedtls_rsa_context *) ctx, NULL, NULL, mode, olen, |
markrad | 0:cdf462088d13 | 47 | input, output, output_max_len ) ); |
markrad | 0:cdf462088d13 | 48 | } |
markrad | 0:cdf462088d13 | 49 | int mbedtls_rsa_sign_func( void *ctx, |
markrad | 0:cdf462088d13 | 50 | int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, |
markrad | 0:cdf462088d13 | 51 | int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, |
markrad | 0:cdf462088d13 | 52 | const unsigned char *hash, unsigned char *sig ) |
markrad | 0:cdf462088d13 | 53 | { |
markrad | 0:cdf462088d13 | 54 | return( mbedtls_rsa_pkcs1_sign( (mbedtls_rsa_context *) ctx, f_rng, p_rng, mode, |
markrad | 0:cdf462088d13 | 55 | md_alg, hashlen, hash, sig ) ); |
markrad | 0:cdf462088d13 | 56 | } |
markrad | 0:cdf462088d13 | 57 | size_t mbedtls_rsa_key_len_func( void *ctx ) |
markrad | 0:cdf462088d13 | 58 | { |
markrad | 0:cdf462088d13 | 59 | return( ((const mbedtls_rsa_context *) ctx)->len ); |
markrad | 0:cdf462088d13 | 60 | } |
markrad | 0:cdf462088d13 | 61 | #endif /* MBEDTLS_RSA_C */ |
markrad | 0:cdf462088d13 | 62 | /* END_HEADER */ |
markrad | 0:cdf462088d13 | 63 | |
markrad | 0:cdf462088d13 | 64 | /* BEGIN_DEPENDENCIES |
markrad | 0:cdf462088d13 | 65 | * depends_on:MBEDTLS_PK_C |
markrad | 0:cdf462088d13 | 66 | * END_DEPENDENCIES |
markrad | 0:cdf462088d13 | 67 | */ |
markrad | 0:cdf462088d13 | 68 | |
markrad | 0:cdf462088d13 | 69 | /* BEGIN_CASE */ |
markrad | 0:cdf462088d13 | 70 | void pk_utils( int type, int size, int len, char *name ) |
markrad | 0:cdf462088d13 | 71 | { |
markrad | 0:cdf462088d13 | 72 | mbedtls_pk_context pk; |
markrad | 0:cdf462088d13 | 73 | |
markrad | 0:cdf462088d13 | 74 | mbedtls_pk_init( &pk ); |
markrad | 0:cdf462088d13 | 75 | |
markrad | 0:cdf462088d13 | 76 | TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( type ) ) == 0 ); |
markrad | 0:cdf462088d13 | 77 | TEST_ASSERT( pk_genkey( &pk ) == 0 ); |
markrad | 0:cdf462088d13 | 78 | |
markrad | 0:cdf462088d13 | 79 | TEST_ASSERT( (int) mbedtls_pk_get_type( &pk ) == type ); |
markrad | 0:cdf462088d13 | 80 | TEST_ASSERT( mbedtls_pk_can_do( &pk, type ) ); |
markrad | 0:cdf462088d13 | 81 | TEST_ASSERT( mbedtls_pk_get_bitlen( &pk ) == (unsigned) size ); |
markrad | 0:cdf462088d13 | 82 | TEST_ASSERT( mbedtls_pk_get_len( &pk ) == (unsigned) len ); |
markrad | 0:cdf462088d13 | 83 | TEST_ASSERT( strcmp( mbedtls_pk_get_name( &pk), name ) == 0 ); |
markrad | 0:cdf462088d13 | 84 | |
markrad | 0:cdf462088d13 | 85 | exit: |
markrad | 0:cdf462088d13 | 86 | mbedtls_pk_free( &pk ); |
markrad | 0:cdf462088d13 | 87 | } |
markrad | 0:cdf462088d13 | 88 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 89 | |
markrad | 0:cdf462088d13 | 90 | /* BEGIN_CASE depends_on:MBEDTLS_PK_PARSE_C:MBEDTLS_FS_IO */ |
markrad | 0:cdf462088d13 | 91 | void mbedtls_pk_check_pair( char *pub_file, char *prv_file, int ret ) |
markrad | 0:cdf462088d13 | 92 | { |
markrad | 0:cdf462088d13 | 93 | mbedtls_pk_context pub, prv, alt; |
markrad | 0:cdf462088d13 | 94 | |
markrad | 0:cdf462088d13 | 95 | mbedtls_pk_init( &pub ); |
markrad | 0:cdf462088d13 | 96 | mbedtls_pk_init( &prv ); |
markrad | 0:cdf462088d13 | 97 | mbedtls_pk_init( &alt ); |
markrad | 0:cdf462088d13 | 98 | |
markrad | 0:cdf462088d13 | 99 | TEST_ASSERT( mbedtls_pk_parse_public_keyfile( &pub, pub_file ) == 0 ); |
markrad | 0:cdf462088d13 | 100 | TEST_ASSERT( mbedtls_pk_parse_keyfile( &prv, prv_file, NULL ) == 0 ); |
markrad | 0:cdf462088d13 | 101 | |
markrad | 0:cdf462088d13 | 102 | TEST_ASSERT( mbedtls_pk_check_pair( &pub, &prv ) == ret ); |
markrad | 0:cdf462088d13 | 103 | |
markrad | 0:cdf462088d13 | 104 | #if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_PK_RSA_ALT_SUPPORT) |
markrad | 0:cdf462088d13 | 105 | if( mbedtls_pk_get_type( &prv ) == MBEDTLS_PK_RSA ) |
markrad | 0:cdf462088d13 | 106 | { |
markrad | 0:cdf462088d13 | 107 | TEST_ASSERT( mbedtls_pk_setup_rsa_alt( &alt, mbedtls_pk_rsa( prv ), |
markrad | 0:cdf462088d13 | 108 | mbedtls_rsa_decrypt_func, mbedtls_rsa_sign_func, mbedtls_rsa_key_len_func ) == 0 ); |
markrad | 0:cdf462088d13 | 109 | TEST_ASSERT( mbedtls_pk_check_pair( &pub, &alt ) == ret ); |
markrad | 0:cdf462088d13 | 110 | } |
markrad | 0:cdf462088d13 | 111 | #endif |
markrad | 0:cdf462088d13 | 112 | |
markrad | 0:cdf462088d13 | 113 | mbedtls_pk_free( &pub ); |
markrad | 0:cdf462088d13 | 114 | mbedtls_pk_free( &prv ); |
markrad | 0:cdf462088d13 | 115 | mbedtls_pk_free( &alt ); |
markrad | 0:cdf462088d13 | 116 | } |
markrad | 0:cdf462088d13 | 117 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 118 | |
markrad | 0:cdf462088d13 | 119 | /* BEGIN_CASE depends_on:MBEDTLS_RSA_C */ |
markrad | 0:cdf462088d13 | 120 | void pk_rsa_verify_test_vec( char *message_hex_string, int digest, |
markrad | 0:cdf462088d13 | 121 | int mod, int radix_N, char *input_N, int radix_E, |
markrad | 0:cdf462088d13 | 122 | char *input_E, char *result_hex_str, int result ) |
markrad | 0:cdf462088d13 | 123 | { |
markrad | 0:cdf462088d13 | 124 | unsigned char message_str[1000]; |
markrad | 0:cdf462088d13 | 125 | unsigned char hash_result[1000]; |
markrad | 0:cdf462088d13 | 126 | unsigned char result_str[1000]; |
markrad | 0:cdf462088d13 | 127 | mbedtls_rsa_context *rsa; |
markrad | 0:cdf462088d13 | 128 | mbedtls_pk_context pk; |
markrad | 0:cdf462088d13 | 129 | int msg_len; |
markrad | 0:cdf462088d13 | 130 | |
markrad | 0:cdf462088d13 | 131 | mbedtls_pk_init( &pk ); |
markrad | 0:cdf462088d13 | 132 | |
markrad | 0:cdf462088d13 | 133 | memset( message_str, 0x00, 1000 ); |
markrad | 0:cdf462088d13 | 134 | memset( hash_result, 0x00, 1000 ); |
markrad | 0:cdf462088d13 | 135 | memset( result_str, 0x00, 1000 ); |
markrad | 0:cdf462088d13 | 136 | |
markrad | 0:cdf462088d13 | 137 | TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); |
markrad | 0:cdf462088d13 | 138 | rsa = mbedtls_pk_rsa( pk ); |
markrad | 0:cdf462088d13 | 139 | |
markrad | 0:cdf462088d13 | 140 | rsa->len = mod / 8; |
markrad | 0:cdf462088d13 | 141 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->N, radix_N, input_N ) == 0 ); |
markrad | 0:cdf462088d13 | 142 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->E, radix_E, input_E ) == 0 ); |
markrad | 0:cdf462088d13 | 143 | |
markrad | 0:cdf462088d13 | 144 | msg_len = unhexify( message_str, message_hex_string ); |
markrad | 0:cdf462088d13 | 145 | unhexify( result_str, result_hex_str ); |
markrad | 0:cdf462088d13 | 146 | |
markrad | 0:cdf462088d13 | 147 | if( mbedtls_md_info_from_type( digest ) != NULL ) |
markrad | 0:cdf462088d13 | 148 | TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str, msg_len, hash_result ) == 0 ); |
markrad | 0:cdf462088d13 | 149 | |
markrad | 0:cdf462088d13 | 150 | TEST_ASSERT( mbedtls_pk_verify( &pk, digest, hash_result, 0, |
markrad | 0:cdf462088d13 | 151 | result_str, mbedtls_pk_get_len( &pk ) ) == result ); |
markrad | 0:cdf462088d13 | 152 | |
markrad | 0:cdf462088d13 | 153 | exit: |
markrad | 0:cdf462088d13 | 154 | mbedtls_pk_free( &pk ); |
markrad | 0:cdf462088d13 | 155 | } |
markrad | 0:cdf462088d13 | 156 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 157 | |
markrad | 0:cdf462088d13 | 158 | /* BEGIN_CASE depends_on:MBEDTLS_RSA_C */ |
markrad | 0:cdf462088d13 | 159 | void pk_rsa_verify_ext_test_vec( char *message_hex_string, int digest, |
markrad | 0:cdf462088d13 | 160 | int mod, int radix_N, char *input_N, int radix_E, |
markrad | 0:cdf462088d13 | 161 | char *input_E, char *result_hex_str, |
markrad | 0:cdf462088d13 | 162 | int pk_type, int mgf1_hash_id, int salt_len, |
markrad | 0:cdf462088d13 | 163 | int result ) |
markrad | 0:cdf462088d13 | 164 | { |
markrad | 0:cdf462088d13 | 165 | unsigned char message_str[1000]; |
markrad | 0:cdf462088d13 | 166 | unsigned char hash_result[1000]; |
markrad | 0:cdf462088d13 | 167 | unsigned char result_str[1000]; |
markrad | 0:cdf462088d13 | 168 | mbedtls_rsa_context *rsa; |
markrad | 0:cdf462088d13 | 169 | mbedtls_pk_context pk; |
markrad | 0:cdf462088d13 | 170 | mbedtls_pk_rsassa_pss_options pss_opts; |
markrad | 0:cdf462088d13 | 171 | void *options; |
markrad | 0:cdf462088d13 | 172 | int msg_len; |
markrad | 0:cdf462088d13 | 173 | size_t hash_len; |
markrad | 0:cdf462088d13 | 174 | |
markrad | 0:cdf462088d13 | 175 | mbedtls_pk_init( &pk ); |
markrad | 0:cdf462088d13 | 176 | |
markrad | 0:cdf462088d13 | 177 | memset( message_str, 0x00, 1000 ); |
markrad | 0:cdf462088d13 | 178 | memset( hash_result, 0x00, 1000 ); |
markrad | 0:cdf462088d13 | 179 | memset( result_str, 0x00, 1000 ); |
markrad | 0:cdf462088d13 | 180 | |
markrad | 0:cdf462088d13 | 181 | TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); |
markrad | 0:cdf462088d13 | 182 | rsa = mbedtls_pk_rsa( pk ); |
markrad | 0:cdf462088d13 | 183 | |
markrad | 0:cdf462088d13 | 184 | rsa->len = mod / 8; |
markrad | 0:cdf462088d13 | 185 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->N, radix_N, input_N ) == 0 ); |
markrad | 0:cdf462088d13 | 186 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->E, radix_E, input_E ) == 0 ); |
markrad | 0:cdf462088d13 | 187 | |
markrad | 0:cdf462088d13 | 188 | msg_len = unhexify( message_str, message_hex_string ); |
markrad | 0:cdf462088d13 | 189 | unhexify( result_str, result_hex_str ); |
markrad | 0:cdf462088d13 | 190 | |
markrad | 0:cdf462088d13 | 191 | if( digest != MBEDTLS_MD_NONE ) |
markrad | 0:cdf462088d13 | 192 | { |
markrad | 0:cdf462088d13 | 193 | TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), |
markrad | 0:cdf462088d13 | 194 | message_str, msg_len, hash_result ) == 0 ); |
markrad | 0:cdf462088d13 | 195 | hash_len = 0; |
markrad | 0:cdf462088d13 | 196 | } |
markrad | 0:cdf462088d13 | 197 | else |
markrad | 0:cdf462088d13 | 198 | { |
markrad | 0:cdf462088d13 | 199 | memcpy( hash_result, message_str, msg_len ); |
markrad | 0:cdf462088d13 | 200 | hash_len = msg_len; |
markrad | 0:cdf462088d13 | 201 | } |
markrad | 0:cdf462088d13 | 202 | |
markrad | 0:cdf462088d13 | 203 | if( mgf1_hash_id < 0 ) |
markrad | 0:cdf462088d13 | 204 | { |
markrad | 0:cdf462088d13 | 205 | options = NULL; |
markrad | 0:cdf462088d13 | 206 | } |
markrad | 0:cdf462088d13 | 207 | else |
markrad | 0:cdf462088d13 | 208 | { |
markrad | 0:cdf462088d13 | 209 | options = &pss_opts; |
markrad | 0:cdf462088d13 | 210 | |
markrad | 0:cdf462088d13 | 211 | pss_opts.mgf1_hash_id = mgf1_hash_id; |
markrad | 0:cdf462088d13 | 212 | pss_opts.expected_salt_len = salt_len; |
markrad | 0:cdf462088d13 | 213 | } |
markrad | 0:cdf462088d13 | 214 | |
markrad | 0:cdf462088d13 | 215 | TEST_ASSERT( mbedtls_pk_verify_ext( pk_type, options, &pk, |
markrad | 0:cdf462088d13 | 216 | digest, hash_result, hash_len, |
markrad | 0:cdf462088d13 | 217 | result_str, mbedtls_pk_get_len( &pk ) ) == result ); |
markrad | 0:cdf462088d13 | 218 | |
markrad | 0:cdf462088d13 | 219 | exit: |
markrad | 0:cdf462088d13 | 220 | mbedtls_pk_free( &pk ); |
markrad | 0:cdf462088d13 | 221 | } |
markrad | 0:cdf462088d13 | 222 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 223 | |
markrad | 0:cdf462088d13 | 224 | /* BEGIN_CASE depends_on:MBEDTLS_ECDSA_C */ |
markrad | 0:cdf462088d13 | 225 | void pk_ec_test_vec( int type, int id, char *key_str, |
markrad | 0:cdf462088d13 | 226 | char *hash_str, char * sig_str, int ret ) |
markrad | 0:cdf462088d13 | 227 | { |
markrad | 0:cdf462088d13 | 228 | mbedtls_pk_context pk; |
markrad | 0:cdf462088d13 | 229 | mbedtls_ecp_keypair *eckey; |
markrad | 0:cdf462088d13 | 230 | unsigned char hash[100], sig[500], key[500]; |
markrad | 0:cdf462088d13 | 231 | size_t hash_len, sig_len, key_len; |
markrad | 0:cdf462088d13 | 232 | |
markrad | 0:cdf462088d13 | 233 | mbedtls_pk_init( &pk ); |
markrad | 0:cdf462088d13 | 234 | |
markrad | 0:cdf462088d13 | 235 | memset( hash, 0, sizeof( hash ) ); hash_len = unhexify(hash, hash_str); |
markrad | 0:cdf462088d13 | 236 | memset( sig, 0, sizeof( sig ) ); sig_len = unhexify(sig, sig_str); |
markrad | 0:cdf462088d13 | 237 | memset( key, 0, sizeof( key ) ); key_len = unhexify(key, key_str); |
markrad | 0:cdf462088d13 | 238 | |
markrad | 0:cdf462088d13 | 239 | TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( type ) ) == 0 ); |
markrad | 0:cdf462088d13 | 240 | |
markrad | 0:cdf462088d13 | 241 | TEST_ASSERT( mbedtls_pk_can_do( &pk, MBEDTLS_PK_ECDSA ) ); |
markrad | 0:cdf462088d13 | 242 | eckey = mbedtls_pk_ec( pk ); |
markrad | 0:cdf462088d13 | 243 | |
markrad | 0:cdf462088d13 | 244 | TEST_ASSERT( mbedtls_ecp_group_load( &eckey->grp, id ) == 0 ); |
markrad | 0:cdf462088d13 | 245 | TEST_ASSERT( mbedtls_ecp_point_read_binary( &eckey->grp, &eckey->Q, |
markrad | 0:cdf462088d13 | 246 | key, key_len ) == 0 ); |
markrad | 0:cdf462088d13 | 247 | |
markrad | 0:cdf462088d13 | 248 | TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_NONE, |
markrad | 0:cdf462088d13 | 249 | hash, hash_len, sig, sig_len ) == ret ); |
markrad | 0:cdf462088d13 | 250 | |
markrad | 0:cdf462088d13 | 251 | exit: |
markrad | 0:cdf462088d13 | 252 | mbedtls_pk_free( &pk ); |
markrad | 0:cdf462088d13 | 253 | } |
markrad | 0:cdf462088d13 | 254 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 255 | |
markrad | 0:cdf462088d13 | 256 | /* BEGIN_CASE depends_on:MBEDTLS_SHA256_C */ |
markrad | 0:cdf462088d13 | 257 | void pk_sign_verify( int type, int sign_ret, int verify_ret ) |
markrad | 0:cdf462088d13 | 258 | { |
markrad | 0:cdf462088d13 | 259 | mbedtls_pk_context pk; |
markrad | 0:cdf462088d13 | 260 | unsigned char hash[50], sig[5000]; |
markrad | 0:cdf462088d13 | 261 | size_t sig_len; |
markrad | 0:cdf462088d13 | 262 | |
markrad | 0:cdf462088d13 | 263 | mbedtls_pk_init( &pk ); |
markrad | 0:cdf462088d13 | 264 | |
markrad | 0:cdf462088d13 | 265 | memset( hash, 0x2a, sizeof hash ); |
markrad | 0:cdf462088d13 | 266 | memset( sig, 0, sizeof sig ); |
markrad | 0:cdf462088d13 | 267 | |
markrad | 0:cdf462088d13 | 268 | TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( type ) ) == 0 ); |
markrad | 0:cdf462088d13 | 269 | TEST_ASSERT( pk_genkey( &pk ) == 0 ); |
markrad | 0:cdf462088d13 | 270 | |
markrad | 0:cdf462088d13 | 271 | TEST_ASSERT( mbedtls_pk_sign( &pk, MBEDTLS_MD_SHA256, hash, sizeof hash, |
markrad | 0:cdf462088d13 | 272 | sig, &sig_len, rnd_std_rand, NULL ) == sign_ret ); |
markrad | 0:cdf462088d13 | 273 | |
markrad | 0:cdf462088d13 | 274 | TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_SHA256, |
markrad | 0:cdf462088d13 | 275 | hash, sizeof hash, sig, sig_len ) == verify_ret ); |
markrad | 0:cdf462088d13 | 276 | |
markrad | 0:cdf462088d13 | 277 | exit: |
markrad | 0:cdf462088d13 | 278 | mbedtls_pk_free( &pk ); |
markrad | 0:cdf462088d13 | 279 | } |
markrad | 0:cdf462088d13 | 280 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 281 | |
markrad | 0:cdf462088d13 | 282 | /* BEGIN_CASE depends_on:MBEDTLS_RSA_C */ |
markrad | 0:cdf462088d13 | 283 | void pk_rsa_encrypt_test_vec( char *message_hex, int mod, |
markrad | 0:cdf462088d13 | 284 | int radix_N, char *input_N, |
markrad | 0:cdf462088d13 | 285 | int radix_E, char *input_E, |
markrad | 0:cdf462088d13 | 286 | char *result_hex, int ret ) |
markrad | 0:cdf462088d13 | 287 | { |
markrad | 0:cdf462088d13 | 288 | unsigned char message[1000]; |
markrad | 0:cdf462088d13 | 289 | unsigned char output[1000]; |
markrad | 0:cdf462088d13 | 290 | unsigned char result[1000]; |
markrad | 0:cdf462088d13 | 291 | size_t msg_len, olen, res_len; |
markrad | 0:cdf462088d13 | 292 | rnd_pseudo_info rnd_info; |
markrad | 0:cdf462088d13 | 293 | mbedtls_rsa_context *rsa; |
markrad | 0:cdf462088d13 | 294 | mbedtls_pk_context pk; |
markrad | 0:cdf462088d13 | 295 | |
markrad | 0:cdf462088d13 | 296 | memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) ); |
markrad | 0:cdf462088d13 | 297 | memset( message, 0, sizeof( message ) ); |
markrad | 0:cdf462088d13 | 298 | memset( output, 0, sizeof( output ) ); |
markrad | 0:cdf462088d13 | 299 | memset( result, 0, sizeof( result ) ); |
markrad | 0:cdf462088d13 | 300 | |
markrad | 0:cdf462088d13 | 301 | msg_len = unhexify( message, message_hex ); |
markrad | 0:cdf462088d13 | 302 | res_len = unhexify( result, result_hex ); |
markrad | 0:cdf462088d13 | 303 | |
markrad | 0:cdf462088d13 | 304 | mbedtls_pk_init( &pk ); |
markrad | 0:cdf462088d13 | 305 | TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); |
markrad | 0:cdf462088d13 | 306 | rsa = mbedtls_pk_rsa( pk ); |
markrad | 0:cdf462088d13 | 307 | |
markrad | 0:cdf462088d13 | 308 | rsa->len = mod / 8; |
markrad | 0:cdf462088d13 | 309 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->N, radix_N, input_N ) == 0 ); |
markrad | 0:cdf462088d13 | 310 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->E, radix_E, input_E ) == 0 ); |
markrad | 0:cdf462088d13 | 311 | |
markrad | 0:cdf462088d13 | 312 | TEST_ASSERT( mbedtls_pk_encrypt( &pk, message, msg_len, |
markrad | 0:cdf462088d13 | 313 | output, &olen, sizeof( output ), |
markrad | 0:cdf462088d13 | 314 | rnd_pseudo_rand, &rnd_info ) == ret ); |
markrad | 0:cdf462088d13 | 315 | TEST_ASSERT( olen == res_len ); |
markrad | 0:cdf462088d13 | 316 | TEST_ASSERT( memcmp( output, result, olen ) == 0 ); |
markrad | 0:cdf462088d13 | 317 | |
markrad | 0:cdf462088d13 | 318 | exit: |
markrad | 0:cdf462088d13 | 319 | mbedtls_pk_free( &pk ); |
markrad | 0:cdf462088d13 | 320 | } |
markrad | 0:cdf462088d13 | 321 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 322 | |
markrad | 0:cdf462088d13 | 323 | /* BEGIN_CASE depends_on:MBEDTLS_RSA_C */ |
markrad | 0:cdf462088d13 | 324 | void pk_rsa_decrypt_test_vec( char *cipher_hex, int mod, |
markrad | 0:cdf462088d13 | 325 | int radix_P, char *input_P, |
markrad | 0:cdf462088d13 | 326 | int radix_Q, char *input_Q, |
markrad | 0:cdf462088d13 | 327 | int radix_N, char *input_N, |
markrad | 0:cdf462088d13 | 328 | int radix_E, char *input_E, |
markrad | 0:cdf462088d13 | 329 | char *clear_hex, int ret ) |
markrad | 0:cdf462088d13 | 330 | { |
markrad | 0:cdf462088d13 | 331 | unsigned char clear[1000]; |
markrad | 0:cdf462088d13 | 332 | unsigned char output[1000]; |
markrad | 0:cdf462088d13 | 333 | unsigned char cipher[1000]; |
markrad | 0:cdf462088d13 | 334 | size_t clear_len, olen, cipher_len; |
markrad | 0:cdf462088d13 | 335 | rnd_pseudo_info rnd_info; |
markrad | 0:cdf462088d13 | 336 | mbedtls_mpi P1, Q1, H, G; |
markrad | 0:cdf462088d13 | 337 | mbedtls_rsa_context *rsa; |
markrad | 0:cdf462088d13 | 338 | mbedtls_pk_context pk; |
markrad | 0:cdf462088d13 | 339 | |
markrad | 0:cdf462088d13 | 340 | mbedtls_pk_init( &pk ); |
markrad | 0:cdf462088d13 | 341 | mbedtls_mpi_init( &P1 ); mbedtls_mpi_init( &Q1 ); mbedtls_mpi_init( &H ); mbedtls_mpi_init( &G ); |
markrad | 0:cdf462088d13 | 342 | |
markrad | 0:cdf462088d13 | 343 | memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) ); |
markrad | 0:cdf462088d13 | 344 | memset( clear, 0, sizeof( clear ) ); |
markrad | 0:cdf462088d13 | 345 | memset( cipher, 0, sizeof( cipher ) ); |
markrad | 0:cdf462088d13 | 346 | |
markrad | 0:cdf462088d13 | 347 | clear_len = unhexify( clear, clear_hex ); |
markrad | 0:cdf462088d13 | 348 | cipher_len = unhexify( cipher, cipher_hex ); |
markrad | 0:cdf462088d13 | 349 | |
markrad | 0:cdf462088d13 | 350 | /* init pk-rsa context */ |
markrad | 0:cdf462088d13 | 351 | TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); |
markrad | 0:cdf462088d13 | 352 | rsa = mbedtls_pk_rsa( pk ); |
markrad | 0:cdf462088d13 | 353 | |
markrad | 0:cdf462088d13 | 354 | /* load public key */ |
markrad | 0:cdf462088d13 | 355 | rsa->len = mod / 8; |
markrad | 0:cdf462088d13 | 356 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->N, radix_N, input_N ) == 0 ); |
markrad | 0:cdf462088d13 | 357 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->E, radix_E, input_E ) == 0 ); |
markrad | 0:cdf462088d13 | 358 | |
markrad | 0:cdf462088d13 | 359 | /* load private key */ |
markrad | 0:cdf462088d13 | 360 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->P, radix_P, input_P ) == 0 ); |
markrad | 0:cdf462088d13 | 361 | TEST_ASSERT( mbedtls_mpi_read_string( &rsa->Q, radix_Q, input_Q ) == 0 ); |
markrad | 0:cdf462088d13 | 362 | TEST_ASSERT( mbedtls_mpi_sub_int( &P1, &rsa->P, 1 ) == 0 ); |
markrad | 0:cdf462088d13 | 363 | TEST_ASSERT( mbedtls_mpi_sub_int( &Q1, &rsa->Q, 1 ) == 0 ); |
markrad | 0:cdf462088d13 | 364 | TEST_ASSERT( mbedtls_mpi_mul_mpi( &H, &P1, &Q1 ) == 0 ); |
markrad | 0:cdf462088d13 | 365 | TEST_ASSERT( mbedtls_mpi_gcd( &G, &rsa->E, &H ) == 0 ); |
markrad | 0:cdf462088d13 | 366 | TEST_ASSERT( mbedtls_mpi_inv_mod( &rsa->D , &rsa->E, &H ) == 0 ); |
markrad | 0:cdf462088d13 | 367 | TEST_ASSERT( mbedtls_mpi_mod_mpi( &rsa->DP, &rsa->D, &P1 ) == 0 ); |
markrad | 0:cdf462088d13 | 368 | TEST_ASSERT( mbedtls_mpi_mod_mpi( &rsa->DQ, &rsa->D, &Q1 ) == 0 ); |
markrad | 0:cdf462088d13 | 369 | TEST_ASSERT( mbedtls_mpi_inv_mod( &rsa->QP, &rsa->Q, &rsa->P ) == 0 ); |
markrad | 0:cdf462088d13 | 370 | |
markrad | 0:cdf462088d13 | 371 | /* decryption test */ |
markrad | 0:cdf462088d13 | 372 | memset( output, 0, sizeof( output ) ); |
markrad | 0:cdf462088d13 | 373 | olen = 0; |
markrad | 0:cdf462088d13 | 374 | TEST_ASSERT( mbedtls_pk_decrypt( &pk, cipher, cipher_len, |
markrad | 0:cdf462088d13 | 375 | output, &olen, sizeof( output ), |
markrad | 0:cdf462088d13 | 376 | rnd_pseudo_rand, &rnd_info ) == ret ); |
markrad | 0:cdf462088d13 | 377 | if( ret == 0 ) |
markrad | 0:cdf462088d13 | 378 | { |
markrad | 0:cdf462088d13 | 379 | TEST_ASSERT( olen == clear_len ); |
markrad | 0:cdf462088d13 | 380 | TEST_ASSERT( memcmp( output, clear, olen ) == 0 ); |
markrad | 0:cdf462088d13 | 381 | } |
markrad | 0:cdf462088d13 | 382 | |
markrad | 0:cdf462088d13 | 383 | exit: |
markrad | 0:cdf462088d13 | 384 | mbedtls_mpi_free( &P1 ); mbedtls_mpi_free( &Q1 ); mbedtls_mpi_free( &H ); mbedtls_mpi_free( &G ); |
markrad | 0:cdf462088d13 | 385 | mbedtls_pk_free( &pk ); |
markrad | 0:cdf462088d13 | 386 | } |
markrad | 0:cdf462088d13 | 387 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 388 | |
markrad | 0:cdf462088d13 | 389 | /* BEGIN_CASE */ |
markrad | 0:cdf462088d13 | 390 | void pk_ec_nocrypt( int type ) |
markrad | 0:cdf462088d13 | 391 | { |
markrad | 0:cdf462088d13 | 392 | mbedtls_pk_context pk; |
markrad | 0:cdf462088d13 | 393 | unsigned char output[100]; |
markrad | 0:cdf462088d13 | 394 | unsigned char input[100]; |
markrad | 0:cdf462088d13 | 395 | rnd_pseudo_info rnd_info; |
markrad | 0:cdf462088d13 | 396 | size_t olen = 0; |
markrad | 0:cdf462088d13 | 397 | int ret = MBEDTLS_ERR_PK_TYPE_MISMATCH; |
markrad | 0:cdf462088d13 | 398 | |
markrad | 0:cdf462088d13 | 399 | mbedtls_pk_init( &pk ); |
markrad | 0:cdf462088d13 | 400 | |
markrad | 0:cdf462088d13 | 401 | memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) ); |
markrad | 0:cdf462088d13 | 402 | memset( output, 0, sizeof( output ) ); |
markrad | 0:cdf462088d13 | 403 | memset( input, 0, sizeof( input ) ); |
markrad | 0:cdf462088d13 | 404 | |
markrad | 0:cdf462088d13 | 405 | TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( type ) ) == 0 ); |
markrad | 0:cdf462088d13 | 406 | |
markrad | 0:cdf462088d13 | 407 | TEST_ASSERT( mbedtls_pk_encrypt( &pk, input, sizeof( input ), |
markrad | 0:cdf462088d13 | 408 | output, &olen, sizeof( output ), |
markrad | 0:cdf462088d13 | 409 | rnd_pseudo_rand, &rnd_info ) == ret ); |
markrad | 0:cdf462088d13 | 410 | |
markrad | 0:cdf462088d13 | 411 | TEST_ASSERT( mbedtls_pk_decrypt( &pk, input, sizeof( input ), |
markrad | 0:cdf462088d13 | 412 | output, &olen, sizeof( output ), |
markrad | 0:cdf462088d13 | 413 | rnd_pseudo_rand, &rnd_info ) == ret ); |
markrad | 0:cdf462088d13 | 414 | |
markrad | 0:cdf462088d13 | 415 | exit: |
markrad | 0:cdf462088d13 | 416 | mbedtls_pk_free( &pk ); |
markrad | 0:cdf462088d13 | 417 | } |
markrad | 0:cdf462088d13 | 418 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 419 | |
Jasper Wallace |
1:9ebc941037d5 | 420 | /* BEGIN_CASE depends_on:MBEDTLS_RSA_C:MBEDTLS_HAVE_INT64 */ |
Jasper Wallace |
1:9ebc941037d5 | 421 | void pk_rsa_overflow( ) |
Jasper Wallace |
1:9ebc941037d5 | 422 | { |
Jasper Wallace |
1:9ebc941037d5 | 423 | mbedtls_pk_context pk; |
Jasper Wallace |
1:9ebc941037d5 | 424 | size_t hash_len = (size_t)-1; |
Jasper Wallace |
1:9ebc941037d5 | 425 | |
Jasper Wallace |
1:9ebc941037d5 | 426 | mbedtls_pk_init( &pk ); |
Jasper Wallace |
1:9ebc941037d5 | 427 | |
Jasper Wallace |
1:9ebc941037d5 | 428 | TEST_ASSERT( mbedtls_pk_setup( &pk, |
Jasper Wallace |
1:9ebc941037d5 | 429 | mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); |
Jasper Wallace |
1:9ebc941037d5 | 430 | |
Jasper Wallace |
1:9ebc941037d5 | 431 | #if defined(MBEDTLS_PKCS1_V21) |
Jasper Wallace |
1:9ebc941037d5 | 432 | TEST_ASSERT( mbedtls_pk_verify_ext( MBEDTLS_PK_RSASSA_PSS, NULL, &pk, |
Jasper Wallace |
1:9ebc941037d5 | 433 | MBEDTLS_MD_NONE, NULL, hash_len, NULL, 0 ) == |
Jasper Wallace |
1:9ebc941037d5 | 434 | MBEDTLS_ERR_PK_BAD_INPUT_DATA ); |
Jasper Wallace |
1:9ebc941037d5 | 435 | #endif /* MBEDTLS_PKCS1_V21 */ |
Jasper Wallace |
1:9ebc941037d5 | 436 | |
Jasper Wallace |
1:9ebc941037d5 | 437 | TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_NONE, NULL, hash_len, |
Jasper Wallace |
1:9ebc941037d5 | 438 | NULL, 0 ) == MBEDTLS_ERR_PK_BAD_INPUT_DATA ); |
Jasper Wallace |
1:9ebc941037d5 | 439 | |
Jasper Wallace |
1:9ebc941037d5 | 440 | TEST_ASSERT( mbedtls_pk_sign( &pk, MBEDTLS_MD_NONE, NULL, hash_len, NULL, 0, |
Jasper Wallace |
1:9ebc941037d5 | 441 | rnd_std_rand, NULL ) == MBEDTLS_ERR_PK_BAD_INPUT_DATA ); |
Jasper Wallace |
1:9ebc941037d5 | 442 | |
Jasper Wallace |
1:9ebc941037d5 | 443 | exit: |
Jasper Wallace |
1:9ebc941037d5 | 444 | mbedtls_pk_free( &pk ); |
Jasper Wallace |
1:9ebc941037d5 | 445 | } |
Jasper Wallace |
1:9ebc941037d5 | 446 | /* END_CASE */ |
Jasper Wallace |
1:9ebc941037d5 | 447 | |
markrad | 0:cdf462088d13 | 448 | /* BEGIN_CASE depends_on:MBEDTLS_RSA_C:MBEDTLS_PK_RSA_ALT_SUPPORT */ |
markrad | 0:cdf462088d13 | 449 | void pk_rsa_alt( ) |
markrad | 0:cdf462088d13 | 450 | { |
markrad | 0:cdf462088d13 | 451 | /* |
markrad | 0:cdf462088d13 | 452 | * An rsa_alt context can only do private operations (decrypt, sign). |
markrad | 0:cdf462088d13 | 453 | * Test it against the public operations (encrypt, verify) of a |
markrad | 0:cdf462088d13 | 454 | * corresponding rsa context. |
markrad | 0:cdf462088d13 | 455 | */ |
markrad | 0:cdf462088d13 | 456 | mbedtls_rsa_context raw; |
markrad | 0:cdf462088d13 | 457 | mbedtls_pk_context rsa, alt; |
markrad | 0:cdf462088d13 | 458 | mbedtls_pk_debug_item dbg_items[10]; |
markrad | 0:cdf462088d13 | 459 | unsigned char hash[50], sig[1000]; |
markrad | 0:cdf462088d13 | 460 | unsigned char msg[50], ciph[1000], test[1000]; |
markrad | 0:cdf462088d13 | 461 | size_t sig_len, ciph_len, test_len; |
markrad | 0:cdf462088d13 | 462 | int ret = MBEDTLS_ERR_PK_TYPE_MISMATCH; |
markrad | 0:cdf462088d13 | 463 | |
markrad | 0:cdf462088d13 | 464 | mbedtls_rsa_init( &raw, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_NONE ); |
markrad | 0:cdf462088d13 | 465 | mbedtls_pk_init( &rsa ); mbedtls_pk_init( &alt ); |
markrad | 0:cdf462088d13 | 466 | |
markrad | 0:cdf462088d13 | 467 | memset( hash, 0x2a, sizeof hash ); |
markrad | 0:cdf462088d13 | 468 | memset( sig, 0, sizeof sig ); |
markrad | 0:cdf462088d13 | 469 | memset( msg, 0x2a, sizeof msg ); |
markrad | 0:cdf462088d13 | 470 | memset( ciph, 0, sizeof ciph ); |
markrad | 0:cdf462088d13 | 471 | memset( test, 0, sizeof test ); |
markrad | 0:cdf462088d13 | 472 | |
markrad | 0:cdf462088d13 | 473 | /* Initiliaze PK RSA context with random key */ |
markrad | 0:cdf462088d13 | 474 | TEST_ASSERT( mbedtls_pk_setup( &rsa, |
markrad | 0:cdf462088d13 | 475 | mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); |
markrad | 0:cdf462088d13 | 476 | TEST_ASSERT( pk_genkey( &rsa ) == 0 ); |
markrad | 0:cdf462088d13 | 477 | |
markrad | 0:cdf462088d13 | 478 | /* Extract key to the raw rsa context */ |
markrad | 0:cdf462088d13 | 479 | TEST_ASSERT( mbedtls_rsa_copy( &raw, mbedtls_pk_rsa( rsa ) ) == 0 ); |
markrad | 0:cdf462088d13 | 480 | |
markrad | 0:cdf462088d13 | 481 | /* Initialize PK RSA_ALT context */ |
markrad | 0:cdf462088d13 | 482 | TEST_ASSERT( mbedtls_pk_setup_rsa_alt( &alt, (void *) &raw, |
markrad | 0:cdf462088d13 | 483 | mbedtls_rsa_decrypt_func, mbedtls_rsa_sign_func, mbedtls_rsa_key_len_func ) == 0 ); |
markrad | 0:cdf462088d13 | 484 | |
markrad | 0:cdf462088d13 | 485 | /* Test administrative functions */ |
markrad | 0:cdf462088d13 | 486 | TEST_ASSERT( mbedtls_pk_can_do( &alt, MBEDTLS_PK_RSA ) ); |
markrad | 0:cdf462088d13 | 487 | TEST_ASSERT( mbedtls_pk_get_bitlen( &alt ) == RSA_KEY_SIZE ); |
markrad | 0:cdf462088d13 | 488 | TEST_ASSERT( mbedtls_pk_get_len( &alt ) == RSA_KEY_LEN ); |
markrad | 0:cdf462088d13 | 489 | TEST_ASSERT( mbedtls_pk_get_type( &alt ) == MBEDTLS_PK_RSA_ALT ); |
markrad | 0:cdf462088d13 | 490 | TEST_ASSERT( strcmp( mbedtls_pk_get_name( &alt ), "RSA-alt" ) == 0 ); |
markrad | 0:cdf462088d13 | 491 | |
markrad | 0:cdf462088d13 | 492 | /* Test signature */ |
markrad | 0:cdf462088d13 | 493 | TEST_ASSERT( mbedtls_pk_sign( &alt, MBEDTLS_MD_NONE, hash, sizeof hash, |
markrad | 0:cdf462088d13 | 494 | sig, &sig_len, rnd_std_rand, NULL ) == 0 ); |
Jasper Wallace |
1:9ebc941037d5 | 495 | #if defined(MBEDTLS_HAVE_INT64) |
Jasper Wallace |
1:9ebc941037d5 | 496 | TEST_ASSERT( mbedtls_pk_sign( &alt, MBEDTLS_MD_NONE, hash, (size_t)-1, |
Jasper Wallace |
1:9ebc941037d5 | 497 | NULL, NULL, rnd_std_rand, NULL ) == |
Jasper Wallace |
1:9ebc941037d5 | 498 | MBEDTLS_ERR_PK_BAD_INPUT_DATA ); |
Jasper Wallace |
1:9ebc941037d5 | 499 | #endif /* MBEDTLS_HAVE_INT64 */ |
markrad | 0:cdf462088d13 | 500 | TEST_ASSERT( sig_len == RSA_KEY_LEN ); |
markrad | 0:cdf462088d13 | 501 | TEST_ASSERT( mbedtls_pk_verify( &rsa, MBEDTLS_MD_NONE, |
markrad | 0:cdf462088d13 | 502 | hash, sizeof hash, sig, sig_len ) == 0 ); |
markrad | 0:cdf462088d13 | 503 | |
markrad | 0:cdf462088d13 | 504 | /* Test decrypt */ |
markrad | 0:cdf462088d13 | 505 | TEST_ASSERT( mbedtls_pk_encrypt( &rsa, msg, sizeof msg, |
markrad | 0:cdf462088d13 | 506 | ciph, &ciph_len, sizeof ciph, |
markrad | 0:cdf462088d13 | 507 | rnd_std_rand, NULL ) == 0 ); |
markrad | 0:cdf462088d13 | 508 | TEST_ASSERT( mbedtls_pk_decrypt( &alt, ciph, ciph_len, |
markrad | 0:cdf462088d13 | 509 | test, &test_len, sizeof test, |
markrad | 0:cdf462088d13 | 510 | rnd_std_rand, NULL ) == 0 ); |
markrad | 0:cdf462088d13 | 511 | TEST_ASSERT( test_len == sizeof msg ); |
markrad | 0:cdf462088d13 | 512 | TEST_ASSERT( memcmp( test, msg, test_len ) == 0 ); |
markrad | 0:cdf462088d13 | 513 | |
markrad | 0:cdf462088d13 | 514 | /* Test forbidden operations */ |
markrad | 0:cdf462088d13 | 515 | TEST_ASSERT( mbedtls_pk_encrypt( &alt, msg, sizeof msg, |
markrad | 0:cdf462088d13 | 516 | ciph, &ciph_len, sizeof ciph, |
markrad | 0:cdf462088d13 | 517 | rnd_std_rand, NULL ) == ret ); |
markrad | 0:cdf462088d13 | 518 | TEST_ASSERT( mbedtls_pk_verify( &alt, MBEDTLS_MD_NONE, |
markrad | 0:cdf462088d13 | 519 | hash, sizeof hash, sig, sig_len ) == ret ); |
markrad | 0:cdf462088d13 | 520 | TEST_ASSERT( mbedtls_pk_debug( &alt, dbg_items ) == ret ); |
markrad | 0:cdf462088d13 | 521 | |
markrad | 0:cdf462088d13 | 522 | exit: |
markrad | 0:cdf462088d13 | 523 | mbedtls_rsa_free( &raw ); |
markrad | 0:cdf462088d13 | 524 | mbedtls_pk_free( &rsa ); mbedtls_pk_free( &alt ); |
markrad | 0:cdf462088d13 | 525 | } |
markrad | 0:cdf462088d13 | 526 | /* END_CASE */ |