1 /**
2  * \file ssl_ciphersuites_internal.h
3  *
4  * \brief Internal part of the public "ssl_ciphersuites.h".
5  */
6 /*
7  *  Copyright The Mbed TLS Contributors
8  *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
9  */
10 #ifndef MBEDTLS_SSL_CIPHERSUITES_INTERNAL_H
11 #define MBEDTLS_SSL_CIPHERSUITES_INTERNAL_H
12 
13 #include "mbedtls/pk.h"
14 
15 #if defined(MBEDTLS_PK_C)
16 mbedtls_pk_type_t mbedtls_ssl_get_ciphersuite_sig_pk_alg(const mbedtls_ssl_ciphersuite_t *info);
17 #if defined(MBEDTLS_USE_PSA_CRYPTO)
18 psa_algorithm_t mbedtls_ssl_get_ciphersuite_sig_pk_psa_alg(const mbedtls_ssl_ciphersuite_t *info);
19 psa_key_usage_t mbedtls_ssl_get_ciphersuite_sig_pk_psa_usage(const mbedtls_ssl_ciphersuite_t *info);
20 #endif /* MBEDTLS_USE_PSA_CRYPTO */
21 mbedtls_pk_type_t mbedtls_ssl_get_ciphersuite_sig_alg(const mbedtls_ssl_ciphersuite_t *info);
22 #endif /* MBEDTLS_PK_C */
23 
24 int mbedtls_ssl_ciphersuite_uses_ec(const mbedtls_ssl_ciphersuite_t *info);
25 int mbedtls_ssl_ciphersuite_uses_psk(const mbedtls_ssl_ciphersuite_t *info);
26 
27 #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PFS_ENABLED)
mbedtls_ssl_ciphersuite_has_pfs(const mbedtls_ssl_ciphersuite_t * info)28 static inline int mbedtls_ssl_ciphersuite_has_pfs(const mbedtls_ssl_ciphersuite_t *info)
29 {
30     switch (info->MBEDTLS_PRIVATE(key_exchange)) {
31         case MBEDTLS_KEY_EXCHANGE_DHE_RSA:
32         case MBEDTLS_KEY_EXCHANGE_DHE_PSK:
33         case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
34         case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK:
35         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
36         case MBEDTLS_KEY_EXCHANGE_ECJPAKE:
37             return 1;
38 
39         default:
40             return 0;
41     }
42 }
43 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PFS_ENABLED */
44 
45 #if defined(MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED)
mbedtls_ssl_ciphersuite_no_pfs(const mbedtls_ssl_ciphersuite_t * info)46 static inline int mbedtls_ssl_ciphersuite_no_pfs(const mbedtls_ssl_ciphersuite_t *info)
47 {
48     switch (info->MBEDTLS_PRIVATE(key_exchange)) {
49         case MBEDTLS_KEY_EXCHANGE_ECDH_RSA:
50         case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA:
51         case MBEDTLS_KEY_EXCHANGE_RSA:
52         case MBEDTLS_KEY_EXCHANGE_PSK:
53         case MBEDTLS_KEY_EXCHANGE_RSA_PSK:
54             return 1;
55 
56         default:
57             return 0;
58     }
59 }
60 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED */
61 
62 #if defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED)
mbedtls_ssl_ciphersuite_uses_ecdh(const mbedtls_ssl_ciphersuite_t * info)63 static inline int mbedtls_ssl_ciphersuite_uses_ecdh(const mbedtls_ssl_ciphersuite_t *info)
64 {
65     switch (info->MBEDTLS_PRIVATE(key_exchange)) {
66         case MBEDTLS_KEY_EXCHANGE_ECDH_RSA:
67         case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA:
68             return 1;
69 
70         default:
71             return 0;
72     }
73 }
74 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED */
75 
mbedtls_ssl_ciphersuite_cert_req_allowed(const mbedtls_ssl_ciphersuite_t * info)76 static inline int mbedtls_ssl_ciphersuite_cert_req_allowed(const mbedtls_ssl_ciphersuite_t *info)
77 {
78     switch (info->MBEDTLS_PRIVATE(key_exchange)) {
79         case MBEDTLS_KEY_EXCHANGE_RSA:
80         case MBEDTLS_KEY_EXCHANGE_DHE_RSA:
81         case MBEDTLS_KEY_EXCHANGE_ECDH_RSA:
82         case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
83         case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA:
84         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
85             return 1;
86 
87         default:
88             return 0;
89     }
90 }
91 
mbedtls_ssl_ciphersuite_uses_srv_cert(const mbedtls_ssl_ciphersuite_t * info)92 static inline int mbedtls_ssl_ciphersuite_uses_srv_cert(const mbedtls_ssl_ciphersuite_t *info)
93 {
94     switch (info->MBEDTLS_PRIVATE(key_exchange)) {
95         case MBEDTLS_KEY_EXCHANGE_RSA:
96         case MBEDTLS_KEY_EXCHANGE_RSA_PSK:
97         case MBEDTLS_KEY_EXCHANGE_DHE_RSA:
98         case MBEDTLS_KEY_EXCHANGE_ECDH_RSA:
99         case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
100         case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA:
101         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
102             return 1;
103 
104         default:
105             return 0;
106     }
107 }
108 
109 #if defined(MBEDTLS_KEY_EXCHANGE_SOME_DHE_ENABLED)
mbedtls_ssl_ciphersuite_uses_dhe(const mbedtls_ssl_ciphersuite_t * info)110 static inline int mbedtls_ssl_ciphersuite_uses_dhe(const mbedtls_ssl_ciphersuite_t *info)
111 {
112     switch (info->MBEDTLS_PRIVATE(key_exchange)) {
113         case MBEDTLS_KEY_EXCHANGE_DHE_RSA:
114         case MBEDTLS_KEY_EXCHANGE_DHE_PSK:
115             return 1;
116 
117         default:
118             return 0;
119     }
120 }
121 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_DHE_ENABLED) */
122 
123 #if defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED)
mbedtls_ssl_ciphersuite_uses_ecdhe(const mbedtls_ssl_ciphersuite_t * info)124 static inline int mbedtls_ssl_ciphersuite_uses_ecdhe(const mbedtls_ssl_ciphersuite_t *info)
125 {
126     switch (info->MBEDTLS_PRIVATE(key_exchange)) {
127         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
128         case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
129         case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK:
130             return 1;
131 
132         default:
133             return 0;
134     }
135 }
136 #endif /* MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED) */
137 
138 #if defined(MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED)
mbedtls_ssl_ciphersuite_uses_server_signature(const mbedtls_ssl_ciphersuite_t * info)139 static inline int mbedtls_ssl_ciphersuite_uses_server_signature(
140     const mbedtls_ssl_ciphersuite_t *info)
141 {
142     switch (info->MBEDTLS_PRIVATE(key_exchange)) {
143         case MBEDTLS_KEY_EXCHANGE_DHE_RSA:
144         case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
145         case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
146             return 1;
147 
148         default:
149             return 0;
150     }
151 }
152 #endif /* MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED */
153 
154 #endif /* MBEDTLS_SSL_CIPHERSUITES_INTERNAL_H */
155