COLDCARD RNG incident the public record, collected and explained
Informational only, and this site never asks for your seed words. details

Informational only. This is an open source collection of what others have published about the incident, together with an explanation of it. It is not financial, security or legal advice, and not a substitute for professional advice about your own situation. It is not affiliated with, endorsed by, or speaking for Coinkite. Material is attributed and quoted as published; where sources disagree their scenarios are kept separate with their assumptions rather than reconciled into one answer. Everything is meant to be checked against the linked evidence rather than taken on trust. Act on your own judgement about a particular situation. Editorial standards and corrections.

Do not disclose recovery material to a website, form, message or support account. This site never asks for it, and contributions containing recovery words or private keys are not accepted.

libngu PR #68 patch

libngu-pr-68-patch

https://github.com/switck/libngu/pull/68.patch

Organisation
switck
Evidence role
Repository patch
Published
not established
Source changes
0
Detected differences
0
Unreviewed
0
Copies held
1

Patch content for #68. Kept separately from the conversation and review-state capture.

Every check is recorded, including checks that found no text change. A detected edit is therefore bounded between two checks. The publisher's exact save time is not observable from this record. Last checked .

  1. Earliest copy held Current
    seen · Captured here 1,602 chars
    Extracted text as captured
    From 7e393e70f633fb758426c47b97b5e4611d1c572d Mon Sep 17 00:00:00 2001
    From: scgbckbone <[email protected]>
    Date: Fri, 7 Aug 2026 09:02:04 +0200
    Subject: [PATCH 1/2] Revert "Enforce HW TRNG"
    The check rejects MICROPY_HW_ENABLE_RNG=0, which is intentional when Coldcard supplies its own hardware-backed rng_get(). This breaks all Coldcard firmware builds.
    ---
     ngu/random.c | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    diff --git a/ngu/random.c b/ngu/random.c
    index 16c0d3f..f995417 100644
    --- a/ngu/random.c
    +++ b/ngu/random.c
    @@ -27,7 +27,7 @@ extern uint32_t rng_get(void);
     # define CHIP_TRNG_SETUP()
     # define CHIP_TRNG_32()         rng_get()
    -# if MICROPY_HW_ENABLE_RNG == 0
    +# ifndef MICROPY_HW_ENABLE_RNG
     # error "get a HW TRNG plz"
     # endif
     #endif
    From a41d632cd9b61428587828379e240f7555fed48b Mon Sep 17 00:00:00 2001
    From: scgbckbone <[email protected]>
    Date: Fri, 7 Aug 2026 09:02:27 +0200
    Subject: [PATCH 2/2] Allow an external STM32 rng_get provider
    Permit STM32 ports that replace MicroPython rng_get() to opt in explicitly. Require NGU_STM32_EXTERNAL_RNG_GET to equal 1 so undefined, zero, and other values remain rejected.
    ---
     ngu/random.c | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    diff --git a/ngu/random.c b/ngu/random.c
    index f995417..49fd469 100644
    --- a/ngu/random.c
    +++ b/ngu/random.c
    @@ -27,7 +27,7 @@ extern uint32_t rng_get(void);
     # define CHIP_TRNG_SETUP()
     # define CHIP_TRNG_32()         rng_get()
    -# ifndef MICROPY_HW_ENABLE_RNG
    +# if MICROPY_HW_ENABLE_RNG == 0 && NGU_STM32_EXTERNAL_RNG_GET != 1
     # error "get a HW TRNG plz"
     # endif
     #endif
How to check this yourself

The excerpts and plain unified diffs above show the text this project held and how it changed. To verify a quotation, compare it against the page itself or against the Internet Archive's copies, which are independent of this project.

Complete captures are held offline rather than mirrored here, so this page shows diffs and excerpts. If a quotation is ever disputed, the full copy can be produced. Ask.