summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYawning Angel <yawning@schwanenlied.me>2015-08-12 15:57:05 +0000
committerYawning Angel <yawning@schwanenlied.me>2015-08-12 15:57:05 +0000
commitaf898f54752f45fa2a8da28ca88379c89ca1f5a0 (patch)
treed6076d6456ae26d47e1f7095586b46ed16dc08b1 /src
parentda04fed865b6df09b33e6b632d51d34b3eb20d14 (diff)
downloadtor-af898f54752f45fa2a8da28ca88379c89ca1f5a0.tar.gz
tor-af898f54752f45fa2a8da28ca88379c89ca1f5a0.zip
Add crypto_rand_unmocked, which is crypto_rand without mocking.
There is odd issues with calling crypto_rand from our copy of ed25519-donna, due to mocking that are not easily resolved.
Diffstat (limited to 'src')
-rw-r--r--src/common/crypto.c11
-rw-r--r--src/common/crypto.h1
2 files changed, 11 insertions, 1 deletions
diff --git a/src/common/crypto.c b/src/common/crypto.c
index 2121383c75..6d4b0d7e16 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -2365,11 +2365,20 @@ crypto_seed_rng(void)
}
/** Write <b>n</b> bytes of strong random data to <b>to</b>. Return 0 on
- * success, -1 on failure.
+ * success, -1 on failure, with support for mocking for unit tests.
*/
MOCK_IMPL(int,
crypto_rand, (char *to, size_t n))
{
+ return crypto_rand_unmocked(to, n);
+}
+
+/** Write <b>n</b> bytes of strong random data to <b>to</b>. Return 0 on
+ * success, -1 on failure. Most callers will want crypto_rand instead.
+ */
+int
+crypto_rand_unmocked(char *to, size_t n)
+{
int r;
tor_assert(n < INT_MAX);
tor_assert(to);
diff --git a/src/common/crypto.h b/src/common/crypto.h
index 368e9d8e32..6256f7346b 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -260,6 +260,7 @@ int crypto_expand_key_material_rfc5869_sha256(
/* random numbers */
int crypto_seed_rng(void);
MOCK_DECL(int,crypto_rand,(char *to, size_t n));
+int crypto_rand_unmocked(char *to, size_t n);
int crypto_strongest_rand(uint8_t *out, size_t out_len);
int crypto_rand_int(unsigned int max);
int crypto_rand_int_range(unsigned int min, unsigned int max);