1a8e1175bSopenharmony_ci/**
2a8e1175bSopenharmony_ci * \file ssl_ciphersuites.h
3a8e1175bSopenharmony_ci *
4a8e1175bSopenharmony_ci * \brief SSL Ciphersuites for Mbed TLS
5a8e1175bSopenharmony_ci */
6a8e1175bSopenharmony_ci/*
7a8e1175bSopenharmony_ci *  Copyright The Mbed TLS Contributors
8a8e1175bSopenharmony_ci *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
9a8e1175bSopenharmony_ci */
10a8e1175bSopenharmony_ci#ifndef MBEDTLS_SSL_CIPHERSUITES_H
11a8e1175bSopenharmony_ci#define MBEDTLS_SSL_CIPHERSUITES_H
12a8e1175bSopenharmony_ci#include "mbedtls/private_access.h"
13a8e1175bSopenharmony_ci
14a8e1175bSopenharmony_ci#include "mbedtls/build_info.h"
15a8e1175bSopenharmony_ci
16a8e1175bSopenharmony_ci#include "mbedtls/pk.h"
17a8e1175bSopenharmony_ci#include "mbedtls/cipher.h"
18a8e1175bSopenharmony_ci#include "mbedtls/md.h"
19a8e1175bSopenharmony_ci
20a8e1175bSopenharmony_ci#ifdef __cplusplus
21a8e1175bSopenharmony_ciextern "C" {
22a8e1175bSopenharmony_ci#endif
23a8e1175bSopenharmony_ci
24a8e1175bSopenharmony_ci/*
25a8e1175bSopenharmony_ci * Supported ciphersuites (Official IANA names)
26a8e1175bSopenharmony_ci */
27a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_NULL_MD5                    0x01   /**< Weak! */
28a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_NULL_SHA                    0x02   /**< Weak! */
29a8e1175bSopenharmony_ci
30a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_NULL_SHA                    0x2C   /**< Weak! */
31a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA                0x2D   /**< Weak! */
32a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA                0x2E   /**< Weak! */
33a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA             0x2F
34a8e1175bSopenharmony_ci
35a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA         0x33
36a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA             0x35
37a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA         0x39
38a8e1175bSopenharmony_ci
39a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_NULL_SHA256                 0x3B   /**< Weak! */
40a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256          0x3C   /**< TLS 1.2 */
41a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256          0x3D   /**< TLS 1.2 */
42a8e1175bSopenharmony_ci
43a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA        0x41
44a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA    0x45
45a8e1175bSopenharmony_ci
46a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256      0x67   /**< TLS 1.2 */
47a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256      0x6B   /**< TLS 1.2 */
48a8e1175bSopenharmony_ci
49a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA        0x84
50a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA    0x88
51a8e1175bSopenharmony_ci
52a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA             0x8C
53a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA             0x8D
54a8e1175bSopenharmony_ci
55a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA         0x90
56a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA         0x91
57a8e1175bSopenharmony_ci
58a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA         0x94
59a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA         0x95
60a8e1175bSopenharmony_ci
61a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256          0x9C   /**< TLS 1.2 */
62a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384          0x9D   /**< TLS 1.2 */
63a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256      0x9E   /**< TLS 1.2 */
64a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384      0x9F   /**< TLS 1.2 */
65a8e1175bSopenharmony_ci
66a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256          0xA8   /**< TLS 1.2 */
67a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384          0xA9   /**< TLS 1.2 */
68a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256      0xAA   /**< TLS 1.2 */
69a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384      0xAB   /**< TLS 1.2 */
70a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256      0xAC   /**< TLS 1.2 */
71a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384      0xAD   /**< TLS 1.2 */
72a8e1175bSopenharmony_ci
73a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256          0xAE
74a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384          0xAF
75a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_NULL_SHA256                 0xB0   /**< Weak! */
76a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_NULL_SHA384                 0xB1   /**< Weak! */
77a8e1175bSopenharmony_ci
78a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256      0xB2
79a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384      0xB3
80a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256             0xB4   /**< Weak! */
81a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384             0xB5   /**< Weak! */
82a8e1175bSopenharmony_ci
83a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256      0xB6
84a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384      0xB7
85a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256             0xB8   /**< Weak! */
86a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384             0xB9   /**< Weak! */
87a8e1175bSopenharmony_ci
88a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256     0xBA   /**< TLS 1.2 */
89a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xBE   /**< TLS 1.2 */
90a8e1175bSopenharmony_ci
91a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256     0xC0   /**< TLS 1.2 */
92a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0xC4   /**< TLS 1.2 */
93a8e1175bSopenharmony_ci
94a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA             0xC001 /**< Weak! */
95a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA      0xC004
96a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA      0xC005
97a8e1175bSopenharmony_ci
98a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA            0xC006 /**< Weak! */
99a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA     0xC009
100a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA     0xC00A
101a8e1175bSopenharmony_ci
102a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA               0xC00B /**< Weak! */
103a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA        0xC00E
104a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA        0xC00F
105a8e1175bSopenharmony_ci
106a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA              0xC010 /**< Weak! */
107a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA       0xC013
108a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA       0xC014
109a8e1175bSopenharmony_ci
110a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256  0xC023 /**< TLS 1.2 */
111a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384  0xC024 /**< TLS 1.2 */
112a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256   0xC025 /**< TLS 1.2 */
113a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384   0xC026 /**< TLS 1.2 */
114a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256    0xC027 /**< TLS 1.2 */
115a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384    0xC028 /**< TLS 1.2 */
116a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256     0xC029 /**< TLS 1.2 */
117a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384     0xC02A /**< TLS 1.2 */
118a8e1175bSopenharmony_ci
119a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256  0xC02B /**< TLS 1.2 */
120a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384  0xC02C /**< TLS 1.2 */
121a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256   0xC02D /**< TLS 1.2 */
122a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384   0xC02E /**< TLS 1.2 */
123a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256    0xC02F /**< TLS 1.2 */
124a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384    0xC030 /**< TLS 1.2 */
125a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256     0xC031 /**< TLS 1.2 */
126a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384     0xC032 /**< TLS 1.2 */
127a8e1175bSopenharmony_ci
128a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA       0xC035
129a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA       0xC036
130a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256    0xC037
131a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384    0xC038
132a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA              0xC039
133a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256           0xC03A
134a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384           0xC03B
135a8e1175bSopenharmony_ci
136a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_ARIA_128_CBC_SHA256         0xC03C /**< TLS 1.2 */
137a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_ARIA_256_CBC_SHA384         0xC03D /**< TLS 1.2 */
138a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256     0xC044 /**< TLS 1.2 */
139a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384     0xC045 /**< TLS 1.2 */
140a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256 0xC048 /**< TLS 1.2 */
141a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384 0xC049 /**< TLS 1.2 */
142a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256  0xC04A /**< TLS 1.2 */
143a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384  0xC04B /**< TLS 1.2 */
144a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256   0xC04C /**< TLS 1.2 */
145a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384   0xC04D /**< TLS 1.2 */
146a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256    0xC04E /**< TLS 1.2 */
147a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384    0xC04F /**< TLS 1.2 */
148a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_ARIA_128_GCM_SHA256         0xC050 /**< TLS 1.2 */
149a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_ARIA_256_GCM_SHA384         0xC051 /**< TLS 1.2 */
150a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256     0xC052 /**< TLS 1.2 */
151a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384     0xC053 /**< TLS 1.2 */
152a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 0xC05C /**< TLS 1.2 */
153a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 0xC05D /**< TLS 1.2 */
154a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256  0xC05E /**< TLS 1.2 */
155a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384  0xC05F /**< TLS 1.2 */
156a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256   0xC060 /**< TLS 1.2 */
157a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384   0xC061 /**< TLS 1.2 */
158a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256    0xC062 /**< TLS 1.2 */
159a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384    0xC063 /**< TLS 1.2 */
160a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_ARIA_128_CBC_SHA256         0xC064 /**< TLS 1.2 */
161a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_ARIA_256_CBC_SHA384         0xC065 /**< TLS 1.2 */
162a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256     0xC066 /**< TLS 1.2 */
163a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384     0xC067 /**< TLS 1.2 */
164a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256     0xC068 /**< TLS 1.2 */
165a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384     0xC069 /**< TLS 1.2 */
166a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_ARIA_128_GCM_SHA256         0xC06A /**< TLS 1.2 */
167a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_ARIA_256_GCM_SHA384         0xC06B /**< TLS 1.2 */
168a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256     0xC06C /**< TLS 1.2 */
169a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384     0xC06D /**< TLS 1.2 */
170a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256     0xC06E /**< TLS 1.2 */
171a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384     0xC06F /**< TLS 1.2 */
172a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256   0xC070 /**< TLS 1.2 */
173a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384   0xC071 /**< TLS 1.2 */
174a8e1175bSopenharmony_ci
175a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0xC072
176a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0xC073
177a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256  0xC074
178a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384  0xC075
179a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256   0xC076
180a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384   0xC077
181a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256    0xC078
182a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384    0xC079
183a8e1175bSopenharmony_ci
184a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256         0xC07A /**< TLS 1.2 */
185a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384         0xC07B /**< TLS 1.2 */
186a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256     0xC07C /**< TLS 1.2 */
187a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384     0xC07D /**< TLS 1.2 */
188a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 0xC086 /**< TLS 1.2 */
189a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 0xC087 /**< TLS 1.2 */
190a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256  0xC088 /**< TLS 1.2 */
191a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384  0xC089 /**< TLS 1.2 */
192a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256   0xC08A /**< TLS 1.2 */
193a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384   0xC08B /**< TLS 1.2 */
194a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256    0xC08C /**< TLS 1.2 */
195a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384    0xC08D /**< TLS 1.2 */
196a8e1175bSopenharmony_ci
197a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256       0xC08E /**< TLS 1.2 */
198a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384       0xC08F /**< TLS 1.2 */
199a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256   0xC090 /**< TLS 1.2 */
200a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384   0xC091 /**< TLS 1.2 */
201a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256   0xC092 /**< TLS 1.2 */
202a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384   0xC093 /**< TLS 1.2 */
203a8e1175bSopenharmony_ci
204a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256       0xC094
205a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384       0xC095
206a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256   0xC096
207a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384   0xC097
208a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256   0xC098
209a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384   0xC099
210a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC09A
211a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC09B
212a8e1175bSopenharmony_ci
213a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_128_CCM                0xC09C  /**< TLS 1.2 */
214a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_256_CCM                0xC09D  /**< TLS 1.2 */
215a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM            0xC09E  /**< TLS 1.2 */
216a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM            0xC09F  /**< TLS 1.2 */
217a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8              0xC0A0  /**< TLS 1.2 */
218a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8              0xC0A1  /**< TLS 1.2 */
219a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8          0xC0A2  /**< TLS 1.2 */
220a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8          0xC0A3  /**< TLS 1.2 */
221a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_128_CCM                0xC0A4  /**< TLS 1.2 */
222a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_256_CCM                0xC0A5  /**< TLS 1.2 */
223a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM            0xC0A6  /**< TLS 1.2 */
224a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM            0xC0A7  /**< TLS 1.2 */
225a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8              0xC0A8  /**< TLS 1.2 */
226a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8              0xC0A9  /**< TLS 1.2 */
227a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8          0xC0AA  /**< TLS 1.2 */
228a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8          0xC0AB  /**< TLS 1.2 */
229a8e1175bSopenharmony_ci/* The last two are named with PSK_DHE in the RFC, which looks like a typo */
230a8e1175bSopenharmony_ci
231a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM        0xC0AC  /**< TLS 1.2 */
232a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM        0xC0AD  /**< TLS 1.2 */
233a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8      0xC0AE  /**< TLS 1.2 */
234a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8      0xC0AF  /**< TLS 1.2 */
235a8e1175bSopenharmony_ci
236a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8          0xC0FF  /**< experimental */
237a8e1175bSopenharmony_ci
238a8e1175bSopenharmony_ci/* RFC 7905 */
239a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256   0xCCA8 /**< TLS 1.2 */
240a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 0xCCA9 /**< TLS 1.2 */
241a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256     0xCCAA /**< TLS 1.2 */
242a8e1175bSopenharmony_ci#define MBEDTLS_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256         0xCCAB /**< TLS 1.2 */
243a8e1175bSopenharmony_ci#define MBEDTLS_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256   0xCCAC /**< TLS 1.2 */
244a8e1175bSopenharmony_ci#define MBEDTLS_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256     0xCCAD /**< TLS 1.2 */
245a8e1175bSopenharmony_ci#define MBEDTLS_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256     0xCCAE /**< TLS 1.2 */
246a8e1175bSopenharmony_ci
247a8e1175bSopenharmony_ci/* RFC 8446, Appendix B.4 */
248a8e1175bSopenharmony_ci#define MBEDTLS_TLS1_3_AES_128_GCM_SHA256                     0x1301 /**< TLS 1.3 */
249a8e1175bSopenharmony_ci#define MBEDTLS_TLS1_3_AES_256_GCM_SHA384                     0x1302 /**< TLS 1.3 */
250a8e1175bSopenharmony_ci#define MBEDTLS_TLS1_3_CHACHA20_POLY1305_SHA256               0x1303 /**< TLS 1.3 */
251a8e1175bSopenharmony_ci#define MBEDTLS_TLS1_3_AES_128_CCM_SHA256                     0x1304 /**< TLS 1.3 */
252a8e1175bSopenharmony_ci#define MBEDTLS_TLS1_3_AES_128_CCM_8_SHA256                   0x1305 /**< TLS 1.3 */
253a8e1175bSopenharmony_ci
254a8e1175bSopenharmony_ci/* Reminder: update mbedtls_ssl_premaster_secret when adding a new key exchange.
255a8e1175bSopenharmony_ci * Reminder: update MBEDTLS_KEY_EXCHANGE__xxx below
256a8e1175bSopenharmony_ci */
257a8e1175bSopenharmony_citypedef enum {
258a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_NONE = 0,
259a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_RSA,
260a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_DHE_RSA,
261a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_ECDHE_RSA,
262a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA,
263a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_PSK,
264a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_DHE_PSK,
265a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_RSA_PSK,
266a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_ECDHE_PSK,
267a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_ECDH_RSA,
268a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA,
269a8e1175bSopenharmony_ci    MBEDTLS_KEY_EXCHANGE_ECJPAKE,
270a8e1175bSopenharmony_ci} mbedtls_key_exchange_type_t;
271a8e1175bSopenharmony_ci
272a8e1175bSopenharmony_ci/* Key exchanges using a certificate */
273a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED)           || \
274a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED)       || \
275a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED)     || \
276a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)   || \
277a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED)       || \
278a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED)      || \
279a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
280a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED
281a8e1175bSopenharmony_ci#endif
282a8e1175bSopenharmony_ci
283a8e1175bSopenharmony_ci/* Key exchanges in either TLS 1.2 or 1.3 which are using an ECDSA
284a8e1175bSopenharmony_ci * signature */
285a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
286a8e1175bSopenharmony_ci    defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED)
287a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_WITH_ECDSA_ANY_ENABLED
288a8e1175bSopenharmony_ci#endif
289a8e1175bSopenharmony_ci
290a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) || \
291a8e1175bSopenharmony_ci    defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED)
292a8e1175bSopenharmony_ci#define MBEDTLS_SSL_HANDSHAKE_WITH_CERT_ENABLED
293a8e1175bSopenharmony_ci#endif
294a8e1175bSopenharmony_ci
295a8e1175bSopenharmony_ci/* Key exchanges allowing client certificate requests.
296a8e1175bSopenharmony_ci *
297a8e1175bSopenharmony_ci * Note: that's almost the same as MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED
298a8e1175bSopenharmony_ci * above, except RSA-PSK uses a server certificate but no client cert.
299a8e1175bSopenharmony_ci *
300a8e1175bSopenharmony_ci * Note: this difference is specific to TLS 1.2, as with TLS 1.3, things are
301a8e1175bSopenharmony_ci * more symmetrical: client certs and server certs are either both allowed
302a8e1175bSopenharmony_ci * (Ephemeral mode) or both disallowed (PSK and PKS-Ephemeral modes).
303a8e1175bSopenharmony_ci */
304a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED)           ||       \
305a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED)       ||       \
306a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED)     ||       \
307a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)   ||       \
308a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)    ||       \
309a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED)
310a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED
311a8e1175bSopenharmony_ci#endif
312a8e1175bSopenharmony_ci
313a8e1175bSopenharmony_ci/* Helper to state that certificate-based client authentication through ECDSA
314a8e1175bSopenharmony_ci * is supported in TLS 1.2 */
315a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED) && \
316a8e1175bSopenharmony_ci    defined(MBEDTLS_PK_CAN_ECDSA_SIGN) && defined(MBEDTLS_PK_CAN_ECDSA_VERIFY)
317a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_ECDSA_CERT_REQ_ALLOWED_ENABLED
318a8e1175bSopenharmony_ci#endif
319a8e1175bSopenharmony_ci
320a8e1175bSopenharmony_ci/* ECDSA required for certificates in either TLS 1.2 or 1.3 */
321a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_ECDSA_CERT_REQ_ALLOWED_ENABLED) || \
322a8e1175bSopenharmony_ci    defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED)
323a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_ECDSA_CERT_REQ_ANY_ALLOWED_ENABLED
324a8e1175bSopenharmony_ci#endif
325a8e1175bSopenharmony_ci
326a8e1175bSopenharmony_ci/* Key exchanges involving server signature in ServerKeyExchange */
327a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED)       || \
328a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED)     || \
329a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)
330a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED
331a8e1175bSopenharmony_ci#endif
332a8e1175bSopenharmony_ci
333a8e1175bSopenharmony_ci/* Key exchanges using ECDH */
334a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED)      || \
335a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
336a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED
337a8e1175bSopenharmony_ci#endif
338a8e1175bSopenharmony_ci
339a8e1175bSopenharmony_ci/* Key exchanges that don't involve ephemeral keys */
340a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED)           || \
341a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED)           || \
342a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED)       || \
343a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED)
344a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED
345a8e1175bSopenharmony_ci#endif
346a8e1175bSopenharmony_ci
347a8e1175bSopenharmony_ci/* Key exchanges that involve ephemeral keys */
348a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED)       || \
349a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED)       || \
350a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED)     || \
351a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)     || \
352a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)   || \
353a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
354a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_PFS_ENABLED
355a8e1175bSopenharmony_ci#endif
356a8e1175bSopenharmony_ci
357a8e1175bSopenharmony_ci/* Key exchanges using a PSK */
358a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED)           || \
359a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED)       || \
360a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED)       || \
361a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
362a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED
363a8e1175bSopenharmony_ci#endif
364a8e1175bSopenharmony_ci
365a8e1175bSopenharmony_ci/* Key exchanges using DHE */
366a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED)       || \
367a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED)
368a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_DHE_ENABLED
369a8e1175bSopenharmony_ci#endif
370a8e1175bSopenharmony_ci
371a8e1175bSopenharmony_ci/* Key exchanges using ECDHE */
372a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED)     || \
373a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)   || \
374a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
375a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED
376a8e1175bSopenharmony_ci#endif
377a8e1175bSopenharmony_ci
378a8e1175bSopenharmony_ci/* TLS 1.2 key exchanges using ECDH or ECDHE*/
379a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED) || \
380a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED)
381a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_ECDH_OR_ECDHE_1_2_ENABLED
382a8e1175bSopenharmony_ci#endif
383a8e1175bSopenharmony_ci
384a8e1175bSopenharmony_ci/* TLS 1.3 PSK key exchanges */
385a8e1175bSopenharmony_ci#if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED) || \
386a8e1175bSopenharmony_ci    defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED)
387a8e1175bSopenharmony_ci#define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_PSK_ENABLED
388a8e1175bSopenharmony_ci#endif
389a8e1175bSopenharmony_ci
390a8e1175bSopenharmony_ci/* TLS 1.2 or 1.3 key exchanges with PSK */
391a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) || \
392a8e1175bSopenharmony_ci    defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_PSK_ENABLED)
393a8e1175bSopenharmony_ci#define MBEDTLS_SSL_HANDSHAKE_WITH_PSK_ENABLED
394a8e1175bSopenharmony_ci#endif
395a8e1175bSopenharmony_ci
396a8e1175bSopenharmony_ci/* TLS 1.3 ephemeral key exchanges */
397a8e1175bSopenharmony_ci#if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED) || \
398a8e1175bSopenharmony_ci    defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED)
399a8e1175bSopenharmony_ci#define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED
400a8e1175bSopenharmony_ci#endif
401a8e1175bSopenharmony_ci
402a8e1175bSopenharmony_ci/* TLS 1.3 key exchanges using ECDHE */
403a8e1175bSopenharmony_ci#if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED) && \
404a8e1175bSopenharmony_ci    defined(PSA_WANT_ALG_ECDH)
405a8e1175bSopenharmony_ci#define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_ECDHE_ENABLED
406a8e1175bSopenharmony_ci#endif
407a8e1175bSopenharmony_ci
408a8e1175bSopenharmony_ci/* TLS 1.2 or 1.3 key exchanges using ECDH or ECDHE */
409a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDH_OR_ECDHE_1_2_ENABLED) || \
410a8e1175bSopenharmony_ci    defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_ECDHE_ENABLED)
411a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_ECDH_OR_ECDHE_ANY_ENABLED
412a8e1175bSopenharmony_ci#endif
413a8e1175bSopenharmony_ci
414a8e1175bSopenharmony_ci/* TLS 1.2 XXDH key exchanges: ECDH or ECDHE or FFDH */
415a8e1175bSopenharmony_ci#if (defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDH_OR_ECDHE_1_2_ENABLED) || \
416a8e1175bSopenharmony_ci    defined(MBEDTLS_KEY_EXCHANGE_SOME_DHE_ENABLED))
417a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_XXDH_1_2_ENABLED
418a8e1175bSopenharmony_ci#endif
419a8e1175bSopenharmony_ci
420a8e1175bSopenharmony_ci/* The handshake params structure has a set of fields called xxdh_psa which are used:
421a8e1175bSopenharmony_ci * - by TLS 1.2 with `USE_PSA` to do ECDH or ECDHE;
422a8e1175bSopenharmony_ci * - by TLS 1.3 to do ECDHE or FFDHE.
423a8e1175bSopenharmony_ci * The following macros can be used to guard their declaration and use.
424a8e1175bSopenharmony_ci */
425a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDH_OR_ECDHE_1_2_ENABLED) && \
426a8e1175bSopenharmony_ci    defined(MBEDTLS_USE_PSA_CRYPTO)
427a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_XXDH_PSA_1_2_ENABLED
428a8e1175bSopenharmony_ci#endif
429a8e1175bSopenharmony_ci#if defined(MBEDTLS_KEY_EXCHANGE_SOME_XXDH_PSA_1_2_ENABLED) || \
430a8e1175bSopenharmony_ci    defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED)
431a8e1175bSopenharmony_ci#define MBEDTLS_KEY_EXCHANGE_SOME_XXDH_PSA_ANY_ENABLED
432a8e1175bSopenharmony_ci#endif
433a8e1175bSopenharmony_ci
434a8e1175bSopenharmony_citypedef struct mbedtls_ssl_ciphersuite_t mbedtls_ssl_ciphersuite_t;
435a8e1175bSopenharmony_ci
436a8e1175bSopenharmony_ci#define MBEDTLS_CIPHERSUITE_WEAK       0x01    /**< Weak ciphersuite flag  */
437a8e1175bSopenharmony_ci#define MBEDTLS_CIPHERSUITE_SHORT_TAG  0x02    /**< Short authentication tag,
438a8e1175bSopenharmony_ci                                                     eg for CCM_8 */
439a8e1175bSopenharmony_ci#define MBEDTLS_CIPHERSUITE_NODTLS     0x04    /**< Can't be used with DTLS */
440a8e1175bSopenharmony_ci
441a8e1175bSopenharmony_ci/**
442a8e1175bSopenharmony_ci * \brief   This structure is used for storing ciphersuite information
443a8e1175bSopenharmony_ci *
444a8e1175bSopenharmony_ci * \note    members are defined using integral types instead of enums
445a8e1175bSopenharmony_ci *          in order to pack structure and reduce memory usage by internal
446a8e1175bSopenharmony_ci *          \c ciphersuite_definitions[]
447a8e1175bSopenharmony_ci */
448a8e1175bSopenharmony_cistruct mbedtls_ssl_ciphersuite_t {
449a8e1175bSopenharmony_ci    int MBEDTLS_PRIVATE(id);
450a8e1175bSopenharmony_ci    const char *MBEDTLS_PRIVATE(name);
451a8e1175bSopenharmony_ci
452a8e1175bSopenharmony_ci    uint8_t MBEDTLS_PRIVATE(cipher);           /* mbedtls_cipher_type_t */
453a8e1175bSopenharmony_ci    uint8_t MBEDTLS_PRIVATE(mac);              /* mbedtls_md_type_t */
454a8e1175bSopenharmony_ci    uint8_t MBEDTLS_PRIVATE(key_exchange);     /* mbedtls_key_exchange_type_t */
455a8e1175bSopenharmony_ci    uint8_t MBEDTLS_PRIVATE(flags);
456a8e1175bSopenharmony_ci
457a8e1175bSopenharmony_ci    uint16_t MBEDTLS_PRIVATE(min_tls_version); /* mbedtls_ssl_protocol_version */
458a8e1175bSopenharmony_ci    uint16_t MBEDTLS_PRIVATE(max_tls_version); /* mbedtls_ssl_protocol_version */
459a8e1175bSopenharmony_ci};
460a8e1175bSopenharmony_ci
461a8e1175bSopenharmony_ciconst int *mbedtls_ssl_list_ciphersuites(void);
462a8e1175bSopenharmony_ci
463a8e1175bSopenharmony_ciconst mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_string(const char *ciphersuite_name);
464a8e1175bSopenharmony_ciconst mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_id(int ciphersuite_id);
465a8e1175bSopenharmony_ci
466a8e1175bSopenharmony_cistatic inline const char *mbedtls_ssl_ciphersuite_get_name(const mbedtls_ssl_ciphersuite_t *info)
467a8e1175bSopenharmony_ci{
468a8e1175bSopenharmony_ci    return info->MBEDTLS_PRIVATE(name);
469a8e1175bSopenharmony_ci}
470a8e1175bSopenharmony_ci
471a8e1175bSopenharmony_cistatic inline int mbedtls_ssl_ciphersuite_get_id(const mbedtls_ssl_ciphersuite_t *info)
472a8e1175bSopenharmony_ci{
473a8e1175bSopenharmony_ci    return info->MBEDTLS_PRIVATE(id);
474a8e1175bSopenharmony_ci}
475a8e1175bSopenharmony_ci
476a8e1175bSopenharmony_cisize_t mbedtls_ssl_ciphersuite_get_cipher_key_bitlen(const mbedtls_ssl_ciphersuite_t *info);
477a8e1175bSopenharmony_ci
478a8e1175bSopenharmony_ci#ifdef __cplusplus
479a8e1175bSopenharmony_ci}
480a8e1175bSopenharmony_ci#endif
481a8e1175bSopenharmony_ci
482a8e1175bSopenharmony_ci#endif /* ssl_ciphersuites.h */
483