/usr/include/botan-2/botan/uuid.h is in libbotan-2-dev 2.4.0-5ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | /*
* UUID type
* (C) 2015 Jack Lloyd
*
* Botan is released under the Simplified BSD License (see license.txt)
*/
#ifndef BOTAN_UUID_H_
#define BOTAN_UUID_H_
#include <botan/secmem.h>
#include <botan/hex.h>
#include <sstream>
namespace Botan {
// TODO: move to util?
class UUID final
{
public:
// Represents an unassigned UUID object
UUID() : m_uuid(0) {}
UUID(RandomNumberGenerator& rng)
{
m_uuid.resize(16);
rng.randomize(m_uuid.data(), m_uuid.size());
// Mark as a random UUID (RFC 4122 sec 4.4)
m_uuid[6] = 0x40 | (m_uuid[6] & 0x0F);
// Set two reserved bits
m_uuid[8] = 0xC0 | (m_uuid[8] & 0x3F);
}
UUID(const std::vector<uint8_t>& blob)
{
if(blob.size() != 16)
{
throw Invalid_Argument("Bad UUID blob " + hex_encode(blob));
}
m_uuid = blob;
}
UUID(const std::string& uuid_str)
{
if(uuid_str.size() != 36 ||
uuid_str[8] != '-' ||
uuid_str[14] != '-' ||
uuid_str[19] != '-' ||
uuid_str[24] != '-')
{
throw Invalid_Argument("Bad UUID '" + uuid_str + "'");
}
std::string just_hex;
for(size_t i = 0; i != uuid_str.size(); ++i)
{
char c = uuid_str[i];
if(c == '-')
continue;
just_hex += c;
}
m_uuid = hex_decode(just_hex);
if(m_uuid.size() != 16)
{
throw Invalid_Argument("Bad UUID '" + uuid_str + "'");
}
}
std::string to_string() const
{
std::string h = hex_encode(m_uuid);
h.insert(8, "-");
h.insert(14, "-");
h.insert(19, "-");
h.insert(24, "-");
return h;
}
const std::vector<uint8_t>& binary_value() const { return m_uuid; }
bool operator==(const UUID& other) const
{
return m_uuid == other.m_uuid;
}
bool operator!=(const UUID& other) const { return !(*this == other); }
bool is_valid() const { return m_uuid.size() == 16; }
private:
std::vector<uint8_t> m_uuid;
};
}
#endif
|