COLDCARD firmware PR #691 patch
coldcard-firmware-pr-691-patch
- Organisation
- Coinkite
- Evidence role
- Repository patch
- Published
- not established
- Source changes
- 0
- Detected differences
- 0
- Unreviewed
- 0
- Copies held
- 1
Patch content for the open firmware-side full-digest proposal. 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 2 Aug 2026, 00:58 UTC.
Snapshot and diff bodies for this chain monitor are held in the local evidence archive but withheld from the public site because they can contain victim addresses. Integrity hashes, capture times and reviewed change summaries remain available below.
-
Recovered from the Internet Archive rather than captured by this project. The row records that third-party provenance separately from captures made by this project.
What changed from the previous capture 0 lines
Extracted text as captured
From 9324b130f4e30b852e1162a7390fbe75b2f37957 Mon Sep 17 00:00:00 2001 From: Ballance <[email protected]> Date: Fri, 31 Jul 2026 23:32:03 -0400 Subject: [PATCH] fix: feed full SE digest to PRNG reseed (drop 32-bit truncation) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit rng_seeding() hashed the secure-element entropy with SHA256d but then kept only n[0:4], handing ngu.random.reseed() a single 32-bit word. That throttled the secure-element contribution to 2**32 and, combined with reseed()'s old behaviour, left most of the generator state at fixed constants. Pass the whole 32-byte digest instead. Bumps external/libngu to a512174, which reworks random.reseed() to absorb a full-width seed into all generator state words. Ref: Block engineering disclosure, "Predictable RNG fallback and 32-bit reseed in COLDCARD firmware". Thirty-two silent bytes, all but four were cast aside — now the seed stays whole. --- external/libngu | 2 +- shared/mk4.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/external/libngu b/external/libngu index 537519a8..a5121743 160000 --- a/external/libngu +++ b/external/libngu @@ -1 +1 @@ -Subproject commit 537519a829259622ea6b0334fbafd6cae852852f +Subproject commit a51217432308fd9ebc7c3d54b96a5af72b71b2e9 diff --git a/shared/mk4.py b/shared/mk4.py index 3a3e229d..8a4b1572 100644 --- a/shared/mk4.py +++ b/shared/mk4.py @@ -38,13 +38,15 @@ def make_psram_fs(): def rng_seeding(): # seed our RNG with entropy from secure elements - import callgate, ngu, ustruct + import callgate, nguExcerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.
Each copy above is identified by the SHA-256 of its extracted text, shown beside it, and the diffs are plain unified diffs. 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.
The SHA-256 prefixes above identify each held copy without turning this page into a mirror of somebody else's post. Compare a quotation against the original. If the post has since been edited or deleted, ask and the held copy can be produced.