14550 Commits

Author SHA1 Message Date
chromatic
2e37a3a1ba
Merge pull request #3560 from patricklodder/compat/shuffle
random: use std::shuffle instead of std::random_shuffle
2024-06-22 00:13:50 -07:00
Patrick Lodder
caa79bd1a1
random: use std::shuffle instead of std::random_shuffle
random_shuffle is deprecated since c++11 and removed in c++17. Use
the shuffle function instead, now that we have a standardized
interface available on FastRandomContext.

This enables c++17 compilation
2024-06-20 10:32:21 -04:00
Old Dip Tracker
da22f3312d
Merge pull request #3521 from xanimo/1.15.0-dev-next-random-pre-14955
backport: random.h/.cpp cherry-picks
2024-06-20 15:20:35 +02:00
Pieter Wuille
47b48521bb
Make FastRandomContext support standard C++11 RNG interface
This makes it possible to plug it into the various standard C++11 random
distribution algorithms and other functions like std::shuffle.

Cherry-picked from: 1ec1602a4549f6b68586cead8eff701bceb624f5
2024-06-18 16:38:09 -07:00
Aaron Clauson
3606c85c7d
Minimal code changes to allow msvc compilation.
-add msvc ssize_t definition in compat.h
-change NUM_OS_RANDOM_BYTES to int from ssize_t in random.h

Includes squashed commit: f7dc99244c8e78dbd0196f612690efcc449c37dc

Inspired by: fbf327b13868861c2877c5754caf5a9816f2603c
2024-06-18 16:06:52 -07:00
Dag Robole
90d1972d81
Fix resource leak
Cherry-picked from: a8ae0b252a2007568e77f5aca1c7fa3ec5941b72
2024-06-18 15:19:51 -07:00
Pieter Wuille
60bd389823
Use rdrand as entropy source on supported platforms
Includes squashed commits:
5155d1101eb4fc9d4d797b583bb29f71807bd10b
a9e82f6512662054f64ed2bde590b2bb0831fc9d
674848fe1c43fb88870cf5ba16fca4e2524da793

Cherry-picked from: cb24c8539d1098d1a61605b452ecfa11a693320d
2024-06-18 15:19:25 -07:00
Pieter Wuille
23bc7a072e
Use sanity check timestamps as entropy
Cherry-picked from: 2c0a6f157da3c6bb3b0a1e77f003caf0d9cb9d6c
2024-06-18 14:37:52 -07:00
Pieter Wuille
4a3c6ddc11
Test that GetPerformanceCounter() increments 2024-06-18 14:37:51 -07:00
Pieter Wuille
930acbfe49
Use hardware timestamps in RNG seeding 2024-06-18 14:37:44 -07:00
Old Dip Tracker
5ac4640a48
Merge pull request #3511 from xanimo/1.15.0-dev-91e3035-10321
backport: Use FastRandomContext for all tests
2024-06-15 15:26:16 +02:00
xanimo
d693d4a008
random: getentropy on macOS does not need unistd.h
change sys/random.h to random.h in AC_MSG_CHECK
remove definitions that are applicable to macos which include unistd.h
additionally change comparator argument from NULL to nullptr when evaluating &getentropy

