Botan 3.9.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_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 140 of file tls_algos.h.

Constructor & Destructor Documentation

◆ Group_Params() [1/3]

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

Definition at line 144 of file tls_algos.h.

References Botan::TLS::NONE.

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

◆ Group_Params() [2/3]

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

Definition at line 147 of file tls_algos.h.

147: m_code(code) {}
constexpr Group_Params_Code code() const
Definition tls_algos.h:163

References code().

◆ Group_Params() [3/3]

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

Definition at line 150 of file tls_algos.h.

150: 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 163 of file tls_algos.h.

163{ 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 208 of file tls_algos.cpp.

208 {
209 if(group_name == "secp256r1") {
210 return Group_Params::SECP256R1;
211 }
212 if(group_name == "secp384r1") {
213 return Group_Params::SECP384R1;
214 }
215 if(group_name == "secp521r1") {
216 return Group_Params::SECP521R1;
217 }
218 if(group_name == "brainpool256r1") {
219 return Group_Params::BRAINPOOL256R1;
220 }
221 if(group_name == "brainpool384r1") {
222 return Group_Params::BRAINPOOL384R1;
223 }
224 if(group_name == "brainpool512r1") {
225 return Group_Params::BRAINPOOL512R1;
226 }
227 if(group_name == "x25519") {
228 return Group_Params::X25519;
229 }
230 if(group_name == "x448") {
231 return Group_Params::X448;
232 }
233
234 if(group_name == "ffdhe/ietf/2048") {
235 return Group_Params::FFDHE_2048;
236 }
237 if(group_name == "ffdhe/ietf/3072") {
238 return Group_Params::FFDHE_3072;
239 }
240 if(group_name == "ffdhe/ietf/4096") {
241 return Group_Params::FFDHE_4096;
242 }
243 if(group_name == "ffdhe/ietf/6144") {
244 return Group_Params::FFDHE_6144;
245 }
246 if(group_name == "ffdhe/ietf/8192") {
247 return Group_Params::FFDHE_8192;
248 }
249
250 if(group_name == "ML-KEM-512") {
251 return Group_Params::ML_KEM_512;
252 }
253 if(group_name == "ML-KEM-768") {
254 return Group_Params::ML_KEM_768;
255 }
256 if(group_name == "ML-KEM-1024") {
257 return Group_Params::ML_KEM_1024;
258 }
259
260 if(group_name == "eFrodoKEM-640-SHAKE") {
261 return Group_Params::eFRODOKEM_640_SHAKE_OQS;
262 }
263 if(group_name == "eFrodoKEM-976-SHAKE") {
264 return Group_Params::eFRODOKEM_976_SHAKE_OQS;
265 }
266 if(group_name == "eFrodoKEM-1344-SHAKE") {
267 return Group_Params::eFRODOKEM_1344_SHAKE_OQS;
268 }
269 if(group_name == "eFrodoKEM-640-AES") {
270 return Group_Params::eFRODOKEM_640_AES_OQS;
271 }
272 if(group_name == "eFrodoKEM-976-AES") {
273 return Group_Params::eFRODOKEM_976_AES_OQS;
274 }
275 if(group_name == "eFrodoKEM-1344-AES") {
276 return Group_Params::eFRODOKEM_1344_AES_OQS;
277 }
278
279 if(group_name == "x25519/ML-KEM-768") {
280 return Group_Params::HYBRID_X25519_ML_KEM_768;
281 }
282 if(group_name == "secp256r1/ML-KEM-768") {
283 return Group_Params::HYBRID_SECP256R1_ML_KEM_768;
284 }
285 if(group_name == "secp384r1/ML-KEM-1024") {
286 return Group_Params::HYBRID_SECP384R1_ML_KEM_1024;
287 }
288
289 if(group_name == "x25519/eFrodoKEM-640-SHAKE") {
290 return Group_Params::HYBRID_X25519_eFRODOKEM_640_SHAKE_OQS;
291 }
292 if(group_name == "x25519/eFrodoKEM-640-AES") {
293 return Group_Params::HYBRID_X25519_eFRODOKEM_640_AES_OQS;
294 }
295 if(group_name == "x448/eFrodoKEM-976-SHAKE") {
296 return Group_Params::HYBRID_X448_eFRODOKEM_976_SHAKE_OQS;
297 }
298 if(group_name == "x448/eFrodoKEM-976-AES") {
299 return Group_Params::HYBRID_X448_eFRODOKEM_976_AES_OQS;
300 }
301
302 if(group_name == "secp256r1/eFrodoKEM-640-SHAKE") {
303 return Group_Params::HYBRID_SECP256R1_eFRODOKEM_640_SHAKE_OQS;
304 }
305 if(group_name == "secp256r1/eFrodoKEM-640-AES") {
306 return Group_Params::HYBRID_SECP256R1_eFRODOKEM_640_AES_OQS;
307 }
308
309 if(group_name == "secp384r1/eFrodoKEM-976-SHAKE") {
310 return Group_Params::HYBRID_SECP384R1_eFRODOKEM_976_SHAKE_OQS;
311 }
312 if(group_name == "secp384r1/eFrodoKEM-976-AES") {
313 return Group_Params::HYBRID_SECP384R1_eFRODOKEM_976_AES_OQS;
314 }
315
316 if(group_name == "secp521r1/eFrodoKEM-1344-SHAKE") {
317 return Group_Params::HYBRID_SECP521R1_eFRODOKEM_1344_SHAKE_OQS;
318 }
319 if(group_name == "secp521r1/eFrodoKEM-1344-AES") {
320 return Group_Params::HYBRID_SECP521R1_eFRODOKEM_1344_AES_OQS;
321 }
322
323 return std::nullopt;
324}

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 137 of file tls_algos.cpp.

137 {
138#if !defined(BOTAN_HAS_X25519)
139 if(is_x25519()) {
140 return false;
141 }
143 return false;
144 }
145#endif
146
147#if !defined(BOTAN_HAS_X448)
148 if(is_x448()) {
149 return false;
150 }
152 return false;
153 }
154#endif
155
156#if !defined(BOTAN_HAS_DIFFIE_HELLMAN)
157 if(is_in_ffdhe_range()) {
158 return false;
159 }
160#endif
161
162#if !defined(BOTAN_HAS_ML_KEM)
164 return false;
165 }
166#endif
167
168#if !defined(BOTAN_HAS_FRODOKEM)
170 return false;
171 }
172#endif
173
174 return true;
175}
constexpr bool is_in_ffdhe_range() const
Definition tls_algos.h:182
constexpr bool is_pqc_hybrid() const
Definition tls_algos.h:237
constexpr bool is_pure_frodokem() const
Definition tls_algos.h:198
std::optional< Group_Params_Code > pqc_hybrid_ecc() const
constexpr bool is_pqc_hybrid_frodokem() const
Definition tls_algos.h:224
constexpr bool is_pure_ml_kem() const
Definition tls_algos.h:193
constexpr bool is_pqc_hybrid_ml_kem() const
Definition tls_algos.h:218
constexpr bool is_x448() const
Definition tls_algos.h:174
constexpr bool is_x25519() const
Definition tls_algos.h:172

