COLDCARD firmware PR #713: improve seed generation - mash timing with microsecond-resolution
coldcard-firmware-pr-713
Latest reviewed change
source content difference between and
The pull request was merged after a force-push replaced its commit series with eight rewritten commits, and scgbckbone commented that it is superseded by #727.
Insights
Improve seed generation - mash timing with microsecond-resolution - #713
#713
-Open
+Closed
scgbckbone wants to merge 8 commits into
Coldcard:masterColdcard/firmware:masterfrom
scgbckbone:improve_seed_gen-mash-timingscgbckbone/firmware:improve_seed_gen-mash-timingCopy head branch name to clipboard
First lines only. The complete diff is in the timeline below.
- Organisation
- Coinkite
- Evidence role
- Repository pull request
- Published
- not established
- Source changes
- 5
- Detected differences
- 6
- Unreviewed
- 0
- Copies held
- 7
Opened by scgbckbone 7 Aug 2026 and explicitly aims to replace PR #707. It improves #707's mash method by hashing microsecond-resolution timing at the raw key edge, requires 128 presses, and credits one timing bit per press following Peter Todd's push-button RNG model. Registered during the 7 Aug 2026 claim sweep when #707 was found closed in favour of this proposal.
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 .
This post is held twice: here, with this project's own note on why it matters, and again as part of the conversation captured at , which is polled for changes. Both copies are the same post; neither is a separate event.
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 the addresses of people who published nothing themselves. Capture times and reviewed change summaries remain available below.
Held captures
-
The pull request was merged after a force-push replaced its commit series with eight rewritten commits, and scgbckbone commented that it is superseded by #727.
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 92 lines
Insights Improve seed generation - mash timing with microsecond-resolution - #713 #713 -Open +Closed scgbckbone wants to merge 8 commits into Coldcard:masterColdcard/firmware:masterfrom scgbckbone:improve_seed_gen-mash-timingscgbckbone/firmware:improve_seed_gen-mash-timingCopy head branch name to clipboard ConversationCommits8 (8)ChecksFiles changed -Open +Closed Improve seed generation - mash timing with microsecond-resolution#713 scgbckbone wants to merge 8 commits into Coldcard:masterColdcard/firmware:masterfrom Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page. -All reactions -scgbckbone -added 2 commits -August 5, 2026 15:35 -Mix secure element entropy into seed generation -f460ce3 -reseed with full 32 bytes of digest from SE1/SE2 entropy sources -d16d47b +<github-reactions> scgbckbone commented Aug 7, 2026 Aug 11, 2026 fix: feed full SE digest to PRNG reseed (drop 32-bit truncation) #691 -Draft -scgbckbone -added 5 commits -August 11, 2026 15:42 -Require external entropy for all new master seed wallets - with new o… -… -4f58482 -…ptions dice/coin/mash -Warn before dice-only seed generation -d8f73c1 -external entropy required for CCC key and temporary seeds -62a5028 -Bump libngu: SHA-256 Hash-DRBG replaces Yasmarang -6a55baf -exclude schnorr/musig from libngu to save flash space; add adition ma… -… -11d8130 -…cro NGU_STM32_EXTERNAL_RNG_GET; disable threads for unix port +Closed scgbckbone force-pushed the Aug 11, 2026 rng: verify libngu bytes path reaches hardware driver #700 -Open +Merged doc-hex commented Aug 12, 2026 but don't try to be precise about key-gaps, just add samples from the h/w counter in response to key edges events for example, when in 'mosh mode', add samples to a list as edge event happen; pull that entropy out at higher level then we wouldn't need to change the API so much => less bugs -All reactions +<github-reactions> Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page. Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page. -review: code dedup - save flash space -c81f966 scgbckbone force-pushed the c81f966 Compare August 13, 2026 14:15 +scgbckbone +added 8 commits +August 14, 2026 11:02 +Mix secure element entropy into seed generation +595a557 +reseed with full 32 bytes of digest from SE1/SE2 entropy sources +8e55504 +Require external entropy for all new master seed wallets - with new o… +… +6611c46 +…ptions dice/coin/mash +Warn before dice-only seed generation +4aea283 +external entropy required for CCC key and temporary seeds +99ffd0e +Bump libngu: SHA-256 Hash-DRBG replaces Yasmarang +dee50c3 +exclude schnorr/musig from libngu to save flash space; add adition ma… +… +ed64ec0 +…cro NGU_STM32_EXTERNAL_RNG_GET; disable threads for unix port +review: code dedup - save flash space +0e76628 +scgbckbone +force-pushed +the +improve_seed_gen-mash-timing +branch +from +c81f966 to +0e76628 +Compare +August 14, 2026 09:02 +scgbckbone +mentioned this pull request +Aug 14, 2026 +Improve seed generation +#727 +Merged +scgbckbone +commented +Aug 14, 2026 +Copy link +Copy Markdown +Collaborator +Author +superseded by #727 +All reactions +Sorry, something went wrong. +Uh oh! +There was an error while loading. Please reload this page. +scgbckbone +closed this +Aug 14, 2026 This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters Show hidden charactersExtracted text as captured
Skip to content Navigation Menu Sign in Appearance 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 HealthcareExcerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.
-
The pull-request event log updated from two force-pushes to three, recording a new force-push of the improve_seed_gen-mash-timing branch from 69edb16 to c81f966 at 14:15 UTC on 13 August 2026.
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 26 lines
the improve_seed_gen-mash-timing branch -2 times, most recently -from -0fb57c0 to -e6058db -Compare -August 13, 2026 11:45 -review: code dedup - save flash space -69edb16 -scgbckbone -force-pushed -the -improve_seed_gen-mash-timing -branch +3 times, most recently from e6058db to 69edb16 Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page. +review: code dedup - save flash space +c81f966 +scgbckbone +force-pushed +the +improve_seed_gen-mash-timing +branch +from +69edb16 to +c81f966 +Compare +August 13, 2026 14:15 This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters Show hidden charactersExtracted 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 servicesExcerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.
-
The pull request gained an eighth commit and a new author comment responding to review feedback, explaining why timing resolution, set-size crediting and API scope were kept as-is while unifying dice, coin and mash collectors and their on-screen strings.
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 58 lines
Improve seed generation - mash timing with microsecond-resolution - #713 #713 Open -scgbckbone wants to merge 7 commits into +scgbckbone wants to merge 8 commits into Coldcard:masterColdcard/firmware:masterfrom scgbckbone:improve_seed_gen-mash-timingscgbckbone/firmware:improve_seed_gen-mash-timingCopy head branch name to clipboard -ConversationCommits7 (7)ChecksFiles changed +ConversationCommits8 (8)ChecksFiles changed Open Improve seed generation - mash timing with microsecond-resolution#713 -scgbckbone wants to merge 7 commits into +scgbckbone wants to merge 8 commits into Coldcard:masterColdcard/firmware:masterfrom scgbckbone:improve_seed_gen-mash-timingscgbckbone/firmware:improve_seed_gen-mash-timingCopy head branch name to clipboard Conversation but don't try to be precise about key-gaps, just add samples from the h/w counter in response to key edges events for example, when in 'mosh mode', add samples to a list as edge event happen; pull that entropy out at higher level then we wouldn't need to change the API so much => less bugs +All reactions +Sorry, something went wrong. +Uh oh! +There was an error while loading. Please reload this page. +scgbckbone +force-pushed +the +improve_seed_gen-mash-timing +branch +2 times, most recently +from +0fb57c0 to +e6058db +Compare +August 13, 2026 11:45 +review: code dedup - save flash space +69edb16 +scgbckbone +force-pushed +the +improve_seed_gen-mash-timing +branch +from +e6058db to +69edb16 +Compare +August 13, 2026 12:00 +scgbckbone +commented +Aug 13, 2026 +Copy link +Copy Markdown +Collaborator +Author +My thoughts: +* dice / mosh and coin flips are all the same thing: you are just pressing 1-6 vs. any vs. 1-2/h/t or something +* IMHO unify the UX for all of them, and still force them into it +* we should look at number of unique values received, and assume the entropy credit is based on that set size: so if they press a/b/b/b/b/b/a ... that gets credit as 6 samples of 1 bit of entropy +* that generalizes what we would show as contribution to entropy +* naturally handles the "just pressing 7 key 50 times" problem.. since samples from a set of size 1 add no entropy +* intra-key times need not be so precisely measured, I would recommend starting a hardware timer at max speed +* it will be 16 bit limited, and also maybe only use 12 lower bits [depending on what the hardware can do as a max speed vs. edge times of key events] +* but don't try to be precise about key-gaps, just add samples from the h/w counter in response to key edges events +* for example, when in 'mosh mode', add samples to a list as edge event happen; pull that entropy out at higher level +* then we wouldn't need to change the API so much => less bugs +Done (69edb16): +• collectors deduped: dice/coin share one collector driven by a data table; mash keeps its own, its entropy is timing not symbols +• menu/story/screen strings unified in the same table, net -40 lines +Leaving as-is: +• max-speed hw timer / lower 12 bits: we already latch a hw timer tick in a hard GPIO irq at the edge, before debounce. Todd's push-button rng estimates 4-5 bits/press at 50kHz sampling - we sample at 1us and credit only 1 bit/press, the article's own "certainly at least one bit" floor. more resolution wouldnt change the credit +• set-size crediting: key mash credits timing only, zero entropy for key choice (todd model), so set size is irrelevant here - hitting one button repeatedly is fine. and for dice/coin the bias checks stay: set-size alone misses skew (a/a/a/b still earns full credit under that model) +• narrower api: already contained - get()/get_nowait() unchanged, only mash sees timestamps All reactions Sorry, something went wrong. Uh oh!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 servicesExcerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.
-
A new comment from doc-hex proposed unifying dice, mosh and coin-flip UX, crediting entropy by the set size of unique values received, and using a hardware timer at maximum speed sampled on key-edge events rather than precise key-gap timing. GitHub loading-error chrome and the participant count also changed.
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 23 lines
rng: verify libngu bytes path reaches hardware driver #700 Open +doc-hex +commented +Aug 12, 2026 +Copy link +Copy Markdown +Contributor +My thoughts: +dice / mosh and coin flips are all the same thing: you are just pressing 1-6 vs. any vs. 1-2/h/t or something +IMHO unify the UX for all of them, and still force them into it +we should look at number of unique values received, and assume the entropy credit is based on that set size: so if they press a/b/b/b/b/b/a ... that gets credit as 6 samples of 1 bit of entropy +that generalizes what we would show as contribution to entropy +naturally handles the "just pressing 7 key 50 times" problem.. since samples from a set of size 1 add no entropy +intra-key times need not be so precisely measured, I would recommend starting a hardware timer at max speed +it will be 16 bit limited, and also maybe only use 12 lower bits [depending on what the hardware can do as a max speed vs. edge times of key events] +but don't try to be precise about key-gaps, just add samples from the h/w counter in response to key edges events +for example, when in 'mosh mode', add samples to a list as edge event happen; pull that entropy out at higher level +then we wouldn't need to change the API so much => less bugs +All reactions +Sorry, something went wrong. +Uh oh! +There was an error while loading. Please reload this page. This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters Show hidden characters Successfully merging this pull request may close these issues. Uh oh! There was an error while loading. Please reload this page. -1 participant +2 participants Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later. Footer © 2026 GitHub, Inc.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 servicesExcerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.
-
The branch was force-pushed to commit 11d8130 with a five-commit series, and the conversation gained cross-references to PR #691 and #700 plus an author self-review comment.
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 93 lines
There was an error while loading. Please reload this page. All reactions scgbckbone -added 7 commits +added 2 commits August 5, 2026 15:35 Mix secure element entropy into seed generation f460ce3 reseed with full 32 bytes of digest from SE1/SE2 entropy sources d16d47b -Require external entropy for all new master seed wallets - with new o… -… -9cf5e44 -…ptions dice/coin/mash -Warn before dice-only seed generation -28fcd74 -external entropy required for CCC key and temporary seeds -41aace3 -Bump libngu: SHA-256 Hash-DRBG replaces Yasmarang -b0996f6 -exclude schnorr/musig from libngu to save flash space; add adition ma… -… -e9ca0db -…cro NGU_STM32_EXTERNAL_RNG_GET scgbckbone commented Aug 7, 2026 Improve seed gen & require external entropy for each new wallet #707 Closed +scgbckbone +force-pushed +the +improve_seed_gen-mash-timing +branch +3 times, most recently +from +4a793cd to +401ad72 +Compare +August 11, 2026 12:24 +scgbckbone +mentioned this pull request +Aug 11, 2026 +fix: feed full SE digest to PRNG reseed (drop 32-bit truncation) +#691 +Draft +scgbckbone +added 5 commits +August 11, 2026 15:42 +Require external entropy for all new master seed wallets - with new o… +… +4f58482 +…ptions dice/coin/mash +Warn before dice-only seed generation +d8f73c1 +external entropy required for CCC key and temporary seeds +62a5028 +Bump libngu: SHA-256 Hash-DRBG replaces Yasmarang +6a55baf +exclude schnorr/musig from libngu to save flash space; add adition ma… +… +11d8130 +…cro NGU_STM32_EXTERNAL_RNG_GET; disable threads for unix port +scgbckbone +force-pushed +the +improve_seed_gen-mash-timing +branch +from +401ad72 to +11d8130 +Compare +August 11, 2026 13:43 +scgbckbone +commented +Aug 11, 2026 +View reviewed changes +scgbckbone +left a comment +Copy link +Copy Markdown +Collaborator +Author +There was a problem hiding this comment. +Choose a reason for hiding this comment +The reason will be displayed to describe this comment to others. Learn more. +Choose a reason +Spam +Abuse +Off Topic +Outdated +Duplicate +Resolved +Low Quality +Hide comment +OK by KIMI3 +Sorry, something went wrong. +Uh oh! +There was an error while loading. Please reload this page. +All reactions +scgbckbone +mentioned this pull request +Aug 11, 2026 +rng: verify libngu bytes path reaches hardware driver +#700 +Open This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters Show hidden charactersExtracted 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 servicesExcerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.
-
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
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 servicesExcerpt 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/'.
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.
Compare the screenshot or a quotation against the original while it is available.