diff --git a/src/random.h b/src/random.h index c702309d0c3..330c10a36b8 100644 --- a/src/random.h +++ b/src/random.h @@ -301,6 +301,15 @@ public: return ret; } + /** Generate fixed-size random bytes. */ + template + std::array randbytes() noexcept + { + std::array ret; + Impl().fillrand(MakeWritableByteSpan(ret)); + return ret; + } + /** Generate a random 32-bit integer. */ uint32_t rand32() noexcept { return Impl().template randbits<32>(); } diff --git a/src/test/random_tests.cpp b/src/test/random_tests.cpp index 3d8b543e64f..538d41125af 100644 --- a/src/test/random_tests.cpp +++ b/src/test/random_tests.cpp @@ -58,7 +58,7 @@ BOOST_AUTO_TEST_CASE(fastrandom_tests_deterministic) BOOST_CHECK_EQUAL(ctx1.rand32(), ctx2.rand32()); BOOST_CHECK_EQUAL(ctx1.rand64(), ctx2.rand64()); BOOST_CHECK_EQUAL(ctx1.randbits(3), ctx2.randbits(3)); - BOOST_CHECK(ctx1.randbytes(17) == ctx2.randbytes(17)); + BOOST_CHECK(std::ranges::equal(ctx1.randbytes(17), ctx2.randbytes<17>())); // check vector/array behavior symmetry BOOST_CHECK(ctx1.rand256() == ctx2.rand256()); BOOST_CHECK_EQUAL(ctx1.randbits(7), ctx2.randbits(7)); BOOST_CHECK(ctx1.randbytes(128) == ctx2.randbytes(128));