References is_in_ffdhe_range(), is_pqc_hybrid(), is_pqc_hybrid_frodokem(), is_pqc_hybrid_ml_kem(), is_pure_frodokem(), is_pure_ml_kem(), is_x25519(), is_x448(), pqc_hybrid_ecc(), Botan::TLS::X25519, and Botan::TLS::X448.

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

◆ is_dh_named_group()

◆ is_ecdh_named_curve()

◆ is_in_ffdhe_range()

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

Definition at line 182 of file tls_algos.h.

182 {
183 // See RFC 7919
184 return wire_code() >= 256 && wire_code() < 512;
185 }
constexpr uint16_t wire_code() const
Definition tls_algos.h:165

References wire_code().

Referenced by is_available().

◆ is_kem()

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

◆ 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

◆ is_pqc_hybrid_frodokem()

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

Definition at line 224 of file tls_algos.h.

224 {
235 }

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_available(), and 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 207 of file tls_algos.h.

207{ return is_x25519() || is_x448() || is_ecdh_named_curve(); }
constexpr bool is_ecdh_named_curve() const
Definition tls_algos.h:176

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

Definition at line 174 of file tls_algos.h.

174{ return m_code == Group_Params_Code::X448; }

References Botan::TLS::X448.

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

◆ operator<()

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

Definition at line 161 of file tls_algos.h.

