diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-06-06 09:50:56 +0000 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-08-22 11:12:57 +0000 |
commit | 1dc3b1a516332f12a4bd8fd8dd80695a003d1d98 (patch) | |
tree | 5a4eb58fefaebc19a2b22a80da46fbf9cb71b87b /src/crypto/random.c | |
parent | Merge pull request #5635 (diff) | |
download | monero-1dc3b1a516332f12a4bd8fd8dd80695a003d1d98.tar.xz |
wallet: add --extra-entropy command line flag
It lets the user add custom entropy to the PRNG.
It does this by hashing the new data and xoring the resulting
hash with the PRNG state.
Diffstat (limited to 'src/crypto/random.c')
-rw-r--r-- | src/crypto/random.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/crypto/random.c b/src/crypto/random.c index 74b202661..766b5f558 100644 --- a/src/crypto/random.c +++ b/src/crypto/random.c @@ -146,3 +146,18 @@ void generate_random_bytes_not_thread_safe(size_t n, void *result) { } } } + +void add_extra_entropy_not_thread_safe(const void *ptr, size_t bytes) +{ + size_t i; + + while (bytes > 0) + { + hash_permutation(&state); + const size_t round_bytes = bytes > HASH_DATA_AREA ? HASH_DATA_AREA : bytes; + for (i = 0; i < round_bytes; ++i) + state.b[i] ^= ((const uint8_t*)ptr)[i]; + bytes -= round_bytes; + ptr = cpadd(ptr, round_bytes); + } +} |