Botan 3.13.0
Crypto and TLS for C&
Botan::TLS::Group_Params Class Referencefinal

#include <tls_algos.h>

Public Member Functions

constexpr Group_Params_Code code () const
constexpr Group_Params ()
constexpr Group_Params (Group_Params_Code code)
constexpr Group_Params (uint16_t code)
bool is_available () const
constexpr bool is_dh_named_group () const
constexpr bool is_ecdh_named_curve () const
constexpr bool is_in_ffdhe_range () const
constexpr bool is_kem () const
constexpr bool is_post_quantum () const
constexpr bool is_pqc_hybrid () const
constexpr bool is_pqc_hybrid_frodokem () const
constexpr bool is_pqc_hybrid_ml_kem () const
constexpr bool is_pure_ecc_group () const
constexpr bool is_pure_frodokem () const
constexpr bool is_pure_ml_kem () const
constexpr bool is_x25519 () const
constexpr bool is_x448 () const
constexpr bool operator< (Group_Params other) const
constexpr bool operator== (Group_Params other) const
constexpr bool operator== (Group_Params_Code code) const
std::optional< Group_Params_Codepqc_hybrid_ecc () const
std::optional< std::string > to_algorithm_spec () const
std::optional< std::string > to_string () const
constexpr uint16_t wire_code () const

Static Public Member Functions

static std::optional< Group_Paramsfrom_string (std::string_view group_name)

Detailed Description

Definition at line 141 of file tls_algos.h.

Constructor & Destructor Documentation

◆ Group_Params() [1/3]

Botan::TLS::Group_Params::Group_Params ( )
inlineconstexpr

Definition at line 145 of file tls_algos.h.

References Botan::NONE.

Referenced by operator<(), and operator==().

◆ Group_Params() [2/3]

Botan::TLS::Group_Params::Group_Params ( Group_Params_Code code)
inlineconstexpr

Definition at line 148 of file tls_algos.h.

148: m_code(code) {}
constexpr Group_Params_Code code() const
Definition tls_algos.h:164

References code().

◆ Group_Params() [3/3]

Botan::TLS::Group_Params::Group_Params ( uint16_t code)
inlineconstexpr

Definition at line 151 of file tls_algos.h.

151: m_code(static_cast<Group_Params_Code>(code)) {}

References code().

Member Function Documentation

◆ code()

Group_Params_Code Botan::TLS::Group_Params::code ( ) const
inlineconstexpr

Definition at line 164 of file tls_algos.h.

164{ return m_code; }

Referenced by Group_Params(), Group_Params(), and operator==().

◆ from_string()

std::optional< Group_Params > Botan::TLS::Group_Params::from_string ( std::string_view group_name)
static
Returns
std::nullopt if an unknown name

Definition at line 275 of file tls_algos.cpp.

