Coverage Report

Created: 2024-11-29 06:10

/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