diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2023-09-16 11:37:01 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2023-09-16 11:37:01 +0900 |
| commit | fa2eb95a001392348017a227bdbaa60b50cb5470 (patch) | |
| tree | 64e63bbeacb24dcc7e69ced534c4737ecafc9de5 /src/SimpleRandomizer.cc | |
| parent | f7b9d0fdd4071061a8f7795c0ca9d18cef5904a9 (diff) | |
Prefer random number generator from crypto libraries
Diffstat (limited to 'src/SimpleRandomizer.cc')
| -rw-r--r-- | src/SimpleRandomizer.cc | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/SimpleRandomizer.cc b/src/SimpleRandomizer.cc index 8dbef82f..f1603935 100644 --- a/src/SimpleRandomizer.cc +++ b/src/SimpleRandomizer.cc @@ -45,6 +45,14 @@ # include <Security/SecRandom.h> #endif // __APPLE__ +#ifdef HAVE_LIBGNUTLS +# include <gnutls/crypto.h> +#endif // HAVE_LIBGNUTLS + +#ifdef HAVE_OPENSSL +# include <openssl/rand.h> +#endif // HAVE_OPENSSL + #include "a2time.h" #include "a2functional.h" #include "LogFactory.h" @@ -101,7 +109,19 @@ void SimpleRandomizer::getRandomBytes(unsigned char* buf, size_t len) #elif defined(__APPLE__) auto rv = SecRandomCopyBytes(kSecRandomDefault, len, buf); assert(errSecSuccess == rv); -#else // !__MINGW32__ && !__APPLE__ +#elif defined(HAVE_LIBGNUTLS) + auto rv = gnutls_rnd(GNUTLS_RND_RANDOM, buf, len); + if (rv != 0) { + assert(0 == rv); + abort(); + } +#elif defined(HAVE_OPENSSL) + auto rv = RAND_bytes(buf, len); + if (rv != 1) { + assert(1 == rv); + abort(); + } +#else constexpr static size_t blocklen = 256; auto iter = len / blocklen; auto p = buf; @@ -128,7 +148,7 @@ void SimpleRandomizer::getRandomBytes(unsigned char* buf, size_t len) assert(0); abort(); } -#endif // ! __MINGW32__ +#endif // !__MINGW32__ && !__APPLE__ && !HAVE_OPENSSL && !HAVE_LIBGNUTLS } } // namespace aria2 |