275 {
276 if(group_name == "secp256r1") {
277 return Group_Params::SECP256R1;
278 }
279 if(group_name == "secp384r1") {
280 return Group_Params::SECP384R1;
281 }
282 if(group_name == "secp521r1") {
283 return Group_Params::SECP521R1;
284 }
285 if(group_name == "brainpool256r1") {
286 return Group_Params::BRAINPOOL256R1;
287 }
288 if(group_name == "brainpool384r1") {
289 return Group_Params::BRAINPOOL384R1;
290 }
291 if(group_name == "brainpool512r1") {
292 return Group_Params::BRAINPOOL512R1;
293 }
294 if(group_name == "x25519") {
295 return Group_Params::X25519;
296 }
297 if(group_name == "x448") {
298 return Group_Params::X448;
299 }
300 if(group_name == "brainpool256r1tls13") {
301 return Group_Params::BRAINPOOL256R1TLS13;
302 }
303 if(group_name == "brainpool384r1tls13") {
304 return Group_Params::BRAINPOOL384R1TLS13;
305 }
306 if(group_name == "brainpool512r1tls13") {
307 return Group_Params::BRAINPOOL512R1TLS13;
308 }
309
310 if(group_name == "ffdhe/ietf/2048") {
311 return Group_Params::FFDHE_2048;
312 }
313 if(group_name == "ffdhe/ietf/3072") {
314 return Group_Params::FFDHE_3072;
315 }
316 if(group_name == "ffdhe/ietf/4096") {
317 return Group_Params::FFDHE_4096;
318 }
319 if(group_name == "ffdhe/ietf/6144") {
320 return Group_Params::FFDHE_6144;
321 }
322 if(group_name == "ffdhe/ietf/8192") {
323 return Group_Params::FFDHE_8192;
324 }
325
326 if(group_name == "ML-KEM-512") {
327 return Group_Params::ML_KEM_512;
328 }
329 if(group_name == "ML-KEM-768") {
330 return Group_Params::ML_KEM_768;
331 }
332 if(group_name == "ML-KEM-1024") {
333 return Group_Params::ML_KEM_1024;
334 }
335
336 if(group_name == "eFrodoKEM-640-SHAKE") {
337 return Group_Params::eFRODOKEM_640_SHAKE_OQS;
338 }
339 if(group_name == "eFrodoKEM-976-SHAKE") {
340 return Group_Params::eFRODOKEM_976_SHAKE_OQS;
341 }
342 if(group_name == "eFrodoKEM-1344-SHAKE") {
343 return Group_Params::eFRODOKEM_1344_SHAKE_OQS;
344 }
345 if(group_name == "eFrodoKEM-640-AES") {
346 return Group_Params::eFRODOKEM_640_AES_OQS;
347 }
348 if(group_name == "eFrodoKEM-976-AES") {
349 return Group_Params::eFRODOKEM_976_AES_OQS;
350 }
351 if(group_name == "eFrodoKEM-1344-AES") {
352 return Group_Params::eFRODOKEM_1344_AES_OQS;
353 }
354
355 if(group_name == "x25519/ML-KEM-768") {
356 return Group_Params::HYBRID_X25519_ML_KEM_768;
357 }
358 if(group_name == "secp256r1/ML-KEM-768") {
359 return Group_Params::HYBRID_SECP256R1_ML_KEM_768;
360 }
361 if(group_name == "secp384r1/ML-KEM-1024") {
362 return Group_Params::HYBRID_SECP384R1_ML_KEM_1024;
363 }
364
365 if(group_name == "x25519/eFrodoKEM-640-SHAKE") {
366 return Group_Params::HYBRID_X25519_eFRODOKEM_640_SHAKE_OQS;
367 }
368 if(group_name == "x25519/eFrodoKEM-640-AES") {
369 return Group_Params::HYBRID_X25519_eFRODOKEM_640_AES_OQS;
370 }
371 if(group_name == "x448/eFrodoKEM-976-SHAKE") {
372 return Group_Params::HYBRID_X448_eFRODOKEM_976_SHAKE_OQS;
373 }
374 if(group_name == "x448/eFrodoKEM-976-AES") {
375 return Group_Params::HYBRID_X448_eFRODOKEM_976_AES_OQS;
376 }
377
378 if(group_name == "secp256r1/eFrodoKEM-640-SHAKE") {
379 return Group_Params::HYBRID_SECP256R1_eFRODOKEM_640_SHAKE_OQS;
380 }
381 if(group_name == "secp256r1/eFrodoKEM-640-AES") {
382 return Group_Params::HYBRID_SECP256R1_eFRODOKEM_640_AES_OQS;
383 }
384
385 if(group_name == "secp384r1/eFrodoKEM-976-SHAKE") {
386 return Group_Params::HYBRID_SECP384R1_eFRODOKEM_976_SHAKE_OQS;
387 }
388 if(group_name == "secp384r1/eFrodoKEM-976-AES") {
389 return Group_Params::HYBRID_SECP384R1_eFRODOKEM_976_AES_OQS;
390 }
391
392 if(group_name == "secp521r1/eFrodoKEM-1344-SHAKE") {
393 return Group_Params::HYBRID_SECP521R1_eFRODOKEM_1344_SHAKE_OQS;
394 }
395 if(group_name == "secp521r1/eFrodoKEM-1344-AES") {
396 return Group_Params::HYBRID_SECP521R1_eFRODOKEM_1344_AES_OQS;
397 }
398
399 return std::nullopt;
400}

Referenced by Botan::TLS::Text_Policy::read_group_list().

◆ is_available()

bool Botan::TLS::Group_Params::is_available ( ) const

Returns false if this group/KEX is not available in the build configuration

Definition at line 234 of file tls_algos.cpp.

234 {
235 // For group codes we recognize, check the build-time availability table.
236 // Unknown codes may be user-supplied custom groups handled via callbacks.
237 if(to_string().has_value()) {
238 static constexpr auto codes = available_group_params();
239 return std::binary_search(codes.begin(), codes.end(), this->code());
240 }
241 return true;
242}
std::optional< std::string > to_string() const

References to_string().

Referenced by Botan::TLS::Text_Policy::read_group_list().

◆ is_dh_named_group()

◆ is_ecdh_named_curve()

