1 /** 2 * \file pk_internal.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 * This file is provided under the Apache License 2.0, or the 11 * GNU General Public License v2.0 or later. 12 * 13 * ********** 14 * Apache License 2.0: 15 * 16 * Licensed under the Apache License, Version 2.0 (the "License"); you may 17 * not use this file except in compliance with the License. 18 * You may obtain a copy of the License at 19 * 20 * http://www.apache.org/licenses/LICENSE-2.0 21 * 22 * Unless required by applicable law or agreed to in writing, software 23 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 24 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 25 * See the License for the specific language governing permissions and 26 * limitations under the License. 27 * 28 * ********** 29 * 30 * ********** 31 * GNU General Public License v2.0 or later: 32 * 33 * This program is free software; you can redistribute it and/or modify 34 * it under the terms of the GNU General Public License as published by 35 * the Free Software Foundation; either version 2 of the License, or 36 * (at your option) any later version. 37 * 38 * This program is distributed in the hope that it will be useful, 39 * but WITHOUT ANY WARRANTY; without even the implied warranty of 40 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 41 * GNU General Public License for more details. 42 * 43 * You should have received a copy of the GNU General Public License along 44 * with this program; if not, write to the Free Software Foundation, Inc., 45 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 46 * 47 * ********** 48 */ 49 50 #ifndef MBEDTLS_PK_WRAP_H 51 #define MBEDTLS_PK_WRAP_H 52 53 #if !defined(MBEDTLS_CONFIG_FILE) 54 #include "config.h" 55 #else 56 #include MBEDTLS_CONFIG_FILE 57 #endif 58 59 #include "pk.h" 60 61 struct mbedtls_pk_info_t 62 { 63 /** Public key type */ 64 mbedtls_pk_type_t type; 65 66 /** Type name */ 67 const char *name; 68 69 /** Get key size in bits */ 70 size_t (*get_bitlen)( const void * ); 71 72 /** Tell if the context implements this type (e.g. ECKEY can do ECDSA) */ 73 int (*can_do)( mbedtls_pk_type_t type ); 74 75 /** Verify signature */ 76 int (*verify_func)( void *ctx, mbedtls_md_type_t md_alg, 77 const unsigned char *hash, size_t hash_len, 78 const unsigned char *sig, size_t sig_len ); 79 80 /** Make signature */ 81 int (*sign_func)( void *ctx, mbedtls_md_type_t md_alg, 82 const unsigned char *hash, size_t hash_len, 83 unsigned char *sig, size_t *sig_len, 84 int (*f_rng)(void *, unsigned char *, size_t), 85 void *p_rng ); 86 87 #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) 88 /** Verify signature (restartable) */ 89 int (*verify_rs_func)( void *ctx, mbedtls_md_type_t md_alg, 90 const unsigned char *hash, size_t hash_len, 91 const unsigned char *sig, size_t sig_len, 92 void *rs_ctx ); 93 94 /** Make signature (restartable) */ 95 int (*sign_rs_func)( void *ctx, mbedtls_md_type_t md_alg, 96 const unsigned char *hash, size_t hash_len, 97 unsigned char *sig, size_t *sig_len, 98 int (*f_rng)(void *, unsigned char *, size_t), 99 void *p_rng, void *rs_ctx ); 100 #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ 101 102 /** Decrypt message */ 103 int (*decrypt_func)( void *ctx, const unsigned char *input, size_t ilen, 104 unsigned char *output, size_t *olen, size_t osize, 105 int (*f_rng)(void *, unsigned char *, size_t), 106 void *p_rng ); 107 108 /** Encrypt message */ 109 int (*encrypt_func)( void *ctx, const unsigned char *input, size_t ilen, 110 unsigned char *output, size_t *olen, size_t osize, 111 int (*f_rng)(void *, unsigned char *, size_t), 112 void *p_rng ); 113 114 /** Check public-private key pair */ 115 int (*check_pair_func)( const void *pub, const void *prv ); 116 117 /** Allocate a new context */ 118 void * (*ctx_alloc_func)( void ); 119 120 /** Free the given context */ 121 void (*ctx_free_func)( void *ctx ); 122 123 #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) 124 /** Allocate the restart context */ 125 void * (*rs_alloc_func)( void ); 126 127 /** Free the restart context */ 128 void (*rs_free_func)( void *rs_ctx ); 129 #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ 130 131 /** Interface with the debug module */ 132 void (*debug_func)( const void *ctx, mbedtls_pk_debug_item *items ); 133 134 }; 135 #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) 136 /* Container for RSA-alt */ 137 typedef struct 138 { 139 void *key; 140 mbedtls_pk_rsa_alt_decrypt_func decrypt_func; 141 mbedtls_pk_rsa_alt_sign_func sign_func; 142 mbedtls_pk_rsa_alt_key_len_func key_len_func; 143 } mbedtls_rsa_alt_context; 144 #endif 145 146 #if defined(MBEDTLS_RSA_C) 147 extern const mbedtls_pk_info_t mbedtls_rsa_info; 148 #endif 149 150 #if defined(MBEDTLS_ECP_C) 151 extern const mbedtls_pk_info_t mbedtls_eckey_info; 152 extern const mbedtls_pk_info_t mbedtls_eckeydh_info; 153 #endif 154 155 #if defined(MBEDTLS_ECDSA_C) 156 extern const mbedtls_pk_info_t mbedtls_ecdsa_info; 157 #endif 158 159 #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) 160 extern const mbedtls_pk_info_t mbedtls_rsa_alt_info; 161 #endif 162 163 #endif /* MBEDTLS_PK_WRAP_H */ 164