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 11 #ifndef MBEDTLS_PK_WRAP_H 12 #define MBEDTLS_PK_WRAP_H 13 14 #include "mbedtls/build_info.h" 15 16 #include "mbedtls/pk.h" 17 18 #if defined(MBEDTLS_USE_PSA_CRYPTO) 19 #include "psa/crypto.h" 20 #endif 21 22 struct mbedtls_pk_info_t { 23 /** Public key type */ 24 mbedtls_pk_type_t type; 25 26 /** Type name */ 27 const char *name; 28 29 /** Get key size in bits */ 30 size_t (*get_bitlen)(mbedtls_pk_context *pk); 31 32 /** Tell if the context implements this type (e.g. ECKEY can do ECDSA) */ 33 int (*can_do)(mbedtls_pk_type_t type); 34 35 /** Verify signature */ 36 int (*verify_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg, 37 const unsigned char *hash, size_t hash_len, 38 const unsigned char *sig, size_t sig_len); 39 40 /** Make signature */ 41 int (*sign_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg, 42 const unsigned char *hash, size_t hash_len, 43 unsigned char *sig, size_t sig_size, size_t *sig_len, 44 int (*f_rng)(void *, unsigned char *, size_t), 45 void *p_rng); 46 47 #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) 48 /** Verify signature (restartable) */ 49 int (*verify_rs_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg, 50 const unsigned char *hash, size_t hash_len, 51 const unsigned char *sig, size_t sig_len, 52 void *rs_ctx); 53 54 /** Make signature (restartable) */ 55 int (*sign_rs_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg, 56 const unsigned char *hash, size_t hash_len, 57 unsigned char *sig, size_t sig_size, size_t *sig_len, 58 int (*f_rng)(void *, unsigned char *, size_t), 59 void *p_rng, void *rs_ctx); 60 #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ 61 62 /** Decrypt message */ 63 int (*decrypt_func)(mbedtls_pk_context *pk, const unsigned char *input, size_t ilen, 64 unsigned char *output, size_t *olen, size_t osize, 65 int (*f_rng)(void *, unsigned char *, size_t), 66 void *p_rng); 67 68 /** Encrypt message */ 69 int (*encrypt_func)(mbedtls_pk_context *pk, const unsigned char *input, size_t ilen, 70 unsigned char *output, size_t *olen, size_t osize, 71 int (*f_rng)(void *, unsigned char *, size_t), 72 void *p_rng); 73 74 /** Check public-private key pair */ 75 int (*check_pair_func)(mbedtls_pk_context *pub, mbedtls_pk_context *prv, 76 int (*f_rng)(void *, unsigned char *, size_t), 77 void *p_rng); 78 79 /** Allocate a new context */ 80 void * (*ctx_alloc_func)(void); 81 82 /** Free the given context */ 83 void (*ctx_free_func)(void *ctx); 84 85 #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) 86 /** Allocate the restart context */ 87 void *(*rs_alloc_func)(void); 88 89 /** Free the restart context */ 90 void (*rs_free_func)(void *rs_ctx); 91 #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ 92 93 /** Interface with the debug module */ 94 void (*debug_func)(mbedtls_pk_context *pk, mbedtls_pk_debug_item *items); 95 96 }; 97 #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) 98 /* Container for RSA-alt */ 99 typedef struct { 100 void *key; 101 mbedtls_pk_rsa_alt_decrypt_func decrypt_func; 102 mbedtls_pk_rsa_alt_sign_func sign_func; 103 mbedtls_pk_rsa_alt_key_len_func key_len_func; 104 } mbedtls_rsa_alt_context; 105 #endif 106 107 #if defined(MBEDTLS_RSA_C) 108 extern const mbedtls_pk_info_t mbedtls_rsa_info; 109 #endif 110 111 #if defined(MBEDTLS_PK_HAVE_ECC_KEYS) 112 extern const mbedtls_pk_info_t mbedtls_eckey_info; 113 extern const mbedtls_pk_info_t mbedtls_eckeydh_info; 114 #endif 115 116 #if defined(MBEDTLS_PK_CAN_ECDSA_SOME) 117 extern const mbedtls_pk_info_t mbedtls_ecdsa_info; 118 #endif 119 120 #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) 121 extern const mbedtls_pk_info_t mbedtls_rsa_alt_info; 122 #endif 123 124 #if defined(MBEDTLS_USE_PSA_CRYPTO) 125 extern const mbedtls_pk_info_t mbedtls_ecdsa_opaque_info; 126 extern const mbedtls_pk_info_t mbedtls_rsa_opaque_info; 127 128 #if defined(MBEDTLS_RSA_C) 129 int mbedtls_pk_psa_rsa_sign_ext(psa_algorithm_t psa_alg_md, 130 mbedtls_rsa_context *rsa_ctx, 131 const unsigned char *hash, size_t hash_len, 132 unsigned char *sig, size_t sig_size, 133 size_t *sig_len); 134 #endif /* MBEDTLS_RSA_C */ 135 136 #endif /* MBEDTLS_USE_PSA_CRYPTO */ 137 138 #endif /* MBEDTLS_PK_WRAP_H */ 139