random: Use modern Windows randomness functions #32400

pull davidgumberg wants to merge 1 commits into bitcoin:master from davidgumberg:5-1-25-winbcrypt changing 4 files +12 −11
  1. davidgumberg commented at 1:00 am on May 2, 2025: contributor

    This change resolves #32391 and is a follow-up to #14089.

    The old randomness API has been deprecated and will be removed at some point according to Microsoft.1 This PR removes all uses of that API from Bitcoin Core code, but the deprecated API is still invoked in Bitcoin Core binaries compiled after this PR because of upstream use, see this comment: #32400 (comment).

    For reference on BCryptGenRandom, see: https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom.

    STATUS_SUCCESS gets defined here since including ntstatus.h is more trouble than it’s worth.

  2. DrahtBot commented at 1:00 am on May 2, 2025: contributor

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/32400.

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    ACK laanwj, fanquake
    Concept ACK hebasto
    Stale ACK shahsb, sipa

    If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

  3. shahsb commented at 2:50 am on May 2, 2025: none
    Concept ACK
  4. maflcko added the label Utils/log/libs on May 2, 2025
  5. maflcko added the label DrahtBot Guix build requested on May 2, 2025
  6. hebasto added the label Windows on May 2, 2025
  7. in src/random.cpp:290 in 9dcf2105a9 outdated
    292-        RandFailure();
    293-    }
    294-    ret = CryptGenRandom(hProvider, NUM_OS_RANDOM_BYTES, ent32);
    295-    if (!ret) {
    296+    constexpr uint32_t STATUS_SUCCESS{0x00000000};
    297+    NTSTATUS status = BCryptGenRandom(NULL, ent32, NUM_OS_RANDOM_BYTES, BCRYPT_USE_SYSTEM_PREFERRED_RNG);
    


    laanwj commented at 10:25 am on May 2, 2025:

    Usage looks correct according to documentation:

    • hAlgorithm=NULL: required (see below)
    • pbBuffer=ent32: “The address of a buffer that receives the random number. "
    • cbBuffer=NUM_OS_RANDOM_BYTES: “The size, in bytes, of the pbBuffer buffer.”
    • dwFlags=BCRYPT_USE_SYSTEM_PREFERRED_RNG: “Use the system-preferred random number generator algorithm. The hAlgorithm parameter must be NULL.”

    Nit: Might want to use named arguments here.


    davidgumberg commented at 1:00 am on May 7, 2025:
    Done, thanks.
  8. in CMakeLists.txt:322 in 9dcf2105a9 outdated
    317@@ -318,6 +318,8 @@ if(WIN32)
    318   else()
    319     try_append_cxx_flags("-Wa,-mbig-obj" TARGET core_interface_debug SKIP_LINK)
    320   endif()
    321+
    322+  target_link_libraries(core_interface INTERFACE bcrypt)
    


    laanwj commented at 10:31 am on May 2, 2025:
    We might need to update https://github.com/bitcoin/bitcoin/blob/master/contrib/devtools/symbol-check.py#L156 (likely add a DLL, possibly even remove one, though i doubt this was all we use from ADVAPI32). The guix build will tell.

    laanwj commented at 11:12 am on May 2, 2025:

    as expected:

    0unning symbol and dynamic library checks...
    1bcrypt.dll is not in ALLOWED_LIBRARIES!
    

    hebasto commented at 1:42 pm on May 2, 2025:
    Why not narrow the scope of this dependency to the bitcoin_util and bitcoinkernel targets?

    davidgumberg commented at 1:09 am on May 7, 2025:

    Fixed both issues, thanks.

    Actually, it turns out symbol-check.py actually complains on master about bcrypt! That’s because it gets included by secp, I’ve opened #32431 which includes the same change and also bumps the lief version, I’ll rebase (if) whichever of these two PR’s get merged first.

  9. laanwj requested review from sipa on May 2, 2025
  10. laanwj commented at 11:16 am on May 2, 2025: member

    in the guix-built bitcoind.exe i can still see the Crypt* functions used (objdump -p bitcoind.exe):

    0        DLL Name: ADVAPI32.dll
    1        vma:  Hint/Ord Member-Name Bound-To
    2        dcf730   1194  CryptAcquireContextA
    3        dcf748   1211  CryptGenRandom
    4        dcf75a   1221  CryptReleaseContext
    5        dcf770   1400  InitializeSecurityDescriptor
    6        dcf790   1757  SetSecurityDescriptorDacl
    

    So some other dependency is still using them.

    Edit: the culprit seems to be libevent_core.a. The current version of libevent (2.1.12-stable) uses Crypt* functions in arc4random.c. The good news is that this was replaced by bcrypt upstream in 2020 in https://github.com/libevent/libevent/commit/eb7bed03c4ba38838b48064fa870334d1bfd517c (but of course given libevent’s slow release proces…).

    Edit2: i can’t actually narrow down the use of CryptReleaseContext yet. The other two functions are from libevent at least, but that function is not used there, as it uses a static provider that is never released. OK this may be a red herring as it concerns header-only libraries but boost has some references to Crypt functions too:

    0./include/boost/winapi/crypt.hpp:BOOST_FORCEINLINE BOOL_ CryptReleaseContext(HCRYPTPROV_ hProv, DWORD_ dwFlags)
    1./include/boost/winapi/crypt.hpp:    return ::CryptReleaseContext(hProv, dwFlags);
    2./include/boost/uuid/detail/random_provider_wincrypt.ipp:            boost::ignore_unused(boost::winapi::CryptReleaseContext(hProv_, 0));
    

    Edit3: yes-boost was a red herring. We actually have another use. You won’t believe it: in the __guard_setup code in mingw’s internals, used for -fstack-protector:

     00000000140ab5b60 <__guard_setup>:
     1   140ab5b60:   48 83 ec 48             sub    $0x48,%rsp
     2   140ab5b64:   48 83 3d 54 66 31 00    cmpq   $0x0,0x316654(%rip)        # 140dcc1c0 <__stack_chk_guard>
     3   140ab5b6b:   00
     4   140ab5b6c:   74 05                   je     140ab5b73 <__guard_setup+0x13>
     5   140ab5b6e:   48 83 c4 48             add    $0x48,%rsp
     6   140ab5b72:   c3                      ret
     7   140ab5b73:   31 c0                   xor    %eax,%eax
     8   140ab5b75:   45 31 c0                xor    %r8d,%r8d
     9   140ab5b78:   31 d2                   xor    %edx,%edx
    10   140ab5b7a:   c7 44 24 20 40 00 00    movl   $0xf0000040,0x20(%rsp)
    11   140ab5b81:   f0
    12   140ab5b82:   48 89 44 24 38          mov    %rax,0x38(%rsp)
    13   140ab5b87:   48 8d 4c 24 38          lea    0x38(%rsp),%rcx
    14   140ab5b8c:   41 b9 01 00 00 00       mov    $0x1,%r9d
    15   140ab5b92:   ff 15 50 90 31 00       call   *0x319050(%rip)        # 140dcebe8 <__IAT_start__>
    16   140ab5b98:   85 c0                   test   %eax,%eax
    17   140ab5b9a:   75 12                   jne    140ab5bae <__guard_setup+0x4e>
    18   140ab5b9c:   66 c7 05 21 66 31 00    movw   $0xff0a,0x316621(%rip)        # 140dcc1c6 <__stack_chk_guard+0x6>
    19   140ab5ba3:   0a ff
    20   140ab5ba5:   c6 05 14 66 31 00 00    movb   $0x0,0x316614(%rip)        # 140dcc1c0 <__stack_chk_guard>
    21   140ab5bac:   eb c0                   jmp    140ab5b6e <__guard_setup+0xe>
    22   140ab5bae:   48 8b 4c 24 38          mov    0x38(%rsp),%rcx
    23   140ab5bb3:   ba 08 00 00 00          mov    $0x8,%edx
    24   140ab5bb8:   4c 8d 05 01 66 31 00    lea    0x316601(%rip),%r8        # 140dcc1c0 <__stack_chk_guard>
    25   140ab5bbf:   ff 15 2b 90 31 00       call   *0x31902b(%rip)        # 140dcebf0 <__imp_CryptGenRandom>
    26   140ab5bc5:   48 8b 4c 24 38          mov    0x38(%rsp),%rcx
    27   140ab5bca:   31 d2                   xor    %edx,%edx
    28   140ab5bcc:   85 c0                   test   %eax,%eax
    29   140ab5bce:   74 0a                   je     140ab5bda <__guard_setup+0x7a>
    30   140ab5bd0:   48 83 3d e8 65 31 00    cmpq   $0x0,0x3165e8(%rip)        # 140dcc1c0 <__stack_chk_guard>
    31   140ab5bd7:   00
    32   140ab5bd8:   75 08                   jne    140ab5be2 <__guard_setup+0x82>
    33   140ab5bda:   ff 15 18 90 31 00       call   *0x319018(%rip)        # 140dcebf8 <__imp_CryptReleaseContext>
    34   140ab5be0:   eb ba                   jmp    140ab5b9c <__guard_setup+0x3c>
    35   140ab5be2:   ff 15 10 90 31 00       call   *0x319010(%rip)        # 140dcebf8 <__imp_CryptReleaseContext>
    36   140ab5be8:   eb 84                   jmp    140ab5b6e <__guard_setup+0xe>
    

    There is a patch for this (from 2020): https://gcc.gnu.org/pipermail/gcc-patches/2020-June/547018.html . i don’t know if it made it into any version. Edit4: no, it’s even now in upstream gcc https://github.com/gcc-mirror/gcc/blob/master/libssp/ssp.c#L82

    To be clear i’m 100% for making this change, but getting rid of use of this API completely in the release will take more follow-up work.

  11. hebasto commented at 1:31 pm on May 2, 2025: member
    Concept ACK.
  12. sipa commented at 1:37 pm on May 2, 2025: member
    Code review ACK 9dcf2105a9fa60b600145e3fe032a296d47b28e3. I checked this matches the API documentation, but did not test anything. I’ll leave build/linter issues to others.
  13. DrahtBot requested review from hebasto on May 2, 2025
  14. DrahtBot commented at 11:27 am on May 3, 2025: contributor

    Guix builds (on x86_64) [untrusted test-only build, possibly unsafe, not for production use]

    File commit 5b8046a6e893b7fad5a93631e6d1e70db31878af(master) commit 800a5c4358d9cb0ebea09ed7a6f48901b7763ca8(pull/32400/merge)
    *-aarch64-linux-gnu-debug.tar.gz e794b56c3d74f5b6...
    *-aarch64-linux-gnu.tar.gz 76076b6c7ddb7a48...
    *-arm-linux-gnueabihf-debug.tar.gz e0ef0f11877b5d77...
    *-arm-linux-gnueabihf.tar.gz 1e604fd0016570ea...
    *-arm64-apple-darwin-codesigning.tar.gz 4764cf7dfe7dd172...
    *-arm64-apple-darwin-unsigned.tar.gz a60c4a7be73f72d7...
    *-arm64-apple-darwin-unsigned.zip 5c704e1ebc3bf38c...
    *-powerpc64-linux-gnu-debug.tar.gz c8eba72a13144dca...
    *-powerpc64-linux-gnu.tar.gz 26a572ca44096d04...
    *-riscv64-linux-gnu-debug.tar.gz 5d0dc5fe0ac443de...
    *-riscv64-linux-gnu.tar.gz 9946f9c4a47dd63a...
    *-x86_64-apple-darwin-codesigning.tar.gz e3aa61fb8bc8b310...
    *-x86_64-apple-darwin-unsigned.tar.gz 44414b6826f7109f...
    *-x86_64-apple-darwin-unsigned.zip e2a01ca9afd93451...
    *-x86_64-linux-gnu-debug.tar.gz 5628fc8fb34ecb0e...
    *-x86_64-linux-gnu.tar.gz 139fb6a520d84d10...
    *.tar.gz e17b7116ff138a28...
    SHA256SUMS.part ed4decabf0b96cea...
    guix_build.log ed53eebc3789c2ec... db1ec2a2c2f52aba...
    guix_build.log.diff 295331433bedc417...
  15. DrahtBot removed the label DrahtBot Guix build requested on May 3, 2025
  16. davidgumberg force-pushed on May 6, 2025
  17. davidgumberg commented at 1:09 am on May 7, 2025: contributor
    Rebased to address reviewer feedback.
  18. laanwj approved
  19. laanwj commented at 6:11 am on May 7, 2025: member

    Tested and code review ACK 345944bd6cf8be0c8b85b6d3ccb593ce26c598aa

    Code changes look correct. i haven’t tested this on an actual windows machine. i’ve tested the guix-built bitcoind.exe on a Windows 10 machine by adding some logging, have verified that BCryptGenRandom() is being called and returns 32 random-looking bytes every time.

  20. DrahtBot requested review from sipa on May 7, 2025
  21. DrahtBot requested review from shahsb on May 7, 2025
  22. laanwj commented at 8:02 am on May 7, 2025: member

    GUIX build:

    0db8daad79781d10e52b1b225343fd72081ba717b484b44068ad10d646bdcb89c  guix-build-345944bd6cf8/output/dist-archive/bitcoin-345944bd6cf8.tar.gz
    155ceb9d4bd2f4707b6823d69403c659a8b1af96a24b0e4b2a6ad4a288a98214f  guix-build-345944bd6cf8/output/x86_64-w64-mingw32/SHA256SUMS.part
    2978a9f8d8726d0fe1b81fa498f8601f7b33f88ac1fb9a4b71026edadd879d7b7  guix-build-345944bd6cf8/output/x86_64-w64-mingw32/bitcoin-345944bd6cf8-win64-codesigning.tar.gz
    32668cceae2d6793ff38b25a42987b9c3b491c270377e3df4d61f3694ddbfe6b6  guix-build-345944bd6cf8/output/x86_64-w64-mingw32/bitcoin-345944bd6cf8-win64-debug.zip
    48deef9601ec4026f9ff2b245787965ce9d96b035a810050671071ee9a01e6389  guix-build-345944bd6cf8/output/x86_64-w64-mingw32/bitcoin-345944bd6cf8-win64-setup-unsigned.exe
    5792754a0c789ce1623eaabad8d2f33976032ca7761c34e246c85c5a24dd89719  guix-build-345944bd6cf8/output/x86_64-w64-mingw32/bitcoin-345944bd6cf8-win64-unsigned.zip
    
  23. DrahtBot added the label Needs rebase on May 12, 2025
  24. random: Use modern Windows randomness functions
    The old randomness API has been deprecated and may be removed soon.[^1]
    
    For reference on `BCryptGenRandom`, see: https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom.
    
    `STATUS_SUCCESS`[^2] gets defined here since including `ntstatus.h` is
    more trouble than it's worth. [^3]
    
    [^1]: https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontextw & https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom
    [^2]: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/596a1078-e883-4972-9bbc-49e60bebca55
    [^3]: See https://github.com/bitcoin-core/secp256k1/blob/70f149b9a1bf4ed3266f97774d0ae9577534bf40/examples/examples_util.h#L19-L28
    6b4bcc1623
  25. davidgumberg force-pushed on May 15, 2025
  26. davidgumberg commented at 5:55 am on May 15, 2025: contributor
    Rebased to fix merge conflict.
  27. DrahtBot removed the label Needs rebase on May 15, 2025
  28. fanquake commented at 3:49 pm on May 20, 2025: member

    This change only partially resolves #32391

    What is left unsolved after this PR?

  29. davidgumberg commented at 7:39 pm on May 20, 2025: contributor

    This change only partially resolves #32391

    What is left unsolved after this PR?

    This comment from above: #32400 (comment)

    Points out that the deprecated Windows Crypt* functions are still invoked by GCC’s libssp (-fstack-protector).

    So the bitcoin core binaries won’t really be free of those functions until GCC merges https://gcc.gnu.org/pipermail/gcc-patches/2020-June/547018.html. But, it probably would still make sense to close #32391.

  30. fanquake commented at 9:03 am on May 21, 2025: member

    But, it probably would still make sense to close #32391.

    Yea, on our side, this should be enough to close #32391.

  31. laanwj commented at 11:26 am on May 21, 2025: member

    Yea, on our side, this should be enough to close #32391.

    Yes, the issue refers to our specific use, so imo this closes it.

    From the point of “would our GUIX release run on an OS which actually removed that function”, it’s different, but given how much breakage that would cause to windows software all over the place it would be idiotic for Microsoft to do that any time soon. i was just curious to see if there were more uses (and if so, where).

    Also even then someone could self-compile it using MSVC on Windows, with a recent libevent, and it’d be fine.

  32. laanwj approved
  33. laanwj commented at 11:35 am on May 21, 2025: member
    re-ACK 6b4bcc16234575108bb691c15c3532198d9bf98a git range-diff 5b8046a6e893b7fad5a93631e6d1e70db31878af..345944bd6cf8be0c8b85b6d3ccb593ce26c598aa 31d3eebfb92ae0521e18225d69be95e78fb02672..6b4bcc16234575108bb691c15c3532198d9bf98a: Only difference: rebase for move of symbol-check.py
  34. fanquake added the label DrahtBot Guix build requested on May 21, 2025
  35. DrahtBot commented at 10:54 pm on May 21, 2025: contributor

    Guix builds (on x86_64) [untrusted test-only build, possibly unsafe, not for production use]

    File commit 7763e86afa045910a14ac9b2cd644927a447370b(master) commit 629bcf5bc917eab656af3115c916c4e3cf6c2b5e(pull/32400/merge)
    *-aarch64-linux-gnu-debug.tar.gz e01ad1a72e2ac5bc... ded63a6cb69a3e7e...
    *-aarch64-linux-gnu.tar.gz 175847b39eb8a155... 0bcc2ba776b42a77...
    *-arm-linux-gnueabihf-debug.tar.gz 580f5c44640cf44f... 2d0e1f299ef7c9dd...
    *-arm-linux-gnueabihf.tar.gz 6b44c12743fc677d... bb9d6456c73e0181...
    *-arm64-apple-darwin-codesigning.tar.gz a92cd39aa975ea1a... 6253b15fbac475e4...
    *-arm64-apple-darwin-unsigned.tar.gz 040f6f42beaf48a3... 276f824e50e0fd74...
    *-arm64-apple-darwin-unsigned.zip 21cb8ca7c81341b5... eb3aee1dac9d4a54...
    *-powerpc64-linux-gnu-debug.tar.gz 30371c6fe7e1cb93... 5fde2eac7e03bd75...
    *-powerpc64-linux-gnu.tar.gz bcdd35124d7dd6f4... 77366569cd3e1bd8...
    *-riscv64-linux-gnu-debug.tar.gz 2fd42b29f9638977... b7aa9ce1ff9cb4f1...
    *-riscv64-linux-gnu.tar.gz 5500eb3d42a2b58e... cfb9820fe90bcde2...
    *-x86_64-apple-darwin-codesigning.tar.gz b726916dea54aeb9... 8e6feed8c1aeca2c...
    *-x86_64-apple-darwin-unsigned.tar.gz 09335636a5a59d05... e568b47d8b6183af...
    *-x86_64-apple-darwin-unsigned.zip 5932657da732093c... 697afced4a2c2fac...
    *-x86_64-linux-gnu-debug.tar.gz 46a4fa155f28ab14... d37b4662b5a03824...
    *-x86_64-linux-gnu.tar.gz 029951d7d13065e4... c7dcdbe0f60064b6...
    *.tar.gz c91a5d89c73711ed... f7ecb63068a29997...
    SHA256SUMS.part 02bab136cb7dfa2e... d2f6e49928425d2e...
    guix_build.log afa97eebd71168e7... 86c1e91b2ab32b32...
    guix_build.log.diff 8e8d130ecc501e7b...
  36. DrahtBot removed the label DrahtBot Guix build requested on May 21, 2025
  37. fanquake commented at 10:39 am on May 22, 2025: member

    Guix Build:

     0d9e24e61f22de8b9d83cbbec4830bdb9192ab55ac90aba125a53ec9fba719d67  guix-build-6b4bcc162345/output/aarch64-linux-gnu/SHA256SUMS.part
     19780961f5ce0c23db0f6ec4b9930728344a3cb4706e4a36dff2364f12905acf8  guix-build-6b4bcc162345/output/aarch64-linux-gnu/bitcoin-6b4bcc162345-aarch64-linux-gnu-debug.tar.gz
     22f281a8e266bab0631e40a738db21a4f4865aa2e91e9dfadc2d208b05d5a2f8b  guix-build-6b4bcc162345/output/aarch64-linux-gnu/bitcoin-6b4bcc162345-aarch64-linux-gnu.tar.gz
     31639f2ab6e353d5aa01805ea29ab37f8d8e428db33eaf9a6ab444e80c24095ae  guix-build-6b4bcc162345/output/arm-linux-gnueabihf/SHA256SUMS.part
     4fcb900592021d4e8f607a31d8267e36761fdc0036640d9c3086faadadedd99af  guix-build-6b4bcc162345/output/arm-linux-gnueabihf/bitcoin-6b4bcc162345-arm-linux-gnueabihf-debug.tar.gz
     5b67ca8083748df84cdaacbbcd509543465ff7ad7ad447dada641ff20223900a8  guix-build-6b4bcc162345/output/arm-linux-gnueabihf/bitcoin-6b4bcc162345-arm-linux-gnueabihf.tar.gz
     603aebe7ee1be27aa60e36d3fe3628019d6e8d82051bc4b00ef88dd45c2cc763c  guix-build-6b4bcc162345/output/arm64-apple-darwin/SHA256SUMS.part
     7a3912fe813360058218f5210bc2ff3e1bfd02ba962213d9758428fb19529a81d  guix-build-6b4bcc162345/output/arm64-apple-darwin/bitcoin-6b4bcc162345-arm64-apple-darwin-codesigning.tar.gz
     8973347c1384df645a8a38d3c39bcb956b041905152da95811e77db1eb43bc296  guix-build-6b4bcc162345/output/arm64-apple-darwin/bitcoin-6b4bcc162345-arm64-apple-darwin-unsigned.tar.gz
     9db1345fd1030ddd7aab01a5a1130d6feb9532d93175a731814ec074b417e739e  guix-build-6b4bcc162345/output/arm64-apple-darwin/bitcoin-6b4bcc162345-arm64-apple-darwin-unsigned.zip
    10210da4f7a96e74cfb9350549281b04106481a540b0f8b86d6a303c5bfa8ed3e3  guix-build-6b4bcc162345/output/dist-archive/bitcoin-6b4bcc162345.tar.gz
    1170160c2387635f3175c1e799ade355c4c9bd6eed3f7911a99385c737ef69d2ab  guix-build-6b4bcc162345/output/powerpc64-linux-gnu/SHA256SUMS.part
    12e3e2287a4be6b061ed5da3086f57e28c38284493811fc028f14353a04a34a5e8  guix-build-6b4bcc162345/output/powerpc64-linux-gnu/bitcoin-6b4bcc162345-powerpc64-linux-gnu-debug.tar.gz
    13fcb82c445a113c4b7214f241d927155f4af648b859083a3df71855ff1b1ff569  guix-build-6b4bcc162345/output/powerpc64-linux-gnu/bitcoin-6b4bcc162345-powerpc64-linux-gnu.tar.gz
    14ec9002aa2ea3591ef4feb3572687863abd69a720ec058f277418ed27c6f3a93f  guix-build-6b4bcc162345/output/riscv64-linux-gnu/SHA256SUMS.part
    15f0ee05a03a1c734de92b12d58c898e714c58a0d34ad713586effe2094b764e85  guix-build-6b4bcc162345/output/riscv64-linux-gnu/bitcoin-6b4bcc162345-riscv64-linux-gnu-debug.tar.gz
    16dfbf67ea610c1b71963eb1085e8406e04de7dabd07c91cb78153f19081910699  guix-build-6b4bcc162345/output/riscv64-linux-gnu/bitcoin-6b4bcc162345-riscv64-linux-gnu.tar.gz
    17ac572ee2107334e198982dbcec6a199cf1b6ed94e01c58526c37ef8b271f2361  guix-build-6b4bcc162345/output/x86_64-apple-darwin/SHA256SUMS.part
    18d22a5f09c385ac48ba5f79604dd2ecc950158e07d49533f51aa720870c8be056  guix-build-6b4bcc162345/output/x86_64-apple-darwin/bitcoin-6b4bcc162345-x86_64-apple-darwin-codesigning.tar.gz
    19d5cf1e6bc6c4284368cc86fef3829dcfcef655935b509e902c45ba266976e2c8  guix-build-6b4bcc162345/output/x86_64-apple-darwin/bitcoin-6b4bcc162345-x86_64-apple-darwin-unsigned.tar.gz
    204a7141d31ca7f312387b1d98bab166a567f1ab40345e7f718a540e7c015801a7  guix-build-6b4bcc162345/output/x86_64-apple-darwin/bitcoin-6b4bcc162345-x86_64-apple-darwin-unsigned.zip
    219ace953b4a60cb097cbfdeacbbc04ce90cc4cca059f1e800877afe21a8c7da3a  guix-build-6b4bcc162345/output/x86_64-linux-gnu/SHA256SUMS.part
    22165e34d35e07441ae9bd4711796e4ba51a76e4e92445c2a8ddac72f84b8a7657  guix-build-6b4bcc162345/output/x86_64-linux-gnu/bitcoin-6b4bcc162345-x86_64-linux-gnu-debug.tar.gz
    23d207efcf4bdceb48179f0f8b2d32c10017703c0c8dc8379ad9f7248ca8a6e82e  guix-build-6b4bcc162345/output/x86_64-linux-gnu/bitcoin-6b4bcc162345-x86_64-linux-gnu.tar.gz
    24590013d6b0f0166c2b4c113025109ac1385ff1aa85c557eb44fc402b7d6ae850  guix-build-6b4bcc162345/output/x86_64-w64-mingw32/SHA256SUMS.part
    257f0e538e22f9303a1cc05cd1065027f74f7f09743e1a9acbf0de5c2875b61219  guix-build-6b4bcc162345/output/x86_64-w64-mingw32/bitcoin-6b4bcc162345-win64-codesigning.tar.gz
    2639cadc067d45230da03be961911517639283f5bc1c4fe6ec0748e112a8f1e41d  guix-build-6b4bcc162345/output/x86_64-w64-mingw32/bitcoin-6b4bcc162345-win64-debug.zip
    27dc5ef4558ef4ec86334afd17ebae76393163fbae12eaf62e0762dfd88b2152f9  guix-build-6b4bcc162345/output/x86_64-w64-mingw32/bitcoin-6b4bcc162345-win64-setup-unsigned.exe
    2874c589a27335a7308270356b9e208b4fd41c89e6b48699d87382809330b53622  guix-build-6b4bcc162345/output/x86_64-w64-mingw32/bitcoin-6b4bcc162345-win64-unsigned.zip
    
  38. fanquake approved
  39. fanquake commented at 11:11 am on May 22, 2025: member
    ACK 6b4bcc16234575108bb691c15c3532198d9bf98a
  40. fanquake merged this on May 22, 2025
  41. fanquake closed this on May 22, 2025


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2025-05-23 21:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me