bool Botan::TLS::Group_Params::is_ecdh_named_curve ( ) const
inlineconstexpr

Definition at line 177 of file tls_algos.h.

References Botan::TLS::BRAINPOOL256R1, Botan::TLS::BRAINPOOL256R1TLS13, Botan::TLS::BRAINPOOL384R1, Botan::TLS::BRAINPOOL384R1TLS13, Botan::TLS::BRAINPOOL512R1, Botan::TLS::BRAINPOOL512R1TLS13, Botan::TLS::SECP256R1, Botan::TLS::SECP384R1, and Botan::TLS::SECP521R1.

Referenced by Botan::TLS::Client_Key_Exchange::Client_Key_Exchange(), and is_pure_ecc_group().

◆ is_in_ffdhe_range()

bool Botan::TLS::Group_Params::is_in_ffdhe_range ( ) const
inlineconstexpr

Definition at line 185 of file tls_algos.h.

185 {
186 // See RFC 7919
187 return wire_code() >= 256 && wire_code() < 512;
188 }
constexpr uint16_t wire_code() const
Definition tls_algos.h:166

References wire_code().

◆ is_kem()

bool Botan::TLS::Group_Params::is_kem ( ) const
inlineconstexpr

Definition at line 242 of file tls_algos.h.

242 {
245
247
249 }
#define BOTAN_DIAGNOSTIC_POP
Definition api.h:128
#define BOTAN_DIAGNOSTIC_PUSH
Definition api.h:125
#define BOTAN_DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS
Definition api.h:126
constexpr bool is_pqc_hybrid() const
Definition tls_algos.h:240
constexpr bool is_pure_frodokem() const
Definition tls_algos.h:201
constexpr bool is_pure_ml_kem() const
Definition tls_algos.h:196

References BOTAN_DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS, BOTAN_DIAGNOSTIC_POP, BOTAN_DIAGNOSTIC_PUSH, is_pqc_hybrid(), is_pure_frodokem(), and is_pure_ml_kem().

Referenced by Botan::TLS::Callbacks::tls_kem_decapsulate(), and Botan::TLS::Callbacks::tls_kem_encapsulate().

◆ is_post_quantum()

bool Botan::TLS::Group_Params::is_post_quantum ( ) const
inlineconstexpr

◆ is_pqc_hybrid()

bool Botan::TLS::Group_Params::is_pqc_hybrid ( ) const
inlineconstexpr

Definition at line 240 of file tls_algos.h.

constexpr bool is_pqc_hybrid_frodokem() const
Definition tls_algos.h:227
constexpr bool is_pqc_hybrid_ml_kem() const
Definition tls_algos.h:221

References is_pqc_hybrid_frodokem(), and is_pqc_hybrid_ml_kem().

Referenced by is_kem(), is_post_quantum(), and Botan::TLS::Callbacks::tls_kem_generate_key().

◆ is_pqc_hybrid_frodokem()

bool Botan::TLS::Group_Params::is_pqc_hybrid_frodokem ( ) const
inlineconstexpr

Definition at line 227 of file tls_algos.h.

227 {
238 }

References Botan::TLS::HYBRID_SECP256R1_eFRODOKEM_640_AES_OQS, Botan::TLS::HYBRID_SECP256R1_eFRODOKEM_640_SHAKE_OQS, Botan::TLS::HYBRID_SECP384R1_eFRODOKEM_976_AES_OQS, Botan::TLS::HYBRID_SECP384R1_eFRODOKEM_976_SHAKE_OQS, Botan::TLS::HYBRID_SECP521R1_eFRODOKEM_1344_AES_OQS, Botan::TLS::HYBRID_SECP521R1_eFRODOKEM_1344_SHAKE_OQS, Botan::TLS::HYBRID_X25519_eFRODOKEM_640_AES_OQS, Botan::TLS::HYBRID_X25519_eFRODOKEM_640_SHAKE_OQS, Botan::TLS::HYBRID_X448_eFRODOKEM_976_AES_OQS, and Botan::TLS::HYBRID_X448_eFRODOKEM_976_SHAKE_OQS.

Referenced by is_pqc_hybrid().

◆ is_pqc_hybrid_ml_kem()

bool Botan::TLS::Group_Params::is_pqc_hybrid_ml_kem ( ) const
inlineconstexpr

◆ is_pure_ecc_group()

bool Botan::TLS::Group_Params::is_pure_ecc_group ( ) const
inlineconstexpr

Definition at line 210 of file tls_algos.h.