161{ 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 159 of file tls_algos.h.

159{ 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 157 of file tls_algos.h.

157{ 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 177 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.

Referenced by is_available().

◆ to_string()

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

Definition at line 326 of file tls_algos.cpp.

326 {
327 switch(m_code) {
328 case Group_Params::SECP256R1:
329 return "secp256r1";
330 case Group_Params::SECP384R1:
331 return "secp384r1";
332 case Group_Params::SECP521R1:
333 return "secp521r1";
334 case Group_Params::BRAINPOOL256R1:
335 return "brainpool256r1";
336 case Group_Params::BRAINPOOL384R1:
337 return "brainpool384r1";
338 case Group_Params::BRAINPOOL512R1:
339 return "brainpool512r1";
340 case Group_Params::X25519:
341 return "x25519";
342 case Group_Params::X448:
343 return "x448";
344
345 case Group_Params::FFDHE_2048:
346 return "ffdhe/ietf/2048";
347 case Group_Params::FFDHE_3072:
348 return "ffdhe/ietf/3072";
349 case Group_Params::FFDHE_4096:
350 return "ffdhe/ietf/4096";
351 case Group_Params::FFDHE_6144:
352 return "ffdhe/ietf/6144";
353 case Group_Params::FFDHE_8192:
354 return "ffdhe/ietf/8192";
355
356 case Group_Params::ML_KEM_512:
357 return "ML-KEM-512";
358 case Group_Params::ML_KEM_768:
359 return "ML-KEM-768";
360 case Group_Params::ML_KEM_1024:
361 return "ML-KEM-1024";
362
363 case Group_Params::eFRODOKEM_640_SHAKE_OQS:
364 return "eFrodoKEM-640-SHAKE";
365 case Group_Params::eFRODOKEM_976_SHAKE_OQS:
366 return "eFrodoKEM-976-SHAKE";
367 case Group_Params::eFRODOKEM_1344_SHAKE_OQS:
368 return "eFrodoKEM-1344-SHAKE";
369 case Group_Params::eFRODOKEM_640_AES_OQS:
370 return "eFrodoKEM-640-AES";
371 case Group_Params::eFRODOKEM_976_AES_OQS:
372 return "eFrodoKEM-976-AES";
373 case Group_Params::eFRODOKEM_1344_AES_OQS:
374 return "eFrodoKEM-1344-AES";
375
376 case Group_Params::HYBRID_X25519_eFRODOKEM_640_SHAKE_OQS:
377 return "x25519/eFrodoKEM-640-SHAKE";
378 case Group_Params::HYBRID_X25519_eFRODOKEM_640_AES_OQS:
379 return "x25519/eFrodoKEM-640-AES";
380 case Group_Params::HYBRID_X448_eFRODOKEM_976_SHAKE_OQS:
381 return "x448/eFrodoKEM-976-SHAKE";
382 case Group_Params::HYBRID_X448_eFRODOKEM_976_AES_OQS:
383 return "x448/eFrodoKEM-976-AES";
384 case Group_Params::HYBRID_SECP256R1_eFRODOKEM_640_SHAKE_OQS:
385 return "secp256r1/eFrodoKEM-640-SHAKE";
386 case Group_Params::HYBRID_SECP256R1_eFRODOKEM_640_AES_OQS:
387 return "secp256r1/eFrodoKEM-640-AES";
388 case Group_Params::HYBRID_SECP384R1_eFRODOKEM_976_SHAKE_OQS:
389 return "secp384r1/eFrodoKEM-976-SHAKE";
390 case Group_Params::HYBRID_SECP384R1_eFRODOKEM_976_AES_OQS:
391 return "secp384r1/eFrodoKEM-976-AES";
392 case Group_Params::HYBRID_SECP521R1_eFRODOKEM_1344_SHAKE_OQS:
393 return "secp521r1/eFrodoKEM-1344-SHAKE";
394 case Group_Params::HYBRID_SECP521R1_eFRODOKEM_1344_AES_OQS:
395 return "secp521r1/eFrodoKEM-1344-AES";
396
397 case Group_Params::HYBRID_X25519_ML_KEM_768:
398 return "x25519/ML-KEM-768";
399 case Group_Params::HYBRID_SECP256R1_ML_KEM_768:
400 return "secp256r1/ML-KEM-768";
401 case Group_Params::HYBRID_SECP384R1_ML_KEM_1024:
402 return "secp384r1/ML-KEM-1024";
403
404 default:
405 return std::nullopt;
406 }
407}

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

◆ wire_code()

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

Definition at line 165 of file tls_algos.h.

165{ 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: