test_suite_pkparse.function 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /* BEGIN_HEADER */
  2. #include "mbedtls/pk.h"
  3. #include "mbedtls/pem.h"
  4. #include "mbedtls/oid.h"
  5. #include "mbedtls/ecp.h"
  6. #include "mbedtls/legacy_or_psa.h"
  7. /* END_HEADER */
  8. /* BEGIN_DEPENDENCIES
  9. * depends_on:MBEDTLS_PK_PARSE_C:MBEDTLS_BIGNUM_C
  10. * END_DEPENDENCIES
  11. */
  12. /* BEGIN_CASE depends_on:MBEDTLS_RSA_C:MBEDTLS_FS_IO */
  13. void pk_parse_keyfile_rsa(char *key_file, char *password, int result)
  14. {
  15. mbedtls_pk_context ctx;
  16. int res;
  17. char *pwd = password;
  18. PSA_INIT_IF_NO_MD();
  19. mbedtls_pk_init(&ctx);
  20. if (strcmp(pwd, "NULL") == 0) {
  21. pwd = NULL;
  22. }
  23. res = mbedtls_pk_parse_keyfile(&ctx, key_file, pwd,
  24. mbedtls_test_rnd_std_rand, NULL);
  25. TEST_ASSERT(res == result);
  26. if (res == 0) {
  27. mbedtls_rsa_context *rsa;
  28. TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_RSA));
  29. rsa = mbedtls_pk_rsa(ctx);
  30. TEST_ASSERT(mbedtls_rsa_check_privkey(rsa) == 0);
  31. }
  32. exit:
  33. mbedtls_pk_free(&ctx);
  34. PSA_DONE_IF_NO_MD();
  35. }
  36. /* END_CASE */
  37. /* BEGIN_CASE depends_on:MBEDTLS_RSA_C:MBEDTLS_FS_IO */
  38. void pk_parse_public_keyfile_rsa(char *key_file, int result)
  39. {
  40. mbedtls_pk_context ctx;
  41. int res;
  42. PSA_INIT_IF_NO_MD();
  43. mbedtls_pk_init(&ctx);
  44. res = mbedtls_pk_parse_public_keyfile(&ctx, key_file);
  45. TEST_ASSERT(res == result);
  46. if (res == 0) {
  47. mbedtls_rsa_context *rsa;
  48. TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_RSA));
  49. rsa = mbedtls_pk_rsa(ctx);
  50. TEST_ASSERT(mbedtls_rsa_check_pubkey(rsa) == 0);
  51. }
  52. exit:
  53. mbedtls_pk_free(&ctx);
  54. PSA_DONE_IF_NO_MD();
  55. }
  56. /* END_CASE */
  57. /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_ECP_C */
  58. void pk_parse_public_keyfile_ec(char *key_file, int result)
  59. {
  60. mbedtls_pk_context ctx;
  61. int res;
  62. mbedtls_pk_init(&ctx);
  63. res = mbedtls_pk_parse_public_keyfile(&ctx, key_file);
  64. TEST_ASSERT(res == result);
  65. if (res == 0) {
  66. mbedtls_ecp_keypair *eckey;
  67. TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_ECKEY));
  68. eckey = mbedtls_pk_ec(ctx);
  69. TEST_ASSERT(mbedtls_ecp_check_pubkey(&eckey->grp, &eckey->Q) == 0);
  70. }
  71. exit:
  72. mbedtls_pk_free(&ctx);
  73. }
  74. /* END_CASE */
  75. /* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_ECP_C */
  76. void pk_parse_keyfile_ec(char *key_file, char *password, int result)
  77. {
  78. mbedtls_pk_context ctx;
  79. int res;
  80. mbedtls_pk_init(&ctx);
  81. res = mbedtls_pk_parse_keyfile(&ctx, key_file, password,
  82. mbedtls_test_rnd_std_rand, NULL);
  83. TEST_ASSERT(res == result);
  84. if (res == 0) {
  85. mbedtls_ecp_keypair *eckey;
  86. TEST_ASSERT(mbedtls_pk_can_do(&ctx, MBEDTLS_PK_ECKEY));
  87. eckey = mbedtls_pk_ec(ctx);
  88. TEST_ASSERT(mbedtls_ecp_check_privkey(&eckey->grp, &eckey->d) == 0);
  89. }
  90. exit:
  91. mbedtls_pk_free(&ctx);
  92. }
  93. /* END_CASE */
  94. /* BEGIN_CASE */
  95. void pk_parse_key(data_t *buf, int result)
  96. {
  97. mbedtls_pk_context pk;
  98. mbedtls_pk_init(&pk);
  99. TEST_ASSERT(mbedtls_pk_parse_key(&pk, buf->x, buf->len, NULL, 0,
  100. mbedtls_test_rnd_std_rand, NULL) == result);
  101. exit:
  102. mbedtls_pk_free(&pk);
  103. }
  104. /* END_CASE */