aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-05-14 22:08:10 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-05-15 00:05:59 +0100
commitd539be33590f7dfb0013187502744286f2959ee3 (patch)
tree8964a9107f7171cdbc0f490e581d92918462ed65
parentMerge pull request #826 (diff)
downloadmonero-d539be33590f7dfb0013187502744286f2959ee3.tar.xz
crypto: make clear generate_random_bytes is not thread safe
And add a thread safe version to encourage proper use
-rw-r--r--src/crypto/crypto.cpp2
-rw-r--r--src/crypto/crypto.h9
-rw-r--r--src/crypto/random.c2
-rw-r--r--src/crypto/random.h2
4 files changed, 11 insertions, 4 deletions
diff --git a/src/crypto/crypto.cpp b/src/crypto/crypto.cpp
index e47aab0f7..e251d0ec2 100644
--- a/src/crypto/crypto.cpp
+++ b/src/crypto/crypto.cpp
@@ -83,7 +83,7 @@ namespace crypto {
/* generate a random 32-byte (256-bit) integer and copy it to res */
static inline void random_scalar(ec_scalar &res) {
unsigned char tmp[64];
- generate_random_bytes(64, tmp);
+ generate_random_bytes_not_thread_safe(64, tmp);
sc_reduce(tmp);
memcpy(&res, tmp, 32);
}
diff --git a/src/crypto/crypto.h b/src/crypto/crypto.h
index 883aa521a..fa55c2aab 100644
--- a/src/crypto/crypto.h
+++ b/src/crypto/crypto.h
@@ -117,13 +117,20 @@ namespace crypto {
const public_key *const *, std::size_t, const signature *);
};
+ /* Generate N random bytes
+ */
+ inline void rand(size_t N, uint8_t *bytes) {
+ boost::lock_guard<boost::mutex> lock(random_lock);
+ generate_random_bytes_not_thread_safe(N, bytes);
+ }
+
/* Generate a value filled with random bytes.
*/
template<typename T>
typename std::enable_if<std::is_pod<T>::value, T>::type rand() {
typename std::remove_cv<T>::type res;
boost::lock_guard<boost::mutex> lock(random_lock);
- generate_random_bytes(sizeof(T), &res);
+ generate_random_bytes_not_thread_safe(sizeof(T), &res);
return res;
}
diff --git a/src/crypto/random.c b/src/crypto/random.c
index f8a50d850..6a9f63c12 100644
--- a/src/crypto/random.c
+++ b/src/crypto/random.c
@@ -113,7 +113,7 @@ INITIALIZER(init_random) {
#endif
}
-void generate_random_bytes(size_t n, void *result) {
+void generate_random_bytes_not_thread_safe(size_t n, void *result) {
#if !defined(NDEBUG)
assert(curstate == 1);
curstate = 2;
diff --git a/src/crypto/random.h b/src/crypto/random.h
index 322b5bad1..b0d2303b6 100644
--- a/src/crypto/random.h
+++ b/src/crypto/random.h
@@ -32,4 +32,4 @@
#include <stddef.h>
-void generate_random_bytes(size_t n, void *result);
+void generate_random_bytes_not_thread_safe(size_t n, void *result);