blob: c5cd4df151b49f997149732f71407517d269fc53 [file] [log] [blame]
Jens Wiklander32b31802023-10-06 16:59:46 +02001/**
2 * \file pk_wrap.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
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
23#ifndef MBEDTLS_PK_WRAP_H
24#define MBEDTLS_PK_WRAP_H
25
26#include "mbedtls/build_info.h"
27
28#include "mbedtls/pk.h"
29
30#if defined(MBEDTLS_PSA_CRYPTO_C)
31#include "psa/crypto.h"
32#endif /* MBEDTLS_PSA_CRYPTO_C */
33
34struct mbedtls_pk_info_t {
35 /** Public key type */
36 mbedtls_pk_type_t type;
37
38 /** Type name */
39 const char *name;
40
41 /** Get key size in bits */
42 size_t (*get_bitlen)(const void *);
43
44 /** Tell if the context implements this type (e.g. ECKEY can do ECDSA) */
45 int (*can_do)(mbedtls_pk_type_t type);
46
47 /** Verify signature */
48 int (*verify_func)(void *ctx, mbedtls_md_type_t md_alg,
49 const unsigned char *hash, size_t hash_len,
50 const unsigned char *sig, size_t sig_len);
51
52 /** Make signature */
53 int (*sign_func)(void *ctx, mbedtls_md_type_t md_alg,
54 const unsigned char *hash, size_t hash_len,
55 unsigned char *sig, size_t sig_size, size_t *sig_len,
56 int (*f_rng)(void *, unsigned char *, size_t),
57 void *p_rng);
58
59#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
60 /** Verify signature (restartable) */
61 int (*verify_rs_func)(void *ctx, mbedtls_md_type_t md_alg,
62 const unsigned char *hash, size_t hash_len,
63 const unsigned char *sig, size_t sig_len,
64 void *rs_ctx);
65
66 /** Make signature (restartable) */
67 int (*sign_rs_func)(void *ctx, mbedtls_md_type_t md_alg,
68 const unsigned char *hash, size_t hash_len,
69 unsigned char *sig, size_t sig_size, size_t *sig_len,
70 int (*f_rng)(void *, unsigned char *, size_t),
71 void *p_rng, void *rs_ctx);
72#endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */
73
74 /** Decrypt message */
75 int (*decrypt_func)(void *ctx, const unsigned char *input, size_t ilen,
76 unsigned char *output, size_t *olen, size_t osize,
77 int (*f_rng)(void *, unsigned char *, size_t),
78 void *p_rng);
79
80 /** Encrypt message */
81 int (*encrypt_func)(void *ctx, const unsigned char *input, size_t ilen,
82 unsigned char *output, size_t *olen, size_t osize,
83 int (*f_rng)(void *, unsigned char *, size_t),
84 void *p_rng);
85
86 /** Check public-private key pair */
87 int (*check_pair_func)(const void *pub, const void *prv,
88 int (*f_rng)(void *, unsigned char *, size_t),
89 void *p_rng);
90
91 /** Allocate a new context */
92 void * (*ctx_alloc_func)(void);
93
94 /** Free the given context */
95 void (*ctx_free_func)(void *ctx);
96
97#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
98 /** Allocate the restart context */
99 void *(*rs_alloc_func)(void);
100
101 /** Free the restart context */
102 void (*rs_free_func)(void *rs_ctx);
103#endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */
104
105 /** Interface with the debug module */
106 void (*debug_func)(const void *ctx, mbedtls_pk_debug_item *items);
107
108};
109#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
110/* Container for RSA-alt */
111typedef struct {
112 void *key;
113 mbedtls_pk_rsa_alt_decrypt_func decrypt_func;
114 mbedtls_pk_rsa_alt_sign_func sign_func;
115 mbedtls_pk_rsa_alt_key_len_func key_len_func;
116} mbedtls_rsa_alt_context;
117#endif
118
119#if defined(MBEDTLS_RSA_C)
120extern const mbedtls_pk_info_t mbedtls_rsa_info;
121#endif
122
123#if defined(MBEDTLS_ECP_C)
124extern const mbedtls_pk_info_t mbedtls_eckey_info;
125extern const mbedtls_pk_info_t mbedtls_eckeydh_info;
126#endif
127
128#if defined(MBEDTLS_PK_CAN_ECDSA_SOME)
129extern const mbedtls_pk_info_t mbedtls_ecdsa_info;
130#endif
131
132#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
133extern const mbedtls_pk_info_t mbedtls_rsa_alt_info;
134#endif
135
136#if defined(MBEDTLS_USE_PSA_CRYPTO)
137extern const mbedtls_pk_info_t mbedtls_pk_ecdsa_opaque_info;
138extern const mbedtls_pk_info_t mbedtls_pk_rsa_opaque_info;
139
140#if !defined(MBEDTLS_DEPRECATED_REMOVED)
141#if defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY)
142int MBEDTLS_DEPRECATED mbedtls_pk_error_from_psa_ecdsa(psa_status_t status);
143#endif
144#endif
145
146#endif /* MBEDTLS_USE_PSA_CRYPTO */
147
148#if defined(MBEDTLS_PSA_CRYPTO_C)
149#if !defined(MBEDTLS_DEPRECATED_REMOVED)
150int MBEDTLS_DEPRECATED mbedtls_pk_error_from_psa(psa_status_t status);
151
152#if defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY) || \
153 defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR)
154int MBEDTLS_DEPRECATED mbedtls_pk_error_from_psa_rsa(psa_status_t status);
155#endif /* PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY || PSA_WANT_KEY_TYPE_RSA_KEY_PAIR */
156#endif /* !MBEDTLS_DEPRECATED_REMOVED */
157
158#if defined(MBEDTLS_RSA_C)
159int mbedtls_pk_psa_rsa_sign_ext(psa_algorithm_t psa_alg_md,
160 mbedtls_rsa_context *rsa_ctx,
161 const unsigned char *hash, size_t hash_len,
162 unsigned char *sig, size_t sig_size,
163 size_t *sig_len);
164#endif /* MBEDTLS_RSA_C */
165
166#endif /* MBEDTLS_PSA_CRYPTO_C */
167
168#endif /* MBEDTLS_PK_WRAP_H */