blob: 9298c8b68457e85a55239707683edf23e9b7ec63 [file] [log] [blame]
Austin Schuh64fab802020-09-09 22:47:47 -07001#include "aos/events/logging/uuid.h"
2
3#include <array>
4#include <random>
5#include <string_view>
6
7namespace aos {
8namespace {
9char ToHex(int val) {
10 if (val < 10) {
11 return val + '0';
12 } else {
13 return val - 10 + 'a';
14 }
15}
16} // namespace
17
18UUID UUID::Random() {
19 std::random_device rd;
20 std::mt19937 gen(rd());
21
22 std::uniform_int_distribution<> dis(0, 15);
23 std::uniform_int_distribution<> dis2(8, 11);
24
25 UUID result;
26
27 // UUID4 is implemented per https://www.cryptosys.net/pki/uuid-rfc4122.html
28 int i;
29 for (i = 0; i < 8; i++) {
30 result.data_[i] = ToHex(dis(gen));
31 }
32 result.data_[i] = '-';
33 ++i;
34 for (; i < 13; i++) {
35 result.data_[i] = ToHex(dis(gen));
36 }
37 result.data_[i] = '-';
38 ++i;
39 result.data_[i] = '4';
40 ++i;
41 for (; i < 18; i++) {
42 result.data_[i] = ToHex(dis(gen));
43 }
44 result.data_[i] = '-';
45 ++i;
46 result.data_[i] = ToHex(dis2(gen));
47 ++i;
48 for (; i < 23; i++) {
49 result.data_[i] = ToHex(dis(gen));
50 }
51 result.data_[i] = '-';
52 ++i;
53 for (; i < 36; i++) {
54 result.data_[i] = ToHex(dis(gen));
55 }
56
57 return result;
58}
59
60} // namespace aos