210{ return is_x25519() || is_x448() || is_ecdh_named_curve(); }
constexpr bool is_ecdh_named_curve() const
Definition tls_algos.h:177
constexpr bool is_x448() const
Definition tls_algos.h:175
constexpr bool is_x25519() const
Definition tls_algos.h:173

References is_ecdh_named_curve(), is_x25519(), and is_x448().

◆ is_pure_frodokem()

◆ is_pure_ml_kem()

bool Botan::TLS::Group_Params::is_pure_ml_kem ( ) const
inlineconstexpr

◆ is_x25519()

bool Botan::TLS::Group_Params::is_x25519 ( ) const
inlineconstexpr

◆ is_x448()

bool Botan::TLS::Group_Params::is_x448 ( ) const
inlineconstexpr

◆ operator<()

bool Botan::TLS::Group_Params::operator< ( Group_Params other) const
inlineconstexpr

Definition at line 162 of file tls_algos.h.

162{ return m_code < other.m_code; }

References Group_Params().

◆ operator==() [1/2]

bool Botan::TLS::Group_Params::operator== ( Group_Params other) const
inlineconstexpr

Definition at line 160 of file tls_algos.h.

160{ return m_code == other.m_code; }

References Group_Params().

◆ operator==() [2/2]

bool Botan::TLS::Group_Params::operator== ( Group_Params_Code code) const
inlineconstexpr

Definition at line 158 of file tls_algos.h.

158{ return m_code == code; }

References code().

◆ pqc_hybrid_ecc()

std::optional< Group_Params_Code > Botan::TLS::Group_Params::pqc_hybrid_ecc ( ) const

Definition at line 244 of file tls_algos.cpp.

References Botan::TLS::HYBRID_SECP256R1_eFRODOKEM_640_AES_OQS, Botan::TLS::HYBRID_SECP256R1_eFRODOKEM_640_SHAKE_OQS, Botan::TLS::HYBRID_SECP256R1_ML_KEM_768, Botan::TLS::HYBRID_SECP384R1_eFRODOKEM_976_AES_OQS, Botan::TLS::HYBRID_SECP384R1_eFRODOKEM_976_SHAKE_OQS, Botan::TLS::HYBRID_SECP384R1_ML_KEM_1024, Botan::TLS::HYBRID_SECP521R1_eFRODOKEM_1344_AES_OQS, Botan::TLS::HYBRID_SECP521R1_eFRODOKEM_1344_SHAKE_OQS, Botan::TLS::HYBRID_X25519_eFRODOKEM_640_AES_OQS, Botan::TLS::HYBRID_X25519_eFRODOKEM_640_SHAKE_OQS, Botan::TLS::HYBRID_X25519_ML_KEM_768, Botan::TLS::HYBRID_X448_eFRODOKEM_976_AES_OQS, Botan::TLS::HYBRID_X448_eFRODOKEM_976_SHAKE_OQS, Botan::TLS::SECP256R1, Botan::TLS::SECP384R1, Botan::TLS::SECP521R1, Botan::TLS::X25519, and Botan::TLS::X448.

◆ to_algorithm_spec()

std::optional< std::string > Botan::TLS::Group_Params::to_algorithm_spec ( ) const

Definition at line 491 of file tls_algos.cpp.

491 {
492 switch(m_code) {
493 // Brainpool curves have two sets of code points. See RFCs 7027 and 8734.
494 case Group_Params::BRAINPOOL256R1:
495 case Group_Params::BRAINPOOL256R1TLS13:
496 return "brainpool256r1";
497 case Group_Params::BRAINPOOL384R1:
498 case Group_Params::BRAINPOOL384R1TLS13:
499 return "brainpool384r1";
500 case Group_Params::BRAINPOOL512R1:
501 case Group_Params::BRAINPOOL512R1TLS13:
502 return "brainpool512r1";
503
504 default:
505 return to_string();
506 }
507}

References to_string().

Referenced by Botan::TLS::Callbacks::tls_kem_generate_key().

◆ to_string()

std::optional< std::string > Botan::TLS::Group_Params::to_string ( ) const

Definition at line 402 of file tls_algos.cpp.

