Coverage Report

Created: 2024-06-28 06:39

/src/botan/build/include/public/botan/symkey.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
* OctetString
3
* (C) 1999-2007 Jack Lloyd
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7
8
#ifndef BOTAN_SYMKEY_H_
9
#define BOTAN_SYMKEY_H_
10
11
#include <botan/secmem.h>
12
#include <span>
13
#include <string>
14
15
namespace Botan {
16
17
class RandomNumberGenerator;
18
19
/**
20
* Octet String
21
*/
22
class BOTAN_PUBLIC_API(2, 0) OctetString final {
23
   public:
24
      /**
25
      * @return size of this octet string in bytes
26
      */
27
4.91k
      size_t length() const { return m_data.size(); }
28
29
0
      size_t size() const { return m_data.size(); }
30
31
0
      bool empty() const { return m_data.empty(); }
32
33
      /**
34
      * @return this object as a secure_vector<uint8_t>
35
      */
36
4.41k
      secure_vector<uint8_t> bits_of() const { return m_data; }
37
38
      /**
39
      * @return start of this string
40
      */
41
4.91k
      const uint8_t* begin() const { return m_data.data(); }
42
43
      /**
44
      * @return end of this string
45
      */
46
0
      const uint8_t* end() const { return begin() + m_data.size(); }
47
48
      /**
49
      * @return this encoded as hex
50
      */
51
      std::string to_string() const;
52
53
      /**
54
      * XOR the contents of another octet string into this one
55
      * @param other octet string
56
      * @return reference to this
57
      */
58
      OctetString& operator^=(const OctetString& other);
59
60
      /**
61
      * Force to have odd parity
62
      *
63
      * Deprecated. There is no reason to use this outside of interacting with
64
      * some very old or weird system which requires DES and also which do not
65
      * automatically ignore the parity bits.
66
      */
67
      BOTAN_DEPRECATED("Why would you need to do this") void set_odd_parity();
68
69
      /**
70
      * Create a new OctetString
71
      * @param str is a hex encoded string
72
      */
73
      explicit OctetString(std::string_view str = "");
74
75
      /**
76
      * Create a new random OctetString
77
      * @param rng is a random number generator
78
      * @param len is the desired length in bytes
79
      */
80
      OctetString(RandomNumberGenerator& rng, size_t len);
81
82
      /**
83
      * Create a new OctetString
84
      * @param in is an array
85
      * @param len is the length of in in bytes
86
      */
87
      OctetString(const uint8_t in[], size_t len);
88
89
      /**
90
      * Create a new OctetString
91
      * @param in a bytestring
92
      */
93
0
      explicit OctetString(std::span<const uint8_t> in) : m_data(in.begin(), in.end()) {}
94
95
      /**
96
      * Create a new OctetString
97
      * @param in a bytestring
98
      */
99
60
      explicit OctetString(secure_vector<uint8_t> in) : m_data(std::move(in)) {}
100
101
   private:
102
      secure_vector<uint8_t> m_data;
103
};
104
105
/**
106
* Compare two strings
107
* @param x an octet string
108
* @param y an octet string
109
* @return if x is equal to y
110
*/
111
BOTAN_PUBLIC_API(2, 0) bool operator==(const OctetString& x, const OctetString& y);
112
113
/**
114
* Compare two strings
115
* @param x an octet string
116
* @param y an octet string
117
* @return if x is not equal to y
118
*/
119
BOTAN_PUBLIC_API(2, 0) bool operator!=(const OctetString& x, const OctetString& y);
120
121
/**
122
* Concatenate two strings
123
* @param x an octet string
124
* @param y an octet string
125
* @return x concatenated with y
126
*/
127
BOTAN_PUBLIC_API(2, 0) OctetString operator+(const OctetString& x, const OctetString& y);
128
129
/**
130
* XOR two strings
131
* @param x an octet string
132
* @param y an octet string
133
* @return x XORed with y
134
*/
135
BOTAN_PUBLIC_API(2, 0) OctetString operator^(const OctetString& x, const OctetString& y);
136
137
/**
138
* Alternate name for octet string showing intent to use as a key
139
*/
140
using SymmetricKey = OctetString;
141
142
/**
143
* Alternate name for octet string showing intent to use as an IV
144
*/
145
using InitializationVector = OctetString;
146
147
}  // namespace Botan
148
149
#endif