Inspired by: c13c97dbf846cf0e6a5581ac414ef96a215b0dc6
2024-06-13 11:44:33 -07:00
James Hilliard
743c3acd3d
Check if sys/random.h is required for getentropy on OSX.
Cherry-picked from: ee2d10ad0c0e04d0b9da4535a6fff265ac2501e5
2024-06-13 11:42:50 -07:00
Pieter Wuille
265f258540
scripted-diff: Use new naming style for insecure_rand* functions
-BEGIN VERIFY SCRIPT-
sed -i 's/\<insecure_randbits(/InsecureRandBits(/g' src/test/*.cpp src/test/*.h src/wallet/test/*.cpp
sed -i 's/\<insecure_randbool(/InsecureRandBool(/g' src/test/*.cpp src/test/*.h src/wallet/test/*.cpp
sed -i 's/\<insecure_randrange(/InsecureRandRange(/g' src/test/*.cpp src/test/*.h src/wallet/test/*.cpp
sed -i 's/\<insecure_randbytes(/InsecureRandBytes(/g' src/test/*.cpp src/test/*.h src/wallet/test/*.cpp
sed -i 's/\<insecure_rand256(/InsecureRand256(/g' src/test/*.cpp src/test/*.h src/wallet/test/*.cpp
sed -i 's/\<insecure_rand(/InsecureRand32(/g' src/test/*.cpp src/test/*.h src/wallet/test/*.cpp
sed -i 's/\<seed_insecure_rand(/SeedInsecureRand(/g' src/test/*.cpp src/test/*.h src/wallet/test/*.cpp
-END VERIFY SCRIPT-

Cherry-picked from: e945848582160b23fa0bc6f797e2bd8ac676ee0e
2024-06-13 11:42:49 -07:00
Pieter Wuille
7abc3c6c6d
scripted-diff: Use randbits/bool instead of randrange where possible
-BEGIN VERIFY SCRIPT-
sed -i 's/insecure_randbits(1)/insecure_randbool()/g' src/test/*_tests.cpp
sed -i 's/insecure_randrange(2)/insecure_randbool()/g' src/test/*_tests.cpp
sed -i 's/insecure_randrange(4)/insecure_randbits(2)/g' src/test/*_tests.cpp
sed -i 's/insecure_randrange(32)/insecure_randbits(5)/g' src/test/*_tests.cpp
sed -i 's/insecure_randrange(256)/insecure_randbits(8)/g' src/test/*_tests.cpp
-END VERIFY SCRIPT-

Cherry-picked from: 2fcd9cc86bfce944e3312e9a24685403250f3bdc
2024-06-13 11:42:49 -07:00
Pieter Wuille
046cbb0091
Use randbits instead of ad-hoc emulation in prevector tests
Cherry-picked from: 2ada67852174a76753080d65a7adbe27241a9caa
2024-06-13 11:42:49 -07:00
Pieter Wuille
9fa9876e4c
Replace rand() & ((1 << N) - 1) with randbits(N)
Cherry-picked from: 5f0b04eedc5bbdb9319c9f1f1a6c599337f5bbe3
2024-06-13 11:42:48 -07:00
Pieter Wuille
a36981dec6
Replace more rand() % NUM by randranges
Cherry-picked from: 3ecabae36364e905e7821fba3e60aa7f8418de6c
2024-06-13 11:42:48 -07:00
Pieter Wuille
fe5b701634
scripted-diff: use insecure_rand256/randrange more
-BEGIN VERIFY SCRIPT-
sed -i "s/\<GetRandHash(/insecure_rand256(/" src/test/*_tests.cpp
sed -i "s/\<GetRand(/insecure_randrange(/" src/test/*_tests.cpp src/test/test_bitcoin.cpp
sed -i 's/\<insecure_rand() % \([0-9]\+\)/insecure_randrange(\1)/g' src/test/*_tests.cpp
-END VERIFY SCRIPT-

Cherry-picked from: efee1db21a652019e0ab18fffc233d91bb7f1816
2024-06-13 11:42:48 -07:00
Pieter Wuille
2ee602e3ce
Add various insecure_rand wrappers for tests
Cherry-picked from: 1119927df03c94f9306e4d92f55d147b900522fb
2024-06-13 11:42:47 -07:00
Pieter Wuille
9feb51fe9d
Merge test_random.h into test_bitcoin.h
Cherry-picked from: 124d13a58cdcd9f66eeffc7e6281e3eb129e3398
2024-06-13 11:42:47 -07:00
Pieter Wuille
a8cad7ed4c
Add FastRandomContext::rand256() and ::randbytes()
FastRandomContext now provides all functionality that the real Rand* functions
provide.

Cherry-picked from: 37e864eb9fee4b592bd61c5ec3555b00a2de2cf7
2024-06-13 11:42:47 -07:00
Pieter Wuille
3f511675be
Add a FastRandomContext::randrange and use it
Cherry-picked from: 4fd2d2fc97e21efceab849576e544160fd5e3e3d
2024-06-13 11:42:46 -07:00
Pieter Wuille
b2dc5e349b
Switch FastRandomContext to ChaCha20
Cherry-picked from: 16329224e70d0525208f6b0ba00c5e1531a4f5ea
2024-06-13 11:42:46 -07:00
Wladimir J. van der Laan
74888ca567
random: Add fallback if getrandom syscall not available
If the code was compiled with newer (>=3.17) kernel headers but executed
on a system without the system call, every use of random would crash the
program. Add a fallback for that case.

Cherry-picked from: 7e6dcd9995b99e894b8017f09016c405b066ca36
2024-06-13 11:42:46 -07:00
Wladimir J. van der Laan
18a8fd4506
sanity: Move OS random to sanity check function
Move the OS random test to a sanity check function that is called every
time bitcoind is initialized.

Keep `src/test/random_tests.cpp` for the case that later random tests
are added, and keep a rudimentary test that just calls the sanity check.

Cherry-picked from: 7cad84929907c4294f07377453aa77887911b486
2024-06-13 11:42:45 -07:00
Wladimir J. van der Laan
f75d5ea728
util: Specific GetOSRandom for Linux/FreeBSD/OpenBSD
These are available in sandboxes without access to files or
devices. Also [they are safer and more straightforward](https://en.wikipedia.org/wiki/Entropy-supplying_system_calls)
to use than `/dev/urandom` as reading from a file has quite a few edge
cases:

- Linux: `getrandom(buf, buflen, 0)`. [getrandom(2)](http://man7.org/linux/man-pages/man2/getrandom.2.html)
  was introduced in version 3.17 of the Linux kernel.
- OpenBSD: `getentropy(buf, buflen)`. The [getentropy(2)](http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2)
  function appeared in OpenBSD 5.6.
- FreeBSD and NetBSD: `sysctl(KERN_ARND)`. Not sure when this was added
  but it has existed for quite a while.

Alternatives:

- Linux has sysctl `CTL_KERN` / `KERN_RANDOM` / `RANDOM_UUID`
  which gives 16 bytes of randomness. This may be available
  on older kernels, however [sysctl is deprecated on Linux](https://lwn.net/Articles/605392/)
  and even removed in some distros so we shouldn't use it.

Add tests for `GetOSRand()`:

- Test that no error happens (otherwise `RandFailure()` which aborts)
- Test that all 32 bytes are overwritten (initialize with zeros, try multiple times)

Discussion:

- When to use these? Currently they are always used when available.
  Another option would be to use them only when `/dev/urandom` is not
  available. But this would mean these code paths receive less testing,
  and I'm not sure there is any reason to prefer `/dev/urandom`.

Closes: #9676

Cherry-picked from: 224e6eb089a0f4977d22f3803fc27e44b5e7eea5

Contains squashed commit of aa09ccbb74ea9febd83ce3362238ac5339069909 squashme: comment that NUM_OS_RANDOM_BYTES should not be changed lightly
2024-06-13 11:42:45 -07:00
Pieter Wuille
e25cad0012
Add ChaCha20
Cherry-picked from: e04326fe6652543dc26d90eba4a48fbdc935fd0c
2024-06-13 11:42:45 -07:00
Pieter Wuille
6ec0fe4acb
FastRandom benchmark
Cherry-picked from: 663fbae7776b0c238f6f27d73811b4bc627d0b6b
2024-06-13 11:42:44 -07:00
Pieter Wuille
cab3eb10ab
Introduce FastRandomContext::randbool()
Cherry-picked from: c21cbe61c6249bcfca098705df6f9b4baab9f296
2024-06-13 11:42:44 -07:00
Old Dip Tracker
0879cb86e7
Merge pull request #3529 from mazyaryousefinia/master
fix: update Persian readme
2024-06-12 13:38:28 +02:00
chromatic
9d6b484134
Merge pull request #3494 from patricklodder/1.15.0-ax_cxx_compile_stdcxx
build: update AX_CXX_COMPILE_STDCXX to serial 18
2024-05-30 20:33:08 -07:00
mazyaryousefinia
c32958a0fe Update Persian readme 2024-04-27 14:47:40 +03:30
chromatic
27b08e8fd1
Merge pull request #3517 from patricklodder/ci/codeql-v3-dev
ci: update codeql to v3
2024-04-13 22:42:55 -07:00
Patrick Lodder
73d977b4d5
ci: update codeql to v3 2024-04-11 16:54:16 -04:00
Old Dip Tracker
497c6026fc
Merge pull request #3506 from danielw86dev/1.15.0-dev-fix-rebrand-koinu
fix: missing koinu string
2024-04-07 16:11:04 +02:00
chromatic
672018c33c
Merge pull request #3499 from danielw86dev/1.15.0-dev-add-rpc-uptime
rpc: add uptime (backport)
2024-04-03 17:49:28 -07:00
danielw86dev
45dd454e25 fix: mising koinu rebrand 2024-04-02 19:32:55 +02:00
Ricardo Velhote
69a7fc7cd6 [RPC] Add an uptime command that displays the amount of time that bitcoind has been running
Cherry-picked from: c07475294a

Resolved conflict:
- change path to qa\rpc-tests\uptime.py and qa\pull-tester\rpc-tests.py
- src\util.cpp

Manually executed:
- qa\rpc-tests\uptime.py: overridden setup_network(), skip connecting nodes
- doc\rpc-maturity.md: add uptime rpc

Co-Authored-By: danielw86dev <67072678+danielw86dev@users.noreply.github.com>
2024-04-02 13:37:27 +02:00
chromatic
6c0095bed1
Merge pull request #3488 from patricklodder/1.15-fs-wrapper
backport: fs wrapper
2024-03-27 16:03:22 -07:00
Patrick Lodder
6c3a24b252
build: update AX_CXX_COMPILE_STDCXX to serial 18
Downloaded the latest version available from
https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
at the time of writing. This allows configuring for up to c++20.
2024-03-27 16:18:01 -04:00
chromatic
3738a5311a
Merge pull request #3490 from patricklodder/1.15.0-const-comparator-operator
net: make IteratorComparator's operator const
2024-03-27 12:32:08 -07:00
chromatic
aefb848ef4
Merge pull request #3492 from patricklodder/1.15-ci-cxx14-experimental
ci: run experimental CIs with c++14
2024-03-27 11:58:40 -07:00
Old Dip Tracker
e249afc03e
Merge pull request #3362 from edtubbs/1.14.7-dev-freetype
depends: updated to freetype 2.11.0
2024-03-27 01:55:02 +01:00
Patrick Lodder
9134d9e090
ci: run experimental CIs with c++14 2024-03-25 21:16:00 -04:00
Ed Tubbs
97c64ffdba depends: updated to freetype 2.11.0 2024-03-25 22:49:29 +00:00
Patrick Lodder
bcdcf24f35
net: make IteratorComparator's operator const
Although this is okay to be sloppy on c++11, it is not okay when
using c++17. See: https://cplusplus.github.io/LWG/issue2542
2024-03-24 22:24:06 -04:00
Wladimir J. van der Laan
b16ff7152c
torcontrol: Use fs::path instead of std::string for private key path
Cherry-picked from: 75594bd7f
2024-03-24 16:38:08 -04:00
Wladimir J. van der Laan
d1dba0ac38
Use fsbridge for fopen and freopen
Abstracts away how a path is opened to a `FILE*`.

Reduces the number of places where path is converted to a string
for anything else but printing.

Cherry-picked from: 2a5f5747

Conflicts:
- additional instances in bitcoin-tx.cpp and test/script_tests.cpp
2024-03-24 16:38:08 -04:00
Patrick Lodder
a2caaf1f99
rewire calls to boost::filesystem to use the fs wrapper
* replaces boost/filesystem includes with fs.h
* replaces boost::filesystem:: with fs::
* removes file-local fs namespace aliases
* removes unused includes from:
  * net.h
  * src/wallet/walletdb.cpp
* adds missing includes in:
  * rpc/protocol.cpp
  * test/dbwrapper_tests.cpp
  * wallet/rpcutil.cpp
2024-03-24 16:38:08 -04:00