quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

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 */