Leosac
0.8.0
Open Source Access Control
Random.cpp
Go to the documentation of this file.
1
/*
2
Copyright (C) 2014-2016 Leosac
3
4
This file is part of Leosac.
5
6
Leosac is free software: you can redistribute it and/or modify
7
it under the terms of the GNU Affero General Public License as published by
8
the Free Software Foundation, either version 3 of the License, or
9
(at your option) any later version.
10
11
Leosac is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU Affero General Public License for more details.
15
16
You should have received a copy of the GNU Affero General Public License
17
along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#include "
tools/scrypt/Random.hpp
"
21
#include <cassert>
22
#include <cstddef>
23
#include <openssl/rand.h>
24
#include <sstream>
25
#include <vector>
26
27
std::mutex
Random::mutex_
;
28
29
ByteVector
Random::GetBytes
(
size_t
n)
30
{
31
if
(n == 0)
32
return
{};
33
std::lock_guard<std::mutex> ul(
mutex_
);
34
ByteVector
ret(n);
35
36
int
rc = RAND_bytes(&ret[0], n);
37
assert(rc == 1);
38
return
ret;
39
}
40
41
std::string
Random::GetASCII
(
size_t
n)
42
{
43
if
(n == 0)
44
return
""
;
45
46
std::stringstream ss;
47
auto
bytes =
GetBytes
(n);
48
size_t
idx = 0;
49
for
(
size_t
i = 0; i < n; ++i)
50
{
51
if
(idx == bytes.size())
52
{
53
bytes =
GetBytes
(n);
54
idx = 0;
55
}
56
if
(isalnum(bytes[idx]))
57
{
58
ss << bytes[idx];
59
}
60
idx++;
61
}
62
assert(ss.str().size() == n);
63
return
ss.str();
64
}
Random::mutex_
static std::mutex mutex_
OpenSSL's random number generation is not thread-safe.
Definition:
Random.hpp:48
ByteVector
std::vector< uint8_t > ByteVector
Definition:
Random.hpp:26
Random.hpp
Random::GetBytes
static ByteVector GetBytes(size_t n)
Generate n random bytes.
Definition:
Random.cpp:29
Random::GetASCII
static std::string GetASCII(size_t n)
Return a random ASCII string.
Definition:
Random.cpp:41
src
tools
scrypt
Random.cpp
Generated on Tue Mar 22 2022 10:48:32 for Leosac by
1.8.17