1 /** 2 * \file pk_internal.h 3 * 4 * \brief Public Key abstraction layer: wrapper functions 5 */ 6 /* 7 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved 8 * SPDX-License-Identifier: Apache-2.0 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); you may 11 * not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 18 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 * 22 * This file is part of mbed TLS (https://tls.mbed.org) 23 */ 24 25 #ifndef MBEDTLS_PK_WRAP_H 26 #define MBEDTLS_PK_WRAP_H 27 28 #if !defined(MBEDTLS_CONFIG_FILE) 29 #include "config.h" 30 #else 31 #include MBEDTLS_CONFIG_FILE 32 #endif 33 34 #include "pk.h" 35 36 struct mbedtls_pk_info_t 37 { 38 /** Public key type */ 39 mbedtls_pk_type_t type; 40 41 /** Type name */ 42 const char *name; 43 44 /** Get key size in bits */ 45 size_t (*get_bitlen)( const void * ); 46 47 /** Tell if the context implements this type (e.g. ECKEY can do ECDSA) */ 48 int (*can_do)( mbedtls_pk_type_t type ); 49 50 /** Verify signature */ 51 int (*verify_func)( void *ctx, mbedtls_md_type_t md_alg, 52 const unsigned char *hash, size_t hash_len, 53 const unsigned char *sig, size_t sig_len ); 54 55 /** Make signature */ 56 int (*sign_func)( void *ctx, mbedtls_md_type_t md_alg, 57 const unsigned char *hash, size_t hash_len, 58 unsigned char *sig, size_t *sig_len, 59 int (*f_rng)(void *, unsigned char *, size_t), 60 void *p_rng ); 61 62 #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) 63 /** Verify signature (restartable) */ 64 int (*verify_rs_func)( void *ctx, mbedtls_md_type_t md_alg, 65 const unsigned char *hash, size_t hash_len, 66 const unsigned char *sig, size_t sig_len, 67 void *rs_ctx ); 68 69 /** Make signature (restartable) */ 70 int (*sign_rs_func)( void *ctx, mbedtls_md_type_t md_alg, 71 const unsigned char *hash, size_t hash_len, 72 unsigned char *sig, size_t *sig_len, 73 int (*f_rng)(void *, unsigned char *, size_t), 74 void *p_rng, void *rs_ctx ); 75 #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ 76 77 /** Decrypt message */ 78 int (*decrypt_func)( void *ctx, const unsigned char *input, size_t ilen, 79 unsigned char *output, size_t *olen, size_t osize, 80 int (*f_rng)(void *, unsigned char *, size_t), 81 void *p_rng ); 82 83 /** Encrypt message */ 84 int (*encrypt_func)( void *ctx, const unsigned char *input, size_t ilen, 85 unsigned char *output, size_t *olen, size_t osize, 86 int (*f_rng)(void *, unsigned char *, size_t), 87 void *p_rng ); 88 89 /** Check public-private key pair */ 90 int (*check_pair_func)( const void *pub, const void *prv ); 91 92 /** Allocate a new context */ 93 void * (*ctx_alloc_func)( void ); 94 95 /** Free the given context */ 96 void (*ctx_free_func)( void *ctx ); 97 98 #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) 99 /** Allocate the restart context */ 100 void * (*rs_alloc_func)( void ); 101 102 /** Free the restart context */ 103 void (*rs_free_func)( void *rs_ctx ); 104 #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ 105 106 /** Interface with the debug module */ 107 void (*debug_func)( const void *ctx, mbedtls_pk_debug_item *items ); 108 109 }; 110 #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) 111 /* Container for RSA-alt */ 112 typedef struct 113 { 114 void *key; 115 mbedtls_pk_rsa_alt_decrypt_func decrypt_func; 116 mbedtls_pk_rsa_alt_sign_func sign_func; 117 mbedtls_pk_rsa_alt_key_len_func key_len_func; 118 } mbedtls_rsa_alt_context; 119 #endif 120 121 #if defined(MBEDTLS_RSA_C) 122 extern const mbedtls_pk_info_t mbedtls_rsa_info; 123 #endif 124 125 #if defined(MBEDTLS_ECP_C) 126 extern const mbedtls_pk_info_t mbedtls_eckey_info; 127 extern const mbedtls_pk_info_t mbedtls_eckeydh_info; 128 #endif 129 130 #if defined(MBEDTLS_ECDSA_C) 131 extern const mbedtls_pk_info_t mbedtls_ecdsa_info; 132 #endif 133 134 #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) 135 extern const mbedtls_pk_info_t mbedtls_rsa_alt_info; 136 #endif 137 138 #endif /* MBEDTLS_PK_WRAP_H */ 139