blob: 07b588329da14739df16f897ba25a52b178bd68d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
/*
* OctetString
* (C) 1999-2007 Jack Lloyd
*
* Distributed under the terms of the Botan license
*/
#ifndef BOTAN_SYMKEY_H__
#define BOTAN_SYMKEY_H__
#include <botan/secmem.h>
#include <string>
namespace Botan {
/**
* Octet String
*/
class BOTAN_DLL OctetString
{
public:
/**
* @return size of this octet string in bytes
*/
u32bit length() const { return bits.size(); }
/**
* @return this object as a SecureVector<byte>
*/
SecureVector<byte> bits_of() const { return bits; }
/**
* @return start of this string
*/
const byte* begin() const { return bits.begin(); }
/**
* @return end of this string
*/
const byte* end() const { return bits.end(); }
/**
* @return this encoded as hex
*/
std::string as_string() const;
/**
* XOR the contents of another octet string into this one
* @param other octet string
* @return reference to this
*/
OctetString& operator^=(const OctetString& other);
/**
* Force to have odd parity
*/
void set_odd_parity();
/**
* Change the contents of this octet string
* @param hex_string a hex encoded bytestring
*/
void change(const std::string& hex_string);
/**
* Change the contents of this octet string
* @param in the input
* @param length of in in bytes
*/
void change(const byte in[], u32bit length);
/**
* Change the contents of this octet string
* @param in the input
*/
void change(const MemoryRegion<byte>& in) { bits = in; }
/**
* Create a new random OctetString
* @param rng is a random number generator
* @param len is the desired length in bytes
*/
OctetString(class RandomNumberGenerator& rng, u32bit len);
/**
* Create a new OctetString
* @param str is a hex encoded string
*/
OctetString(const std::string& str = "") { change(str); }
/**
* Create a new OctetString
* @param in is an array
* @param len is the length of in in bytes
*/
OctetString(const byte in[], u32bit len) { change(in, len); }
/**
* Create a new OctetString
* @param in a bytestring
*/
OctetString(const MemoryRegion<byte>& in) { change(in); }
private:
SecureVector<byte> bits;
};
/**
* Compare two strings
* @param x an octet string
* @param y an octet string
* @return if x is equal to y
*/
BOTAN_DLL bool operator==(const OctetString& x,
const OctetString& y);
/**
* Compare two strings
* @param x an octet string
* @param y an octet string
* @return if x is not equal to y
*/
BOTAN_DLL bool operator!=(const OctetString& x,
const OctetString& y);
/**
* Concatenate two strings
* @param x an octet string
* @param y an octet string
* @return x concatenated with y
*/
BOTAN_DLL OctetString operator+(const OctetString& x,
const OctetString& y);
/**
* XOR two strings
* @param x an octet string
* @param y an octet string
* @return x XORed with y
*/
BOTAN_DLL OctetString operator^(const OctetString& x,
const OctetString& y);
/**
* Alternate name for octet string showing intent to use as a key
*/
typedef OctetString SymmetricKey;
/**
* Alternate name for octet string showing intent to use as an IV
*/
typedef OctetString InitializationVector;
}
#endif
|