test_suite_pkcs1_v21.function (10179B)
1 /* BEGIN_HEADER */ 2 #include "mbedtls/rsa.h" 3 /* END_HEADER */ 4 5 /* BEGIN_DEPENDENCIES 6 * depends_on:MBEDTLS_PKCS1_V21:MBEDTLS_RSA_C 7 * END_DEPENDENCIES 8 */ 9 10 /* BEGIN_CASE */ 11 void pkcs1_rsaes_oaep_encrypt(int mod, data_t *input_N, data_t *input_E, 12 int hash, data_t *message_str, data_t *rnd_buf, 13 data_t *result_str, int result) 14 { 15 unsigned char output[256]; 16 mbedtls_rsa_context ctx; 17 mbedtls_rsa_init(&ctx); 18 mbedtls_test_rnd_buf_info info; 19 mbedtls_mpi N, E; 20 mbedtls_mpi_init(&N); mbedtls_mpi_init(&E); 21 22 info.fallback_f_rng = mbedtls_test_rnd_std_rand; 23 info.fallback_p_rng = NULL; 24 info.buf = rnd_buf->x; 25 info.length = rnd_buf->len; 26 27 MD_PSA_INIT(); 28 29 TEST_ASSERT(mbedtls_rsa_set_padding(&ctx, 30 MBEDTLS_RSA_PKCS_V21, hash) == 0); 31 memset(output, 0x00, sizeof(output)); 32 33 TEST_EQUAL(mbedtls_rsa_get_padding_mode(&ctx), MBEDTLS_RSA_PKCS_V21); 34 TEST_EQUAL(mbedtls_rsa_get_md_alg(&ctx), hash); 35 36 TEST_ASSERT(mbedtls_mpi_read_binary(&N, input_N->x, input_N->len) == 0); 37 TEST_ASSERT(mbedtls_mpi_read_binary(&E, input_E->x, input_E->len) == 0); 38 TEST_ASSERT(mbedtls_rsa_import(&ctx, &N, NULL, NULL, NULL, &E) == 0); 39 TEST_ASSERT(mbedtls_rsa_get_len(&ctx) == (size_t) ((mod + 7) / 8)); 40 TEST_ASSERT(mbedtls_rsa_check_pubkey(&ctx) == 0); 41 42 if (message_str->len == 0) { 43 message_str->x = NULL; 44 } 45 TEST_ASSERT(mbedtls_rsa_pkcs1_encrypt(&ctx, 46 &mbedtls_test_rnd_buffer_rand, 47 &info, message_str->len, 48 message_str->x, 49 output) == result); 50 if (result == 0) { 51 TEST_MEMORY_COMPARE(output, ctx.len, result_str->x, result_str->len); 52 } 53 54 exit: 55 mbedtls_mpi_free(&N); mbedtls_mpi_free(&E); 56 mbedtls_rsa_free(&ctx); 57 MD_PSA_DONE(); 58 } 59 /* END_CASE */ 60 61 /* BEGIN_CASE */ 62 void pkcs1_rsaes_oaep_decrypt(int mod, data_t *input_P, data_t *input_Q, 63 data_t *input_N, data_t *input_E, int hash, 64 data_t *result_str, char *seed, data_t *message_str, 65 int result) 66 { 67 unsigned char output[64]; 68 mbedtls_rsa_context ctx; 69 mbedtls_rsa_init(&ctx); 70 size_t output_len; 71 mbedtls_test_rnd_pseudo_info rnd_info; 72 mbedtls_mpi N, P, Q, E; 73 mbedtls_mpi_init(&N); mbedtls_mpi_init(&P); 74 mbedtls_mpi_init(&Q); mbedtls_mpi_init(&E); 75 ((void) seed); 76 77 MD_PSA_INIT(); 78 79 TEST_ASSERT(mbedtls_rsa_set_padding(&ctx, 80 MBEDTLS_RSA_PKCS_V21, hash) == 0); 81 82 TEST_EQUAL(mbedtls_rsa_get_padding_mode(&ctx), MBEDTLS_RSA_PKCS_V21); 83 TEST_EQUAL(mbedtls_rsa_get_md_alg(&ctx), hash); 84 85 memset(output, 0x00, sizeof(output)); 86 memset(&rnd_info, 0, sizeof(mbedtls_test_rnd_pseudo_info)); 87 88 TEST_ASSERT(mbedtls_mpi_read_binary(&P, input_P->x, input_P->len) == 0); 89 TEST_ASSERT(mbedtls_mpi_read_binary(&Q, input_Q->x, input_Q->len) == 0); 90 TEST_ASSERT(mbedtls_mpi_read_binary(&N, input_N->x, input_N->len) == 0); 91 TEST_ASSERT(mbedtls_mpi_read_binary(&E, input_E->x, input_E->len) == 0); 92 93 TEST_ASSERT(mbedtls_rsa_import(&ctx, &N, &P, &Q, NULL, &E) == 0); 94 TEST_ASSERT(mbedtls_rsa_get_len(&ctx) == (size_t) ((mod + 7) / 8)); 95 TEST_ASSERT(mbedtls_rsa_complete(&ctx) == 0); 96 TEST_ASSERT(mbedtls_rsa_check_privkey(&ctx) == 0); 97 98 if (result_str->len == 0) { 99 TEST_ASSERT(mbedtls_rsa_pkcs1_decrypt(&ctx, 100 &mbedtls_test_rnd_pseudo_rand, 101 &rnd_info, 102 &output_len, message_str->x, 103 NULL, 0) == result); 104 } else { 105 TEST_ASSERT(mbedtls_rsa_pkcs1_decrypt(&ctx, 106 &mbedtls_test_rnd_pseudo_rand, 107 &rnd_info, 108 &output_len, message_str->x, 109 output, 110 sizeof(output)) == result); 111 if (result == 0) { 112 TEST_MEMORY_COMPARE(output, output_len, result_str->x, result_str->len); 113 } 114 } 115 116 exit: 117 mbedtls_mpi_free(&N); mbedtls_mpi_free(&P); 118 mbedtls_mpi_free(&Q); mbedtls_mpi_free(&E); 119 mbedtls_rsa_free(&ctx); 120 MD_PSA_DONE(); 121 } 122 /* END_CASE */ 123 124 /* BEGIN_CASE */ 125 void pkcs1_rsassa_pss_sign(int mod, data_t *input_P, data_t *input_Q, 126 data_t *input_N, data_t *input_E, int digest, 127 int hash, data_t *hash_digest, data_t *rnd_buf, 128 data_t *result_str, int fixed_salt_length, 129 int result) 130 { 131 unsigned char output[512]; 132 mbedtls_rsa_context ctx; 133 mbedtls_rsa_init(&ctx); 134 mbedtls_test_rnd_buf_info info; 135 mbedtls_mpi N, P, Q, E; 136 mbedtls_mpi_init(&N); mbedtls_mpi_init(&P); 137 mbedtls_mpi_init(&Q); mbedtls_mpi_init(&E); 138 139 info.fallback_f_rng = mbedtls_test_rnd_std_rand; 140 info.fallback_p_rng = NULL; 141 info.buf = rnd_buf->x; 142 info.length = rnd_buf->len; 143 144 MD_PSA_INIT(); 145 146 TEST_ASSERT(mbedtls_rsa_set_padding(&ctx, 147 MBEDTLS_RSA_PKCS_V21, hash) == 0); 148 149 TEST_EQUAL(mbedtls_rsa_get_padding_mode(&ctx), MBEDTLS_RSA_PKCS_V21); 150 TEST_EQUAL(mbedtls_rsa_get_md_alg(&ctx), hash); 151 152 memset(output, 0x00, sizeof(output)); 153 154 TEST_ASSERT(mbedtls_mpi_read_binary(&P, input_P->x, input_P->len) == 0); 155 TEST_ASSERT(mbedtls_mpi_read_binary(&Q, input_Q->x, input_Q->len) == 0); 156 TEST_ASSERT(mbedtls_mpi_read_binary(&N, input_N->x, input_N->len) == 0); 157 TEST_ASSERT(mbedtls_mpi_read_binary(&E, input_E->x, input_E->len) == 0); 158 159 TEST_ASSERT(mbedtls_rsa_import(&ctx, &N, &P, &Q, NULL, &E) == 0); 160 TEST_ASSERT(mbedtls_rsa_get_len(&ctx) == (size_t) ((mod + 7) / 8)); 161 TEST_ASSERT(mbedtls_rsa_complete(&ctx) == 0); 162 TEST_ASSERT(mbedtls_rsa_check_privkey(&ctx) == 0); 163 164 if (fixed_salt_length == MBEDTLS_RSA_SALT_LEN_ANY) { 165 TEST_ASSERT(mbedtls_rsa_pkcs1_sign( 166 &ctx, &mbedtls_test_rnd_buffer_rand, &info, 167 digest, hash_digest->len, hash_digest->x, output) == result); 168 if (result == 0) { 169 TEST_MEMORY_COMPARE(output, ctx.len, result_str->x, result_str->len); 170 } 171 172 info.buf = rnd_buf->x; 173 info.length = rnd_buf->len; 174 } 175 176 TEST_ASSERT(mbedtls_rsa_rsassa_pss_sign_ext( 177 &ctx, &mbedtls_test_rnd_buffer_rand, &info, 178 digest, hash_digest->len, hash_digest->x, 179 fixed_salt_length, output) == result); 180 if (result == 0) { 181 TEST_MEMORY_COMPARE(output, ctx.len, result_str->x, result_str->len); 182 } 183 184 exit: 185 mbedtls_mpi_free(&N); mbedtls_mpi_free(&P); 186 mbedtls_mpi_free(&Q); mbedtls_mpi_free(&E); 187 mbedtls_rsa_free(&ctx); 188 MD_PSA_DONE(); 189 } 190 /* END_CASE */ 191 192 /* BEGIN_CASE */ 193 void pkcs1_rsassa_pss_verify(int mod, data_t *input_N, data_t *input_E, 194 int digest, int hash, data_t *hash_digest, 195 char *salt, data_t *result_str, int result) 196 { 197 mbedtls_rsa_context ctx; 198 mbedtls_rsa_init(&ctx); 199 mbedtls_mpi N, E; 200 mbedtls_mpi_init(&N); mbedtls_mpi_init(&E); 201 ((void) salt); 202 203 MD_PSA_INIT(); 204 205 TEST_ASSERT(mbedtls_rsa_set_padding(&ctx, 206 MBEDTLS_RSA_PKCS_V21, hash) == 0); 207 208 TEST_EQUAL(mbedtls_rsa_get_padding_mode(&ctx), MBEDTLS_RSA_PKCS_V21); 209 TEST_EQUAL(mbedtls_rsa_get_md_alg(&ctx), hash); 210 211 TEST_ASSERT(mbedtls_mpi_read_binary(&N, input_N->x, input_N->len) == 0); 212 TEST_ASSERT(mbedtls_mpi_read_binary(&E, input_E->x, input_E->len) == 0); 213 214 TEST_ASSERT(mbedtls_rsa_import(&ctx, &N, NULL, NULL, NULL, &E) == 0); 215 TEST_ASSERT(mbedtls_rsa_get_len(&ctx) == (size_t) ((mod + 7) / 8)); 216 TEST_ASSERT(mbedtls_rsa_check_pubkey(&ctx) == 0); 217 218 219 TEST_ASSERT(mbedtls_rsa_pkcs1_verify(&ctx, digest, hash_digest->len, hash_digest->x, 220 result_str->x) == result); 221 222 exit: 223 mbedtls_mpi_free(&N); mbedtls_mpi_free(&E); 224 mbedtls_rsa_free(&ctx); 225 MD_PSA_DONE(); 226 } 227 /* END_CASE */ 228 229 /* BEGIN_CASE */ 230 void pkcs1_rsassa_pss_verify_ext(int mod, data_t *input_N, data_t *input_E, 231 int msg_digest_id, int ctx_hash, 232 int mgf_hash, int salt_len, 233 data_t *hash_digest, 234 data_t *result_str, int result_simple, 235 int result_full) 236 { 237 mbedtls_rsa_context ctx; 238 mbedtls_rsa_init(&ctx); 239 mbedtls_mpi N, E; 240 mbedtls_mpi_init(&N); mbedtls_mpi_init(&E); 241 242 MD_PSA_INIT(); 243 244 TEST_ASSERT(mbedtls_rsa_set_padding(&ctx, 245 MBEDTLS_RSA_PKCS_V21, ctx_hash) == 0); 246 247 TEST_EQUAL(mbedtls_rsa_get_padding_mode(&ctx), MBEDTLS_RSA_PKCS_V21); 248 TEST_EQUAL(mbedtls_rsa_get_md_alg(&ctx), ctx_hash); 249 250 TEST_ASSERT(mbedtls_mpi_read_binary(&N, input_N->x, input_N->len) == 0); 251 TEST_ASSERT(mbedtls_mpi_read_binary(&E, input_E->x, input_E->len) == 0); 252 253 TEST_ASSERT(mbedtls_rsa_import(&ctx, &N, NULL, NULL, NULL, &E) == 0); 254 TEST_ASSERT(mbedtls_rsa_get_len(&ctx) == (size_t) ((mod + 7) / 8)); 255 TEST_ASSERT(mbedtls_rsa_check_pubkey(&ctx) == 0); 256 257 258 TEST_ASSERT(mbedtls_rsa_pkcs1_verify(&ctx, msg_digest_id, 259 hash_digest->len, hash_digest->x, 260 result_str->x) == result_simple); 261 262 TEST_ASSERT(mbedtls_rsa_rsassa_pss_verify_ext(&ctx, msg_digest_id, hash_digest->len, 263 hash_digest->x, mgf_hash, salt_len, 264 result_str->x) == result_full); 265 266 exit: 267 mbedtls_mpi_free(&N); mbedtls_mpi_free(&E); 268 mbedtls_rsa_free(&ctx); 269 MD_PSA_DONE(); 270 } 271 /* END_CASE */