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