blob: 1b8ef84ac34029c65be5a0427985f4a8c3225dad [file] [log] [blame]
Manuel Pégourié-Gonnardd73b3c12013-08-12 17:06:05 +02001/**
Chris Jonesdaacb592021-03-09 17:03:29 +00002 * \file pk_wrap.h
Manuel Pégourié-Gonnardd73b3c12013-08-12 17:06:05 +02003 *
4 * \brief Public Key abstraction layer: wrapper functions
Darryl Greena40a1012018-01-05 15:33:17 +00005 */
6/*
Bence Szépkúti1e148272020-08-07 13:07:28 +02007 * Copyright The Mbed TLS Contributors
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +02008 * 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.
Manuel Pégourié-Gonnardd73b3c12013-08-12 17:06:05 +020021 */
22
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020023#ifndef MBEDTLS_PK_WRAP_H
24#define MBEDTLS_PK_WRAP_H
Manuel Pégourié-Gonnardd73b3c12013-08-12 17:06:05 +020025
Bence Szépkútic662b362021-05-27 11:25:03 +020026#include "mbedtls/build_info.h"
Manuel Pégourié-Gonnardd73b3c12013-08-12 17:06:05 +020027
Jaeden Ameroc49fbbf2019-07-04 20:01:14 +010028#include "mbedtls/pk.h"
Manuel Pégourié-Gonnardd73b3c12013-08-12 17:06:05 +020029
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020030struct mbedtls_pk_info_t {
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +020031 /** Public key type */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020032 mbedtls_pk_type_t type;
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +020033
34 /** Type name */
35 const char *name;
36
37 /** Get key size in bits */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020038 size_t (*get_bitlen)(const void *);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +020039
40 /** Tell if the context implements this type (e.g. ECKEY can do ECDSA) */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020041 int (*can_do)(mbedtls_pk_type_t type);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +020042
43 /** Verify signature */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020044 int (*verify_func)(void *ctx,
45 mbedtls_md_type_t md_alg,
46 const unsigned char *hash,
47 size_t hash_len,
48 const unsigned char *sig,
49 size_t sig_len);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +020050
51 /** Make signature */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020052 int (*sign_func)(void *ctx,
53 mbedtls_md_type_t md_alg,
54 const unsigned char *hash,
55 size_t hash_len,
56 unsigned char *sig,
57 size_t sig_size,
58 size_t *sig_len,
59 int (*f_rng)(void *, unsigned char *, size_t),
60 void *p_rng);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +020061
Manuel Pégourié-Gonnardaaa98142017-08-18 17:30:37 +020062#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
Manuel Pégourié-Gonnard1f596062017-05-09 10:42:40 +020063 /** Verify signature (restartable) */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020064 int (*verify_rs_func)(void *ctx,
65 mbedtls_md_type_t md_alg,
66 const unsigned char *hash,
67 size_t hash_len,
68 const unsigned char *sig,
69 size_t sig_len,
70 void *rs_ctx);
Manuel Pégourié-Gonnard1f596062017-05-09 10:42:40 +020071
72 /** Make signature (restartable) */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020073 int (*sign_rs_func)(void *ctx,
74 mbedtls_md_type_t md_alg,
75 const unsigned char *hash,
76 size_t hash_len,
77 unsigned char *sig,
78 size_t sig_size,
79 size_t *sig_len,
80 int (*f_rng)(void *, unsigned char *, size_t),
81 void *p_rng,
82 void *rs_ctx);
Manuel Pégourié-Gonnardaaa98142017-08-18 17:30:37 +020083#endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */
Manuel Pégourié-Gonnard1f596062017-05-09 10:42:40 +020084
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +020085 /** Decrypt message */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020086 int (*decrypt_func)(void *ctx,
87 const unsigned char *input,
88 size_t ilen,
89 unsigned char *output,
90 size_t *olen,
91 size_t osize,
92 int (*f_rng)(void *, unsigned char *, size_t),
93 void *p_rng);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +020094
95 /** Encrypt message */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020096 int (*encrypt_func)(void *ctx,
97 const unsigned char *input,
98 size_t ilen,
99 unsigned char *output,
100 size_t *olen,
101 size_t osize,
102 int (*f_rng)(void *, unsigned char *, size_t),
103 void *p_rng);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +0200104
105 /** Check public-private key pair */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200106 int (*check_pair_func)(const void *pub,
107 const void *prv,
108 int (*f_rng)(void *, unsigned char *, size_t),
109 void *p_rng);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +0200110
111 /** Allocate a new context */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200112 void *(*ctx_alloc_func)(void);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +0200113
114 /** Free the given context */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200115 void (*ctx_free_func)(void *ctx);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +0200116
Manuel Pégourié-Gonnardaaa98142017-08-18 17:30:37 +0200117#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
Manuel Pégourié-Gonnard0bbc66c2017-08-18 16:22:06 +0200118 /** Allocate the restart context */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200119 void *(*rs_alloc_func)(void);
Manuel Pégourié-Gonnard0bbc66c2017-08-18 16:22:06 +0200120
121 /** Free the restart context */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200122 void (*rs_free_func)(void *rs_ctx);
Manuel Pégourié-Gonnardaaa98142017-08-18 17:30:37 +0200123#endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */
Manuel Pégourié-Gonnard0bbc66c2017-08-18 16:22:06 +0200124
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +0200125 /** Interface with the debug module */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200126 void (*debug_func)(const void *ctx, mbedtls_pk_debug_item *items);
Manuel Pégourié-Gonnardc89d6cf2015-03-31 14:43:19 +0200127};
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200128#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
Manuel Pégourié-Gonnard12c1ff02013-08-21 12:28:31 +0200129/* Container for RSA-alt */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200130typedef struct {
Manuel Pégourié-Gonnard12c1ff02013-08-21 12:28:31 +0200131 void *key;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200132 mbedtls_pk_rsa_alt_decrypt_func decrypt_func;
133 mbedtls_pk_rsa_alt_sign_func sign_func;
134 mbedtls_pk_rsa_alt_key_len_func key_len_func;
135} mbedtls_rsa_alt_context;
Manuel Pégourié-Gonnard348bcb32015-03-31 14:01:33 +0200136#endif
Manuel Pégourié-Gonnard12c1ff02013-08-21 12:28:31 +0200137
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200138#if defined(MBEDTLS_RSA_C)
139extern const mbedtls_pk_info_t mbedtls_rsa_info;
Manuel Pégourié-Gonnardd73b3c12013-08-12 17:06:05 +0200140#endif
141
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200142#if defined(MBEDTLS_ECP_C)
143extern const mbedtls_pk_info_t mbedtls_eckey_info;
144extern const mbedtls_pk_info_t mbedtls_eckeydh_info;
Manuel Pégourié-Gonnardd73b3c12013-08-12 17:06:05 +0200145#endif
146
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200147#if defined(MBEDTLS_ECDSA_C)
148extern const mbedtls_pk_info_t mbedtls_ecdsa_info;
Manuel Pégourié-Gonnardd73b3c12013-08-12 17:06:05 +0200149#endif
150
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200151#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
152extern const mbedtls_pk_info_t mbedtls_rsa_alt_info;
Manuel Pégourié-Gonnard348bcb32015-03-31 14:01:33 +0200153#endif
Manuel Pégourié-Gonnard12c1ff02013-08-21 12:28:31 +0200154
Manuel Pégourié-Gonnard1ecf92c32018-10-22 12:11:15 +0200155#if defined(MBEDTLS_USE_PSA_CRYPTO)
Manuel Pégourié-Gonnard276cb642018-11-06 09:34:30 +0100156extern const mbedtls_pk_info_t mbedtls_pk_opaque_info;
Manuel Pégourié-Gonnard1ecf92c32018-10-22 12:11:15 +0200157#endif
158
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200159#endif /* MBEDTLS_PK_WRAP_H */