/src/botan/build/include/public/botan/frodo_mode.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * FrodoKEM modes and constants |
3 | | * |
4 | | * The Fellowship of the FrodoKEM: |
5 | | * (C) 2023 Jack Lloyd |
6 | | * 2023 René Meusel, Amos Treiber - Rohde & Schwarz Cybersecurity |
7 | | * |
8 | | * Botan is released under the Simplified BSD License (see license.txt) |
9 | | */ |
10 | | |
11 | | #ifndef BOTAN_FRODOKEM_MODE_H_ |
12 | | #define BOTAN_FRODOKEM_MODE_H_ |
13 | | |
14 | | #include <botan/asn1_obj.h> |
15 | | |
16 | | #include <vector> |
17 | | |
18 | | namespace Botan { |
19 | | |
20 | | class BOTAN_PUBLIC_API(3, 3) FrodoKEMMode { |
21 | | public: |
22 | | enum Mode { |
23 | | FrodoKEM640_SHAKE, |
24 | | FrodoKEM976_SHAKE, |
25 | | FrodoKEM1344_SHAKE, |
26 | | eFrodoKEM640_SHAKE, |
27 | | eFrodoKEM976_SHAKE, |
28 | | eFrodoKEM1344_SHAKE, |
29 | | FrodoKEM640_AES, |
30 | | FrodoKEM976_AES, |
31 | | FrodoKEM1344_AES, |
32 | | eFrodoKEM640_AES, |
33 | | eFrodoKEM976_AES, |
34 | | eFrodoKEM1344_AES |
35 | | }; |
36 | | |
37 | | FrodoKEMMode(Mode mode); |
38 | | explicit FrodoKEMMode(const OID& oid); |
39 | | explicit FrodoKEMMode(std::string_view str); |
40 | | |
41 | | OID object_identifier() const; |
42 | | std::string to_string() const; |
43 | | |
44 | 0 | Mode mode() const { return m_mode; } |
45 | | |
46 | 0 | bool is_ephemeral() const { |
47 | 0 | return m_mode == eFrodoKEM640_SHAKE || m_mode == eFrodoKEM976_SHAKE || m_mode == eFrodoKEM1344_SHAKE || |
48 | 0 | m_mode == eFrodoKEM640_AES || m_mode == eFrodoKEM976_AES || m_mode == eFrodoKEM1344_AES; |
49 | 0 | } |
50 | | |
51 | 0 | bool is_static() const { |
52 | 0 | return m_mode == FrodoKEM640_SHAKE || m_mode == FrodoKEM976_SHAKE || m_mode == FrodoKEM1344_SHAKE || |
53 | 0 | m_mode == FrodoKEM640_AES || m_mode == FrodoKEM976_AES || m_mode == FrodoKEM1344_AES; |
54 | 0 | } |
55 | | |
56 | 0 | bool is_shake() const { |
57 | 0 | return m_mode == eFrodoKEM640_SHAKE || m_mode == eFrodoKEM976_SHAKE || m_mode == eFrodoKEM1344_SHAKE || |
58 | 0 | m_mode == FrodoKEM640_SHAKE || m_mode == FrodoKEM976_SHAKE || m_mode == FrodoKEM1344_SHAKE; |
59 | 0 | } |
60 | | |
61 | 0 | bool is_aes() const { |
62 | 0 | return m_mode == eFrodoKEM640_AES || m_mode == eFrodoKEM976_AES || m_mode == eFrodoKEM1344_AES || |
63 | 0 | m_mode == FrodoKEM640_AES || m_mode == FrodoKEM976_AES || m_mode == FrodoKEM1344_AES; |
64 | 0 | } |
65 | | |
66 | 0 | bool is_available() const { |
67 | 0 | return |
68 | 0 | #if defined(BOTAN_HAS_FRODOKEM_AES) |
69 | 0 | is_aes() || |
70 | 0 | #endif |
71 | |
|
72 | 0 | #if defined(BOTAN_HAS_FRODOKEM_SHAKE) |
73 | 0 | is_shake() || |
74 | 0 | #endif |
75 | |
|
76 | 0 | false; |
77 | 0 | } |
78 | | |
79 | 0 | bool operator==(const FrodoKEMMode& other) const { return m_mode == other.m_mode; } |
80 | | |
81 | 0 | bool operator!=(const FrodoKEMMode& other) const { return !(*this == other); } |
82 | | |
83 | | private: |
84 | | Mode m_mode; |
85 | | }; |
86 | | |
87 | | } // namespace Botan |
88 | | |
89 | | #endif |