pk_wrap.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /**
  2. * \file pk_wrap.h
  3. *
  4. * \brief Public Key abstraction layer: wrapper functions
  5. */
  6. /*
  7. * Copyright The Mbed TLS Contributors
  8. * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
  9. */
  10. #ifndef MBEDTLS_PK_WRAP_H
  11. #define MBEDTLS_PK_WRAP_H
  12. #include "mbedtls/build_info.h"
  13. #include "mbedtls/pk.h"
  14. #if defined(MBEDTLS_USE_PSA_CRYPTO)
  15. #include "psa/crypto.h"
  16. #endif
  17. struct mbedtls_pk_info_t {
  18. /** Public key type */
  19. mbedtls_pk_type_t type;
  20. /** Type name */
  21. const char *name;
  22. /** Get key size in bits */
  23. size_t (*get_bitlen)(mbedtls_pk_context *pk);
  24. /** Tell if the context implements this type (e.g. ECKEY can do ECDSA) */
  25. int (*can_do)(mbedtls_pk_type_t type);
  26. /** Verify signature */
  27. int (*verify_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg,
  28. const unsigned char *hash, size_t hash_len,
  29. const unsigned char *sig, size_t sig_len);
  30. /** Make signature */
  31. int (*sign_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg,
  32. const unsigned char *hash, size_t hash_len,
  33. unsigned char *sig, size_t sig_size, size_t *sig_len,
  34. int (*f_rng)(void *, unsigned char *, size_t),
  35. void *p_rng);
  36. #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
  37. /** Verify signature (restartable) */
  38. int (*verify_rs_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg,
  39. const unsigned char *hash, size_t hash_len,
  40. const unsigned char *sig, size_t sig_len,
  41. void *rs_ctx);
  42. /** Make signature (restartable) */
  43. int (*sign_rs_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg,
  44. const unsigned char *hash, size_t hash_len,
  45. unsigned char *sig, size_t sig_size, size_t *sig_len,
  46. int (*f_rng)(void *, unsigned char *, size_t),
  47. void *p_rng, void *rs_ctx);
  48. #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */
  49. /** Decrypt message */
  50. int (*decrypt_func)(mbedtls_pk_context *pk, const unsigned char *input, size_t ilen,
  51. unsigned char *output, size_t *olen, size_t osize,
  52. int (*f_rng)(void *, unsigned char *, size_t),
  53. void *p_rng);
  54. /** Encrypt message */
  55. int (*encrypt_func)(mbedtls_pk_context *pk, const unsigned char *input, size_t ilen,
  56. unsigned char *output, size_t *olen, size_t osize,
  57. int (*f_rng)(void *, unsigned char *, size_t),
  58. void *p_rng);
  59. /** Check public-private key pair */
  60. int (*check_pair_func)(mbedtls_pk_context *pub, mbedtls_pk_context *prv,
  61. int (*f_rng)(void *, unsigned char *, size_t),
  62. void *p_rng);
  63. /** Allocate a new context */
  64. void * (*ctx_alloc_func)(void);
  65. /** Free the given context */
  66. void (*ctx_free_func)(void *ctx);
  67. #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
  68. /** Allocate the restart context */
  69. void *(*rs_alloc_func)(void);
  70. /** Free the restart context */
  71. void (*rs_free_func)(void *rs_ctx);
  72. #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */
  73. /** Interface with the debug module */
  74. void (*debug_func)(mbedtls_pk_context *pk, mbedtls_pk_debug_item *items);
  75. };
  76. #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
  77. /* Container for RSA-alt */
  78. typedef struct {
  79. void *key;
  80. mbedtls_pk_rsa_alt_decrypt_func decrypt_func;
  81. mbedtls_pk_rsa_alt_sign_func sign_func;
  82. mbedtls_pk_rsa_alt_key_len_func key_len_func;
  83. } mbedtls_rsa_alt_context;
  84. #endif
  85. #if defined(MBEDTLS_RSA_C)
  86. extern const mbedtls_pk_info_t mbedtls_rsa_info;
  87. #endif
  88. #if defined(MBEDTLS_PK_HAVE_ECC_KEYS)
  89. extern const mbedtls_pk_info_t mbedtls_eckey_info;
  90. extern const mbedtls_pk_info_t mbedtls_eckeydh_info;
  91. #endif
  92. #if defined(MBEDTLS_PK_CAN_ECDSA_SOME)
  93. extern const mbedtls_pk_info_t mbedtls_ecdsa_info;
  94. #endif
  95. #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
  96. extern const mbedtls_pk_info_t mbedtls_rsa_alt_info;
  97. #endif
  98. #if defined(MBEDTLS_USE_PSA_CRYPTO)
  99. extern const mbedtls_pk_info_t mbedtls_ecdsa_opaque_info;
  100. extern const mbedtls_pk_info_t mbedtls_rsa_opaque_info;
  101. #if defined(MBEDTLS_RSA_C)
  102. int mbedtls_pk_psa_rsa_sign_ext(psa_algorithm_t psa_alg_md,
  103. mbedtls_rsa_context *rsa_ctx,
  104. const unsigned char *hash, size_t hash_len,
  105. unsigned char *sig, size_t sig_size,
  106. size_t *sig_len);
  107. #endif /* MBEDTLS_RSA_C */
  108. #endif /* MBEDTLS_USE_PSA_CRYPTO */
  109. #endif /* MBEDTLS_PK_WRAP_H */