402 {
403 switch(m_code) {
404 case Group_Params::SECP256R1:
405 return "secp256r1";
406 case Group_Params::SECP384R1:
407 return "secp384r1";
408 case Group_Params::SECP521R1:
409 return "secp521r1";
410 case Group_Params::BRAINPOOL256R1:
411 return "brainpool256r1";
412 case Group_Params::BRAINPOOL384R1:
413 return "brainpool384r1";
414 case Group_Params::BRAINPOOL512R1:
415 return "brainpool512r1";
416 case Group_Params::X25519:
417 return "x25519";
418 case Group_Params::X448:
419 return "x448";
420 case Group_Params::BRAINPOOL256R1TLS13:
421 return "brainpool256r1tls13";
422 case Group_Params::BRAINPOOL384R1TLS13:
423 return "brainpool384r1tls13";
424 case Group_Params::BRAINPOOL512R1TLS13:
425 return "brainpool512r1tls13";
426
427 case Group_Params::FFDHE_2048:
428 return "ffdhe/ietf/2048";
429 case Group_Params::FFDHE_3072:
430 return "ffdhe/ietf/3072";
431 case Group_Params::FFDHE_4096:
432 return "ffdhe/ietf/4096";
433 case Group_Params::FFDHE_6144:
434 return "ffdhe/ietf/6144";
435 case Group_Params::FFDHE_8192:
436 return "ffdhe/ietf/8192";
437
438 case Group_Params::ML_KEM_512:
439 return "ML-KEM-512";
440 case Group_Params::ML_KEM_768:
441 return "ML-KEM-768";
442 case Group_Params::ML_KEM_1024:
443 return "ML-KEM-1024";
444
445 case Group_Params::eFRODOKEM_640_SHAKE_OQS:
446 return "eFrodoKEM-640-SHAKE";
447 case Group_Params::eFRODOKEM_976_SHAKE_OQS:
448 return "eFrodoKEM-976-SHAKE";
449 case Group_Params::eFRODOKEM_1344_SHAKE_OQS:
450 return "eFrodoKEM-1344-SHAKE";
451 case Group_Params::eFRODOKEM_640_AES_OQS:
452 return "eFrodoKEM-640-AES";
453 case Group_Params::eFRODOKEM_976_AES_OQS:
454 return "eFrodoKEM-976-AES";
455 case Group_Params::eFRODOKEM_1344_AES_OQS:
456 return "eFrodoKEM-1344-AES";
457
458 case Group_Params::HYBRID_X25519_eFRODOKEM_640_SHAKE_OQS:
459 return "x25519/eFrodoKEM-640-SHAKE";
460 case Group_Params::HYBRID_X25519_eFRODOKEM_640_AES_OQS:
461 return "x25519/eFrodoKEM-640-AES";
462 case Group_Params::HYBRID_X448_eFRODOKEM_976_SHAKE_OQS:
463 return "x448/eFrodoKEM-976-SHAKE";
464 case Group_Params::HYBRID_X448_eFRODOKEM_976_AES_OQS:
465 return "x448/eFrodoKEM-976-AES";
466 case Group_Params::HYBRID_SECP256R1_eFRODOKEM_640_SHAKE_OQS:
467 return "secp256r1/eFrodoKEM-640-SHAKE";
468 case Group_Params::HYBRID_SECP256R1_eFRODOKEM_640_AES_OQS:
469 return "secp256r1/eFrodoKEM-640-AES";
470 case Group_Params::HYBRID_SECP384R1_eFRODOKEM_976_SHAKE_OQS:
471 return "secp384r1/eFrodoKEM-976-SHAKE";
472 case Group_Params::HYBRID_SECP384R1_eFRODOKEM_976_AES_OQS:
473 return "secp384r1/eFrodoKEM-976-AES";
474 case Group_Params::HYBRID_SECP521R1_eFRODOKEM_1344_SHAKE_OQS:
475 return "secp521r1/eFrodoKEM-1344-SHAKE";
476 case Group_Params::HYBRID_SECP521R1_eFRODOKEM_1344_AES_OQS:
477 return "secp521r1/eFrodoKEM-1344-AES";
478
479 case Group_Params::HYBRID_X25519_ML_KEM_768:
480 return "x25519/ML-KEM-768";
481 case Group_Params::HYBRID_SECP256R1_ML_KEM_768:
482 return "secp256r1/ML-KEM-768";
483 case Group_Params::HYBRID_SECP384R1_ML_KEM_1024:
484 return "secp384r1/ML-KEM-1024";
485
486 default:
487 return std::nullopt;
488 }
489}

Referenced by is_available(), and to_algorithm_spec().

◆ wire_code()

uint16_t Botan::TLS::Group_Params::wire_code ( ) const
inlineconstexpr

Definition at line 166 of file tls_algos.h.

166{ return static_cast<uint16_t>(m_code); }

Referenced by is_in_ffdhe_range(), and Botan::TLS::Server_Key_Exchange::Server_Key_Exchange().


The documentation for this class was generated from the following files: