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 #62: HMAC_DRBG core, verified against NIST CAVP vectors

libngu-pr-62

https://github.com/switck/libngu/pull/62

Latest reviewed change

source content difference between and

The pull request state changed from Open to Merged, and the page rendered additional contributor labels.

seen +3 -1 full history below
 There was an error while loading. Please reload this page.
 Copy link
 Copy Markdown
+Contributor
 Part 1 of 3 — see #63 and #64; this core is inert until #64 wires it into random.c.
 Self-contained core for the RNG rework that follows: K/V state machine with instantiate, mixing reseed, and backtracking-resistant generate. No heap allocation and no failure paths -- HMAC is built directly on the SHA-256 backend the rest of libngu already uses (mbedtls or cifra, as in hash.c), because mbedtls' HMAC layer allocates and hardware SHA (MBEDTLS_SHA256_ALT) can fail at runtime; the latter is refused at compile time until a target proves its no-fail contract. Reseed interval and prediction resistance are deliberately omitted and documented: the consumer (random.c, next commits) mixes fresh entropy into every output instead. Secret-bearing temporaries are wiped via a volatile-store helper the optimizer cannot elide.
 Verified by a host-compiled harness (ngu_tests: make cavp, part of 'make tests') against official NIST CAVP vectors -- 12 vectors plus 2 derived partial-block KATs, run through BOTH SHA-256 backends. The vector extractor cross-checks every vector against an independent pure-python reference before emitting; vectors are checked in with provenance.
 Closed

First lines only. The complete diff is in the timeline below.

Organisation
switck
Evidence role
Repository pull request
Published
not established
Source changes
2
Detected differences
3
Unreviewed
0
Copies held
4

