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>
149 static std::optional<Group_Params> from_string(std::string_view group_name);
159 constexpr uint16_t
wire_code()
const {
return static_cast<uint16_t
>(m_code); }
164 bool is_available()
const;
166 constexpr bool is_x25519()
const {
return m_code == Group_Params_Code::X25519; }
168 constexpr bool is_x448()
const {
return m_code == Group_Params_Code::X448; }
171 return m_code == Group_Params_Code::SECP256R1 || m_code == Group_Params_Code::SECP384R1 ||
172 m_code == Group_Params_Code::SECP521R1 || m_code == Group_Params_Code::BRAINPOOL256R1 ||
173 m_code == Group_Params_Code::BRAINPOOL384R1 || m_code == Group_Params_Code::BRAINPOOL512R1;
178 return wire_code() >= 256 && wire_code() < 512;
182 return m_code == Group_Params_Code::FFDHE_2048 || m_code == Group_Params_Code::FFDHE_3072 ||
183 m_code == Group_Params_Code::FFDHE_4096 || m_code == Group_Params_Code::FFDHE_6144 ||
184 m_code == Group_Params_Code::FFDHE_8192;
188 return m_code == Group_Params_Code::ML_KEM_512 || m_code == Group_Params_Code::ML_KEM_768 ||
189 m_code == Group_Params_Code::ML_KEM_1024;
193 return m_code == Group_Params_Code::eFRODOKEM_640_SHAKE_OQS ||
194 m_code == Group_Params_Code::eFRODOKEM_976_SHAKE_OQS ||
195 m_code == Group_Params_Code::eFRODOKEM_1344_SHAKE_OQS ||
196 m_code == Group_Params_Code::eFRODOKEM_640_AES_OQS ||
197 m_code == Group_Params_Code::eFRODOKEM_976_AES_OQS ||
198 m_code == Group_Params_Code::eFRODOKEM_1344_AES_OQS;
201 constexpr bool is_pure_ecc_group()
const {
return is_x25519() || is_x448() || is_ecdh_named_curve(); }
207 return is_pure_ml_kem() || is_pure_frodokem() || is_pqc_hybrid();
213 return m_code == Group_Params_Code::HYBRID_SECP256R1_ML_KEM_768 ||
214 m_code == Group_Params_Code::HYBRID_X25519_ML_KEM_768;
218 return m_code == Group_Params_Code::HYBRID_X25519_eFRODOKEM_640_SHAKE_OQS ||
219 m_code == Group_Params_Code::HYBRID_X25519_eFRODOKEM_640_AES_OQS ||
220 m_code == Group_Params_Code::HYBRID_X448_eFRODOKEM_976_SHAKE_OQS ||
221 m_code == Group_Params_Code::HYBRID_X448_eFRODOKEM_976_AES_OQS ||
222 m_code == Group_Params_Code::HYBRID_SECP256R1_eFRODOKEM_640_SHAKE_OQS ||
223 m_code == Group_Params_Code::HYBRID_SECP256R1_eFRODOKEM_640_AES_OQS ||
224 m_code == Group_Params_Code::HYBRID_SECP384R1_eFRODOKEM_976_SHAKE_OQS ||
225 m_code == Group_Params_Code::HYBRID_SECP384R1_eFRODOKEM_976_AES_OQS ||
226 m_code == Group_Params_Code::HYBRID_SECP521R1_eFRODOKEM_1344_SHAKE_OQS ||
227 m_code == Group_Params_Code::HYBRID_SECP521R1_eFRODOKEM_1344_AES_OQS;
230 constexpr bool is_pqc_hybrid()
const {
return is_pqc_hybrid_ml_kem() || is_pqc_hybrid_frodokem(); }
236 return is_pure_ml_kem() || is_pure_frodokem() || is_pqc_hybrid();
242 std::optional<Group_Params_Code> pqc_hybrid_ecc()
const;
245 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 *)
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)
@ AES_256_CBC_HMAC_SHA256
@ AES_256_CBC_HMAC_SHA384
@ AES_128_CBC_HMAC_SHA256
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_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