7#ifndef BOTAN_TLS_ALGO_IDS_H_
8#define BOTAN_TLS_ALGO_IDS_H_
10#include <botan/asn1_obj.h>
11#include <botan/pk_keys.h>
12#include <botan/types.h>
155 static std::optional<Group_Params> from_string(std::string_view group_name);
165 constexpr uint16_t
wire_code()
const {
return static_cast<uint16_t
>(m_code); }
170 bool is_available()
const;
172 constexpr bool is_x25519()
const {
return m_code == Group_Params_Code::X25519; }
174 constexpr bool is_x448()
const {
return m_code == Group_Params_Code::X448; }
177 return m_code == Group_Params_Code::SECP256R1 || m_code == Group_Params_Code::SECP384R1 ||
178 m_code == Group_Params_Code::SECP521R1 || m_code == Group_Params_Code::BRAINPOOL256R1 ||
179 m_code == Group_Params_Code::BRAINPOOL384R1 || m_code == Group_Params_Code::BRAINPOOL512R1;
184 return wire_code() >= 256 && wire_code() < 512;
188 return m_code == Group_Params_Code::FFDHE_2048 || m_code == Group_Params_Code::FFDHE_3072 ||
189 m_code == Group_Params_Code::FFDHE_4096 || m_code == Group_Params_Code::FFDHE_6144 ||
190 m_code == Group_Params_Code::FFDHE_8192;
194 return m_code == Group_Params_Code::ML_KEM_512 || m_code == Group_Params_Code::ML_KEM_768 ||
195 m_code == Group_Params_Code::ML_KEM_1024;
199 return m_code == Group_Params_Code::eFRODOKEM_640_SHAKE_OQS ||
200 m_code == Group_Params_Code::eFRODOKEM_976_SHAKE_OQS ||
201 m_code == Group_Params_Code::eFRODOKEM_1344_SHAKE_OQS ||
202 m_code == Group_Params_Code::eFRODOKEM_640_AES_OQS ||
203 m_code == Group_Params_Code::eFRODOKEM_976_AES_OQS ||
204 m_code == Group_Params_Code::eFRODOKEM_1344_AES_OQS;
207 constexpr bool is_pure_ecc_group()
const {
return is_x25519() || is_x448() || is_ecdh_named_curve(); }
213 return is_pure_ml_kem() || is_pure_frodokem() || is_pqc_hybrid();
219 return m_code == Group_Params_Code::HYBRID_SECP256R1_ML_KEM_768 ||
220 m_code == Group_Params_Code::HYBRID_SECP384R1_ML_KEM_1024 ||
221 m_code == Group_Params_Code::HYBRID_X25519_ML_KEM_768;
225 return m_code == Group_Params_Code::HYBRID_X25519_eFRODOKEM_640_SHAKE_OQS ||
226 m_code == Group_Params_Code::HYBRID_X25519_eFRODOKEM_640_AES_OQS ||
227 m_code == Group_Params_Code::HYBRID_X448_eFRODOKEM_976_SHAKE_OQS ||
228 m_code == Group_Params_Code::HYBRID_X448_eFRODOKEM_976_AES_OQS ||
229 m_code == Group_Params_Code::HYBRID_SECP256R1_eFRODOKEM_640_SHAKE_OQS ||
230 m_code == Group_Params_Code::HYBRID_SECP256R1_eFRODOKEM_640_AES_OQS ||
231 m_code == Group_Params_Code::HYBRID_SECP384R1_eFRODOKEM_976_SHAKE_OQS ||
232 m_code == Group_Params_Code::HYBRID_SECP384R1_eFRODOKEM_976_AES_OQS ||
233 m_code == Group_Params_Code::HYBRID_SECP521R1_eFRODOKEM_1344_SHAKE_OQS ||
234 m_code == Group_Params_Code::HYBRID_SECP521R1_eFRODOKEM_1344_AES_OQS;
237 constexpr bool is_pqc_hybrid()
const {
return is_pqc_hybrid_ml_kem() || is_pqc_hybrid_frodokem(); }
243 return is_pure_ml_kem() || is_pure_frodokem() || is_pqc_hybrid();
249 std::optional<Group_Params_Code> pqc_hybrid_ecc()
const;
252 std::optional<std::string> to_string()
const;
#define BOTAN_DIAGNOSTIC_POP
#define BOTAN_DIAGNOSTIC_PUSH
#define BOTAN_DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS
#define BOTAN_PUBLIC_API(maj, min)
constexpr bool operator==(Group_Params other) const
constexpr bool is_dh_named_group() const
constexpr bool is_in_ffdhe_range() const
constexpr bool operator<(Group_Params other) const
constexpr bool is_pqc_hybrid() const
constexpr bool is_kem() const
constexpr bool is_post_quantum() const
constexpr bool operator==(Group_Params_Code code) const
constexpr bool is_ecdh_named_curve() const
constexpr uint16_t wire_code() const
constexpr bool is_pure_frodokem() const
constexpr Group_Params_Code code() const
constexpr Group_Params(uint16_t code)
constexpr bool is_pqc_hybrid_frodokem() const
constexpr bool is_pure_ml_kem() const
constexpr Group_Params(Group_Params_Code code)
constexpr bool is_pqc_hybrid_ml_kem() const
constexpr bool is_x448() const
constexpr bool is_pure_ecc_group() const
constexpr bool is_x25519() const
int(* final)(unsigned char *, CTX *)
@ AES_256_CBC_HMAC_SHA256
@ AES_256_CBC_HMAC_SHA384
@ AES_128_CBC_HMAC_SHA256
Kex_Algo kex_method_from_string(std::string_view str)
Auth_Method auth_method_from_string(std::string_view str)
std::string kdf_algo_to_string(KDF_Algo algo)
std::string kex_method_to_string(Kex_Algo method)
bool key_exchange_is_psk(Kex_Algo m)
std::string auth_method_to_string(Auth_Method method)
@ HYBRID_X448_eFRODOKEM_976_SHAKE_OQS
@ HYBRID_X25519_ML_KEM_768
@ HYBRID_X25519_eFRODOKEM_640_SHAKE_OQS
@ HYBRID_X448_eFRODOKEM_976_AES_OQS
@ eFRODOKEM_640_SHAKE_OQS
@ HYBRID_SECP256R1_ML_KEM_768
@ HYBRID_SECP256R1_eFRODOKEM_640_SHAKE_OQS
@ HYBRID_SECP521R1_eFRODOKEM_1344_SHAKE_OQS
@ HYBRID_SECP384R1_eFRODOKEM_976_AES_OQS
@ HYBRID_SECP256R1_eFRODOKEM_640_AES_OQS
@ HYBRID_SECP384R1_ML_KEM_1024
@ HYBRID_X25519_eFRODOKEM_640_AES_OQS
@ eFRODOKEM_1344_SHAKE_OQS
@ HYBRID_SECP521R1_eFRODOKEM_1344_AES_OQS
@ eFRODOKEM_976_SHAKE_OQS
@ HYBRID_SECP384R1_eFRODOKEM_976_SHAKE_OQS