First of the three-PR split of #59 that its author offered on 1 August, and the only one closed: at first capture on 7 Aug 2026 the page shows jgmontoya wanting to merge one commit and a state of Closed. The commit adds an HMAC_DRBG (SP 800-90A 10.1.2, SHA-256) as a self-contained core for the RNG rework that follows, built on the SHA-256 backend libngu already uses rather than on mbedtls' allocating HMAC layer, and states it was checked by a host-compiled harness against official NIST CAVP vectors through both backends. Registered from its own page because the record had been describing this stack from titles rendered on the #59 and #61 pages. Whether the closure was withdrawal, supersession or rejection is not stated on the captured page, and this project does not infer it.

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. source content difference between and source content +3 -1

    The pull request state changed from Open to Merged, and the page rendered additional contributor labels.

    seen · Captured here 8,150 chars
    What changed from the previous capture 4 lines
     There was an error while loading. Please reload this page.
     Copy link
     Copy Markdown
    +Contributor
     Part 1 of 3 — see #63 and #64; this core is inert until #64 wires it into random.c.
     Self-contained core for the RNG rework that follows: K/V state machine with instantiate, mixing reseed, and backtracking-resistant generate. No heap allocation and no failure paths -- HMAC is built directly on the SHA-256 backend the rest of libngu already uses (mbedtls or cifra, as in hash.c), because mbedtls' HMAC layer allocates and hardware SHA (MBEDTLS_SHA256_ALT) can fail at runtime; the latter is refused at compile time until a target proves its no-fail contract. Reseed interval and prediction resistance are deliberately omitted and documented: the consumer (random.c, next commits) mixes fresh entropy into every output instead. Secret-bearing temporaries are wiped via a volatile-store helper the optimizer cannot elide.
     Verified by a host-compiled harness (ngu_tests: make cavp, part of 'make tests') against official NIST CAVP vectors -- 12 vectors plus 2 derived partial-block KATs, run through BOTH SHA-256 backends. The vector extractor cross-checks every vector against an independent pure-python reference before emitting; vectors are checked in with provenance.
     Closed
     random: harden entropy backends and state handling
     #64
    -Open
    +Merged
     random: fail-closed entropy backends; replace Yasmarang with CAVP-verified HMAC_DRBG
     #59
     Closed
     Aug 7, 2026
     Copy link
     Copy Markdown
    +Contributor
     Author
     No longer relevant given #61
     All reactions
    
    Extracted text as captured
    Skip to content
    Navigation Menu
    Sign inAppearance settings
    Platform
    AI CODE CREATION
    GitHub CopilotWrite better code with AI
    GitHub Copilot appDirect agents from issue to merge
    MCP RegistryIntegrate external tools
    DEVELOPER WORKFLOWS
    ActionsAutomate any workflow
    CodespacesInstant dev environments
    IssuesPlan and track work
    Code ReviewManage code changes
    Code QualityEnforce quality at merge
    APPLICATION SECURITY
    GitHub Advanced SecurityFind and fix vulnerabilities
    Code securitySecure your code as you build
    Secret protectionStop leaks before they start
    EXPLORE
    Why GitHub
    Documentation
    Blog
    Changelog
    Marketplace
    View all features
    Solutions
    BY COMPANY SIZE
    Enterprises
    Small and medium teams
    Startups
    Nonprofits
    BY USE CASE
    App Modernization
    DevSecOps
    DevOps
    CI/CD
    View all use cases
    BY INDUSTRY
    Healthcare
    Financial services

    Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.

  2. source content difference between and source content +1 -1

    The pull request state changed from Open to Closed.

    seen · Captured here 8,124 chars
    What changed from the previous capture 2 lines
     This was referenced Aug 1, 2026
     random: reject two-word entropy cycles
     #63
    -Open
    +Closed
     random: harden entropy backends and state handling
     #64
     Open
    
    Extracted text as captured
    Skip to content
    Navigation Menu
    Sign inAppearance settings
    Platform
    AI CODE CREATION
    GitHub CopilotWrite better code with AI
    GitHub Copilot appDirect agents from issue to merge
    MCP RegistryIntegrate external tools
    DEVELOPER WORKFLOWS
    ActionsAutomate any workflow
    CodespacesInstant dev environments
    IssuesPlan and track work
    Code ReviewManage code changes
    Code QualityEnforce quality at merge
    APPLICATION SECURITY
    GitHub Advanced SecurityFind and fix vulnerabilities
    Code securitySecure your code as you build
    Secret protectionStop leaks before they start
    EXPLORE
    Why GitHub
    Documentation
    Blog
    Changelog
    Marketplace
    View all features
    Solutions
    BY COMPANY SIZE
    Enterprises
    Small and medium teams
    Startups
    Nonprofits
    BY USE CASE
    App Modernization
    DevSecOps
    DevOps
    CI/CD
    View all use cases
    BY INDUSTRY
    Healthcare
    Financial services

    Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.

  3. Earliest copy held
    seen · Captured here 8,122 chars
    Extracted text as captured
    Skip to content
    Navigation Menu
    Sign inAppearance settings
    Platform
    AI CODE CREATION
    GitHub CopilotWrite better code with AI
    GitHub Copilot appDirect agents from issue to merge
    MCP RegistryIntegrate external tools
    DEVELOPER WORKFLOWS
    ActionsAutomate any workflow
    CodespacesInstant dev environments
    IssuesPlan and track work
    Code ReviewManage code changes
    Code QualityEnforce quality at merge
    APPLICATION SECURITY
    GitHub Advanced SecurityFind and fix vulnerabilities
    Code securitySecure your code as you build
    Secret protectionStop leaks before they start
    EXPLORE
    Why GitHub
    Documentation
    Blog
    Changelog
    Marketplace
    View all features
    Solutions
    BY COMPANY SIZE
    Enterprises
    Small and medium teams
    Startups
    Nonprofits
    BY USE CASE
    App Modernization
    DevSecOps
    DevOps
    CI/CD
    View all use cases
    BY INDUSTRY
    Healthcare
    Financial services

    Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.

1 presentation-noise difference. Sidebar, ticker and other page chrome churn that our review classified as not being a change to what the source says.
  • +5 -3 Only GitHub header chrome changed. The 'Sign in' and 'Appearance settings' labels split onto separate lines, and the search prompt changed from 'Type / to search' to 'Search/'.
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.