| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |  * \file pk_wrap.h | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * \brief Public Key abstraction layer: wrapper functions | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2020-09-05 12:53:20 +02:00
										 |  |  |  *  Copyright The Mbed TLS Contributors | 
					
						
							| 
									
										
										
										
											2024-01-30 14:09:13 +01:00
										 |  |  |  *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef MBEDTLS_PK_WRAP_H
 | 
					
						
							|  |  |  | #define MBEDTLS_PK_WRAP_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  | #include "mbedtls/build_info.h"
 | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-21 12:54:05 +01:00
										 |  |  | #include "mbedtls/pk.h"
 | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  | #if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
					
						
							|  |  |  | #include "psa/crypto.h"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  | struct mbedtls_pk_info_t { | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  |     /** Public key type */ | 
					
						
							|  |  |  |     mbedtls_pk_type_t type; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Type name */ | 
					
						
							|  |  |  |     const char *name; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Get key size in bits */ | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |     size_t (*get_bitlen)(mbedtls_pk_context *pk); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Tell if the context implements this type (e.g. ECKEY can do ECDSA) */ | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |     int (*can_do)(mbedtls_pk_type_t type); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Verify signature */ | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |     int (*verify_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg, | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |                        const unsigned char *hash, size_t hash_len, | 
					
						
							|  |  |  |                        const unsigned char *sig, size_t sig_len); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Make signature */ | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |     int (*sign_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg, | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |                      const unsigned char *hash, size_t hash_len, | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |                      unsigned char *sig, size_t sig_size, size_t *sig_len, | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |                      int (*f_rng)(void *, unsigned char *, size_t), | 
					
						
							|  |  |  |                      void *p_rng); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-16 17:19:46 +01:00
										 |  |  | #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
 | 
					
						
							|  |  |  |     /** Verify signature (restartable) */ | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |     int (*verify_rs_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg, | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |                           const unsigned char *hash, size_t hash_len, | 
					
						
							|  |  |  |                           const unsigned char *sig, size_t sig_len, | 
					
						
							|  |  |  |                           void *rs_ctx); | 
					
						
							| 
									
										
										
										
											2019-02-16 17:19:46 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Make signature (restartable) */ | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |     int (*sign_rs_func)(mbedtls_pk_context *pk, mbedtls_md_type_t md_alg, | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |                         const unsigned char *hash, size_t hash_len, | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |                         unsigned char *sig, size_t sig_size, size_t *sig_len, | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |                         int (*f_rng)(void *, unsigned char *, size_t), | 
					
						
							|  |  |  |                         void *p_rng, void *rs_ctx); | 
					
						
							| 
									
										
										
										
											2019-02-16 17:19:46 +01:00
										 |  |  | #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  |     /** Decrypt message */ | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |     int (*decrypt_func)(mbedtls_pk_context *pk, const unsigned char *input, size_t ilen, | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |                         unsigned char *output, size_t *olen, size_t osize, | 
					
						
							|  |  |  |                         int (*f_rng)(void *, unsigned char *, size_t), | 
					
						
							|  |  |  |                         void *p_rng); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Encrypt message */ | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |     int (*encrypt_func)(mbedtls_pk_context *pk, const unsigned char *input, size_t ilen, | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |                         unsigned char *output, size_t *olen, size_t osize, | 
					
						
							|  |  |  |                         int (*f_rng)(void *, unsigned char *, size_t), | 
					
						
							|  |  |  |                         void *p_rng); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Check public-private key pair */ | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |     int (*check_pair_func)(mbedtls_pk_context *pub, mbedtls_pk_context *prv, | 
					
						
							|  |  |  |                            int (*f_rng)(void *, unsigned char *, size_t), | 
					
						
							|  |  |  |                            void *p_rng); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Allocate a new context */ | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |     void * (*ctx_alloc_func)(void); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Free the given context */ | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |     void (*ctx_free_func)(void *ctx); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-16 17:19:46 +01:00
										 |  |  | #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
 | 
					
						
							|  |  |  |     /** Allocate the restart context */ | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |     void *(*rs_alloc_func)(void); | 
					
						
							| 
									
										
										
										
											2019-02-16 17:19:46 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Free the restart context */ | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  |     void (*rs_free_func)(void *rs_ctx); | 
					
						
							| 
									
										
										
										
											2019-02-16 17:19:46 +01:00
										 |  |  | #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  |     /** Interface with the debug module */ | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  |     void (*debug_func)(mbedtls_pk_context *pk, mbedtls_pk_debug_item *items); | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
 | 
					
						
							|  |  |  | /* Container for RSA-alt */ | 
					
						
							| 
									
										
										
										
											2023-04-18 10:38:24 +02:00
										 |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  |     void *key; | 
					
						
							|  |  |  |     mbedtls_pk_rsa_alt_decrypt_func decrypt_func; | 
					
						
							|  |  |  |     mbedtls_pk_rsa_alt_sign_func sign_func; | 
					
						
							|  |  |  |     mbedtls_pk_rsa_alt_key_len_func key_len_func; | 
					
						
							|  |  |  | } mbedtls_rsa_alt_context; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(MBEDTLS_RSA_C)
 | 
					
						
							|  |  |  | extern const mbedtls_pk_info_t mbedtls_rsa_info; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  | #if defined(MBEDTLS_PK_HAVE_ECC_KEYS)
 | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | extern const mbedtls_pk_info_t mbedtls_eckey_info; | 
					
						
							|  |  |  | extern const mbedtls_pk_info_t mbedtls_eckeydh_info; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  | #if defined(MBEDTLS_PK_CAN_ECDSA_SOME)
 | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | extern const mbedtls_pk_info_t mbedtls_ecdsa_info; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
 | 
					
						
							|  |  |  | extern const mbedtls_pk_info_t mbedtls_rsa_alt_info; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-21 12:54:05 +01:00
										 |  |  | #if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
					
						
							| 
									
										
										
										
											2023-09-24 20:04:06 -07:00
										 |  |  | extern const mbedtls_pk_info_t mbedtls_ecdsa_opaque_info; | 
					
						
							|  |  |  | extern const mbedtls_pk_info_t mbedtls_rsa_opaque_info; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(MBEDTLS_RSA_C)
 | 
					
						
							|  |  |  | int mbedtls_pk_psa_rsa_sign_ext(psa_algorithm_t psa_alg_md, | 
					
						
							|  |  |  |                                 mbedtls_rsa_context *rsa_ctx, | 
					
						
							|  |  |  |                                 const unsigned char *hash, size_t hash_len, | 
					
						
							|  |  |  |                                 unsigned char *sig, size_t sig_size, | 
					
						
							|  |  |  |                                 size_t *sig_len); | 
					
						
							|  |  |  | #endif /* MBEDTLS_RSA_C */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* MBEDTLS_USE_PSA_CRYPTO */
 | 
					
						
							| 
									
										
										
										
											2021-12-21 12:54:05 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-08 19:04:43 +01:00
										 |  |  | #endif /* MBEDTLS_PK_WRAP_H */
 |