KS
← All projectsKeystone

Keystone 3 firmware

Open-source device firmware for Keystone 3 hardware wallets.

BitcoinHardware walletsNormal
Repository coverage

532 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

107security candidates287second-pass queue178AI analyses
116commits · 30 days
155commits · 60 days
272commits · 180 days
532commits · 365 days
Backfill bands
Aug 5 → Feb 6260 seen14 candidatesComplete
Feb 6 → Jun 6117 seen7 candidatesComplete
Jun 6 → Jul 639 seen4 candidatesComplete
Jul 6 → Aug 5115 seen4 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

41/100 average clarity
35Strong · 80–100
64Adequate · 60–79
201Thin · 40–59
232Opaque · 0–39
37security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Adam Tucker931134163
aaron3046148
ww35126871755161026
soralit1143346048
willwang1522025
John Boyd622088
Qkin-Keystone26113036
qkin12110050
Greg Pfeil411071
Daira-Emma Hopwood211085
bianminyan4500032
stone wang301038
Analysis record

Published AI watches

Last scanned 38 minutes ago

Informational 19 AI analysisMessage 85 · Strong
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

fix(simulator): return password error on PIN mismatch in SimulatorLoadAccountSecret

This commit fixes a bug in the firmware's simulator (a software stand-in used for testing, not the real hardware wallet). When checking a stored account password/PIN, the simulator was accidentally returning 'success' even when the passwor…

Incorrect success return on authentication failure in simulator-only codeMismatch between simulator and real-device authentication error semanticsFunctional regression in multi-account PIN creation in simulator builds
6bec6930by soralit+4−11 file
No security note in commit
Informational 12 AI analysisMessage 47 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

chore: remove implementation plan

This commit only deletes a planning document from the repository's docs folder. No firmware code, build scripts, or cryptographic logic were changed. The deleted file described a previously completed security-hardening task about removing …

Deleted document references a prior security-hardening task (issue #2255 / PRNG fallback removal)No source-code or build-system changes in the diff
4620fe94by ww3512687+0−1041 file
No security note in commit
Moderate 64 AI analysisMessage 80 · Strong
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

fix: remove insecure PRNG fallback

This commit removes a weak, predictable random-number generator that was bundled as a backup inside the firmware's SLIP-39 code. Previously, if the device's proper hardware random source was accidentally left out of a build, the firmware c…

Removal of deterministic LCG PRNG (random32)Removal of weak-symbol random_buffer fallbackRemoval of unused random helper APIs
17c78e30by ww3512687+108−693 files
Vendor flagged security relevance
Informational 10 AI analysisMessage 40 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

chore: update ci

This commit is described as a routine CI (continuous integration) update with only one line changed in a release-related file. No code changes affecting wallet security, cryptography, or user funds are visible, and no security relevance is…

39cfff13by soralit+1−11 file
No security note in commit
Moderate 63 AI analysisMessage 57 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

fix: regular AI code review and fix

This is a large, routine code-quality and hardening patch for the Keystone 3 hardware wallet firmware. It tightens how transactions are parsed and displayed for several cryptocurrencies (Arweave, Avalanche, Bitcoin, Cosmos, Ethereum, Solan…

Arweave: duplicate required tags now rejected, malformed/trailing Avro data now rejectedArweave: DataItem tag count mismatch now rejectedAvalanche: trailing transaction bytes now rejected via parsed_size checks
e2c0ef31by soralit+3998−142676 files
No security note in commit
Informational 15 AI analysisMessage 47 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

chore: upgrade rust version

This commit upgrades the Rust compiler toolchain from one nightly version to a newer one and adjusts code to keep the project building and tests passing. It does not fix a known security bug or change how user funds are protected. Most of …

82a48133by soralit+511−1321 files
No security note in commit
Low 36 AI analysisMessage 28 · Opaque
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

support sol cli

This commit adds Solana CLI support to the Keystone 3 hardware wallet firmware. It introduces a new USB command that lets a connected computer request public keys for specific Solana derivation paths, and it reworks how USB responses are s…

New USB command exposes public-key export for a specific coin type and derivation pathAdded NULL/empty checks before returning generated UR data and before using cached passwordMoved several UR result sends from synchronous to asynchronous (task-queue based) dispatch
77833f49by ww3512687+282−2016 files
No security note in commit
Informational 17 AI analysisMessage 68 · Adequate
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

Preserve Zcash account firmware version (#37)

This commit is a small, non-security code change. It updates a Zcash wallet test to verify that the firmware version string is preserved when account data is encoded and decoded, and it switches two Rust library dependencies from the publi…

Dependency source changed from crates.io to a third-party Git repository (valargroup/keystone-sdk-rust)No mention of vulnerability, CVE, security fix, or researcher attribution in commit message or diffChange is limited to a unit test assertion and dependency source pinning
20d7ea2dby Adam+11−73 files
No security note in commit
Low 28 AI analysisMessage 45 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

Preserve PCZT v1 response encoding

This commit changes how the Keystone hardware wallet handles Zcash PCZT (partially-created transaction) files. Previously, after checking and signing a transaction, the device always returned the result in the newer v2 format. Now it remem…

Behavioral change in serialization format selectionNew parsing helper reads wire version from raw bytesTest coverage added for v1 preservation
acf3611aby Adam Tucker+136−245 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

refactor(zcash): use shielded pool display directly

This commit is a minor code cleanup in the Zcash shielded-transaction handling code. It removes temporary variables named `pool_label` and instead uses the existing `pool` value directly when building error messages. There is no change to …

9074e087by Adam Tucker+22−334 files
No security note in commit
Low 37 AI analysisMessage 57 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

fix(zcash): allow transparent-only V6 PCZTs

This commit changes how Keystone's Zcash transaction handling treats version 6 (V6) PCZTs. Previously, all V6 Zcash transactions were rejected in the non-cypherpunk (transparent-only) code path. The patch now allows V6 transactions as long…

Guard relaxation: V6 PCZTs no longer blanket-rejected in transparent-only buildsBoundary enforcement remains for shielded Sapling/Orchard/Ironwood contentUnknown transaction versions still rejected
ba4ecf28by Adam Tucker+127−954 files
No security note in commit
Informational 10 AI analysisMessage 40 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

chore: update ci

This commit is described as a routine CI (Continuous Integration) update with only one line changed in one file. No diff content is available, and there are no verified references suggesting any security relevance. It appears to be a munda…

7f2c4423by soralit+1−11 file
No security note in commit
Informational 14 AI analysisMessage 62 · Adequate
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

refactor(zcash): simplify unsupported PCZT helpers

This is a simple code cleanup: three internal helper functions in the Zcash PCZT handling code are renamed to remove the word 'legacy' from their names. The actual behavior and security checks stay exactly the same. There is no functional …

0f0dc78aby Adam Tucker+6−63 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

refactor(zcash): display shielded pool names

This commit is a small code cleanup in the Zcash transaction handling code. It replaces a custom `label()` method on the `ShieldedPool` type with Rust's standard `Display` trait, so the pool name prints the same way in error messages. Ther…

83ac1e21by Adam Tucker+16−194 files
No security note in commit
Low 42 AI analysisMessage 62 · Adequate
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

fix(zcash): defer checked batch cleanup after signing

This patch changes when a Zcash batch signing screen frees a sensitive internal data structure. Instead of destroying the data immediately when the page is cleared, it now schedules the cleanup to run after the signing operation has finish…

Use-after-free / premature-free risk in cryptographic signing pathAsync deferred cleanup introduced to avoid race with FIFO signing taskInline comment explicitly describes security-relevant ordering constraint
3b8995faby Adam Tucker+32−11 file
No security note in commit
Moderate 59 AI analysisMessage 57 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

fix(zcash): size UFVK buffers for terminators

This commit fixes a buffer sizing bug in the Keystone hardware wallet's Zcash support. The code previously treated the maximum string length and the buffer size as the same number, leaving no guaranteed room for the null terminator at the …

Off-by-one buffer sizing for null terminator in Zcash UFVK handlingUse of string-length constant instead of buffer-size constant in strcpy_s and memset_s callsInconsistent buffer declarations across account manager and GUI code
5f158dd3by Adam Tucker+14−136 files
No security note in commit
Low 35 AI analysisMessage 45 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

Release Zcash batch review widgets before signing

This commit fixes a potential memory/resource issue in the Zcash batch signing flow on the Keystone 3 hardware wallet. Before opening the signature view, the code now explicitly frees (destroys) the on-screen review widgets. Without this c…

Resource cleanup before sensitive signing operationUI object destruction to prevent memory pressure during cryptographic signing flowPotential UI state inconsistency mitigated by explicit widget release
2982da56by Adam Tucker+4−01 file
No security note in commit
Low 30 AI analysisMessage 50 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

fix the verifying ps hang on wrong password in btc only multi-sig

This commit fixes a user-interface bug in the Bitcoin-only multi-sig wallet screens of the Keystone 3 hardware wallet firmware. If a user entered the wrong device-unlock password while the lock screen was shown over these multi-sig views, …

UI lock-up / denial of usability on wrong passwordIncorrect routing of password verification result between overlapping viewsMissing handling for SIG_LOCK_VIEW_SCREEN_GO_HOME_PASS in password error path
2037a16aby aaron+20−02 files
No security note in commit
Moderate 64 AI analysisMessage 50 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

fix the issue of uvfk not changed if changed password

This commit fixes a bug in the Keystone 3 hardware wallet's Zcash support: when a user changed their login password, the encrypted Zcash 'unified full viewing key' (UFVK) was not re-encrypted with the new password. That meant the stored UF…

Credential/key material desynchronization after password changeZcash UFVK ciphertext keyed by login passwordAutomatic migration/recovery of stale encrypted key material
6d8e2d9dby aaron+137−464 files
No security note in commit
Informational 15 AI analysisMessage 40 · Thin
KS KeystoneKeystone 3 firmware BitcoinHardware wallets

feat: modify Lace Wallet

This commit is a routine user-interface update for the Lace wallet integration. It moves the Lace wallet icon into the 'Bitcoin Wallets' submenu, removes a separate Lace entry that previously showed both Bitcoin and Cardano support, and no…

468209b6by soralit+4−81 file
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

AI review queuedchore: update uiby soralit · 3bb83d97 · Jun 16, 2026 · 5 filesMessage 40 · ThinLow 28Details
Commit message · soralit

chore: update ui

40/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 28/100

This commit refactors how TON (The Open Network) transactions are displayed on the Keystone 3 hardware wallet. Previously, the code assumed every transaction had exactly one message. Now it supports multiple messages, showing each one separately on screen. The change also fixes a small bug where a proof-result pointer was incorrectly cleared, and adds a safety check when parsing contract data JSON. There is no direct evidence in the commit of a security vulnerability being fixed, but supporting multi-message transactions is a meaningful hardening improvement because a malicious or unusual transaction with several messages could previously have been misrepresented or mishandled.

Lower-priorityfix: sui checkby soralit · 7842e432 · Jun 15, 2026 · 1 fileMessage 40 · ThinTriage 0Details
Commit message · soralit

fix: sui check

40/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope! No meaningful explanatory body
AI review queuedadd 2.4.6 changelogby bianminyan · 6a5d7075 · Jun 15, 2026 · 2 filesMessage 38 · OpaqueTriage 0Details
Commit message · bianminyan

add 2.4.6 changelog

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
Lower-priorityfix: move the babylon context hash call UI only in web3 buildby aaron · 78830db5 · Jun 15, 2026 · 3 filesMessage 62 · AdequateTriage 0Details
Commit message · aaron

fix: move the babylon context hash call UI only in web3 build

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI review queuedfeat: support babylon derive context hashby aaron · 78411428 · Jun 15, 2026 · 30 filesMessage 57 · ThinLow 37Details
Commit message · aaron

feat: support babylon derive context hash

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Low 37/100

This commit adds a new feature to the Keystone 3 hardware wallet that lets approved Bitcoin apps (like Babylon) request a special cryptographic hash derived from the wallet's seed. The wallet shows the user the connected Bitcoin address and, after approval, returns a 32-byte hash. The code includes checks to limit which apps can ask, which Bitcoin networks are accepted, and which derivation paths can be used. It also adds a testnet display toggle for Bitcoin receive addresses. There is no direct evidence in the commit that this fixes a known security vulnerability; it appears to be a feature addition.

Lower-prioritychore: update depby soralit · dc69cfc7 · May 26, 2026 · 3 filesMessage 40 · ThinTriage 0Details
Commit message · soralit

chore: update dep

40/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope! No meaningful explanatory body
Lower-prioritydocs: update changelog for v2.4.4by bianminyan · 6e77f429 · May 25, 2026 · 3 filesMessage 57 · ThinTriage 0Details
Commit message · bianminyan

docs: update changelog for v2.4.4

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Security candidateleap sunsetby ww3512687 · 920e9830 · May 22, 2026 · 23 filesMessage 0 · OpaqueInformational 15Details
Commit message · ww3512687

leap sunset

0/100 · OpaqueMessage clarity
! Very short subject! Too few words to establish purpose! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Informational 15/100

This commit removes support for the 'Leap' wallet from the Keystone 3 firmware. It deletes the Leap wallet icon and asset, removes Leap-related text strings from Chinese, Japanese, and Korean font files, and updates the Rust dependency versions for the UR (Uniform Resources) parsing libraries used by the firmware. There is no indication of a security fix or vulnerability being patched.

AI review queuedfix(ton): update bitstream io usageby soralit · e49d48df · May 22, 2026 · 8 filesMessage 57 · ThinTriage 7Details
Commit message · soralit

fix(ton): update bitstream io usage

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
Lower-priorityfix: ignore disabled assets in manage countby soralit · 14ac16f7 · May 22, 2026 · 2 filesMessage 57 · ThinTriage 0Details
Commit message · soralit

fix: ignore disabled assets in manage count

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Security candidatefix: regenerate missing zcash public infoby soralit · 91f2a356 · May 20, 2026 · 1 fileMessage 57 · ThinLow 42Details
Commit message · soralit

fix: regenerate missing zcash public info

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Low 42/100

This commit adds a safety check for the Keystone 3 hardware wallet's Zcash account setup. If the stored Zcash public key information is missing or not a valid hex string, the wallet now regenerates it. This prevents the wallet from trying to use corrupted or incomplete Zcash key data, which could cause errors or display wrong addresses. It is a defensive fix, not a clear exploit patch.

Security candidatefeat: defaultly use 20 words for web3 and bitcoin firmwareby soralit · 001c946b · May 20, 2026 · 1 fileMessage 62 · AdequateInformational 16Details
Commit message · soralit

feat: defaultly use 20 words for web3 and bitcoin firmware

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 16/100

This commit changes the default backup seed phrase length for the standard firmware from 33 words to 20 words. SLIP39 seed phrases can use different word counts, and 20 words still provides substantial entropy. There is no direct evidence in the commit or supplied references that this change fixes a security vulnerability; it appears to be a product/usability change.

Lower-priorityfeat: modify zcash uiby soralit · bdee1049 · May 20, 2026 · 4 filesMessage 40 · ThinTriage 0Details
Commit message · soralit

feat: modify zcash ui

40/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope! No meaningful explanatory body
Security candidatefix: update memory management in async tasks and GUI auth code handlingby ww3512687 · ec2eb2b8 · May 18, 2026 · 4 filesMessage 67 · AdequateModerate 59Details
Commit message · ww3512687

fix: update memory management in async tasks and GUI auth code handling

67/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Moderate 59/100

This firmware update fixes two categories of bugs in a cryptocurrency hardware wallet's background task system and web-authentication code display. First, it adds a flag so the background task knows whether it allocated a memory buffer itself (and must free it) or was given a pointer by the caller (which it must not free). Before this fix, the task could free memory it did not own, leading to crashes or corrupted memory. Second, it hardens the web-authentication code calculation by checking whether memory allocation succeeded, clearing the private RSA key from memory after use, and correctly freeing the generated auth code string. It also removes two lines that incorrectly set freed pointers to NULL inside a cleanup function. The changes are defensive and reduce the risk of memory corruption and sensitive key material lingering in RAM, but the commit message frames them as generic fixes rather than as a security advisory.

Lower-priorityfix(zcash): AES tests must use non-trivial seedby John Boyd · db18fb88 · Apr 25, 2026 · 1 fileMessage 90 · StrongTriage 0Details
Commit message · John Boyd

fix(zcash): AES tests must use non-trivial seed

The ensure_non_trivial_seed check rejects all-zeros seeds, which broke
these tests. Use a valid seed and make the decrypt test a proper
round-trip instead of relying on hardcoded ciphertext.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Security candidatefeat(zcash): enable Zcash for SLIP 39 wallets with 33-word sharesby John Boyd · 2729141b · Apr 25, 2026 · 9 filesMessage 100 · StrongLow 29Details
Commit message · John Boyd

feat(zcash): enable Zcash for SLIP 39 wallets with 33-word shares

Previously Zcash was disabled for all SLIP 39 wallets, due to an
incompatibility with the 20-word scheme. This commit relaxes that
restriction, allowing Zcash use on SLIP 39 wallets when using 33-word
shares.

Zcash requires 256-bit seed entropy to avoid the seed becoming a
security bottleneck, potentially enabling multi-target attacks below
2^125 operations. (The same argument applies to BIP 32-like hierarchical
key derivation in general —preserving full entropy in the chain code
and public key at any tree node requires 256 bits to start with— but
for other coins this has not been a specified requirement, or depended
on in their security analysis.)

SLIP 39 requires all implementations to support both 128-bit and 256-bit
master secrets, so compliant software should accept 33-word shares.

- Add IsZcashSupportedForCurrentMnemonic() to centralize entropy check
- Use conditional checks in both CYPHERPUNK_VERSION and WEB3_VERSION
(home widget, connect wallet coin list, public key derivation in
AccountPublicSavePublicInfo and TempAccountPublicInfo)
- Call SetupZcashCache and SetupZcashSFP in CreateNewSlip39Account for
supported wallets
- Update Rust error messages to describe the actual requirement
- Show notice in asset manager when 20-word shares lack Zcash support
- Fix bug in AccountPublicHomeCoinGet where the "manage" JSON key was
omitted (rather than set to false) for Zcash when the mnemonic type
was not BIP 39

Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>
Co-authored-by: Claude Opus 4.6/4.7 (1M context) <noreply@anthropic.com>

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Names security-relevant behavior explicitly
Why it was queued
explicit security languageentropy or randomnesssecret or key materialcryptography-sensitive pathsigning or wallet path
AI analysis · Low 29/100

This commit changes how the Keystone hardware wallet enables Zcash for SLIP 39 wallets. Previously, Zcash was completely disabled for all SLIP 39 wallets. Now it is allowed when the SLIP 39 shares are 33 words long (256-bit entropy), but still disabled for 20-word shares (128-bit entropy). The change is driven by a cryptographic requirement: Zcash's security analysis assumes the wallet seed has at least 256 bits of entropy. The patch also fixes a small UI bug where the 'manage' option for Zcash was missing entirely for non-BIP39 mnemonics, instead of being shown as disabled.

Lower-priorityfix(gui): guard checkbox handlers against clicks on non-checkbox childrenby Daira-Emma Hopwood · 4fc2407e · Apr 25, 2026 · 2 filesMessage 85 · StrongTriage 0Details
Commit message · Daira-Emma Hopwood

fix(gui): guard checkbox handlers against clicks on non-checkbox children

SelectCheckBoxHandler in gui_create_share_widgets.c and
gui_single_phrase_widgets.c could be called with a non-checkbox
target (e.g. a label or other child of the hint box). Add a type
check to return early if the clicked object is not a checkbox.

Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Lower-priorityfix(zcash): error handling in setup functionsby John Boyd · 8a4f48ed · Apr 25, 2026 · 1 fileMessage 80 · StrongTriage 0Details
Commit message · John Boyd

fix(zcash): error handling in setup functions

- Check return values of SetupZcashCache/SetupZcashSFP and
AccountPublicInfoSwitch in CreateNewAccount and VerifyPasswordAndLogin
- Fix seed buffer leaks in SetupZcashSFP and SetupZcashCache error paths
- Fix wrong variable (response -> responseSFP) in SetupZcashCache
SFP error path
- Free response objects before returning on error
- Clear UFVK buffer after use
- Check for NULL encrypted UFVK before decryption

Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Security candidatefeat(shamir): default to 33-word shares with coin-support descriptionsby John Boyd · 744ef606 · Apr 25, 2026 · 3 filesMessage 85 · StrongInformational 20Details
Commit message · John Boyd

feat(shamir): default to 33-word shares with coin-support descriptions

Change the default Shamir share word count from 20 to 33 words
(SLIP39_DEFAULT_MNEMONIC_WORDS), since 33-word shares support all
coins including Zcash.

Add descriptions to the word-count picker explaining which coins each
option supports ("Supports most coins" vs "Also supports Zcash"), with
translations for en, de, es, ja, ko, ru, and zh_CN. The translations
were partially machine-assisted and need human review: @daira knows
German and some Spanish but no Russian, Japanese, Chinese, or Korean;
the Japanese, Korean, Russian, and Simplified Chinese translations
were by Claude. All translations were checked for consistency with
existing translations in their use of the technical terms 'wallet',
'coin', 'Shamir share', and 'word'.

Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>
Co-authored-by: Claude Opus 4.6/4.7 (1M context) <noreply@anthropic.com>

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 20/100

This commit changes the default Shamir backup share length from 20 words to 33 words and adds on-screen explanations about which cryptocurrencies each option supports. It is a usability and compatibility improvement, not a security fix or vulnerability. The code also tightens a few display routines so the word count is shown correctly regardless of the selected value.

Security candidatefix(monero): set 'manage' JSON key explicitly when mnemonic type is not BIP 39by Daira-Emma Hopwood · d03cab3e · Apr 25, 2026 · 3 filesMessage 85 · StrongLow 35Details
Commit message · Daira-Emma Hopwood

fix(monero): set 'manage' JSON key explicitly when mnemonic type is not BIP 39

In AccountPublicHomeCoinGet, the "manage" JSON key was omitted (rather
than set to false) for XMR when the mnemonic type was not BIP 39. Set
it explicitly via a new IsMoneroSupportedForCurrentMnemonic() helper,
which centralizes the Monero mnemonic-type check and matches the
pattern of IsZcashSupportedForCurrentMnemonic().

Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>
Co-authored-by: Claude Opus 4.6/4.7 (1M context) <noreply@anthropic.com>

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Low 35/100

This commit fixes a small but meaningful bug in the Keystone 3 hardware wallet's account information output. Previously, when showing details for Monero (XMR), the 'manage' field was completely left out if the wallet's mnemonic type was not BIP 39. Now it is always included and set to false in that case. The change makes the JSON response predictable and consistent, which can help companion apps or users avoid misinterpreting whether the coin can be managed. It is a defensive fix rather than an obvious exploit, but omitting a boolean field could lead a connected app to make unsafe assumptions.

Security candidatefix buildby ww3512687 · 5c6b0014 · Apr 24, 2026 · 1 fileMessage 0 · OpaqueInformational 15Details
Commit message · ww3512687

fix build

0/100 · OpaqueMessage clarity
! Very short subject! Too few words to establish purpose! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit is a straightforward build fix for a firmware configuration file. It adds conditional preprocessor definitions so that different product build variants (Web3, BTC-only, Cypherpunk) each define a required constant, LEGACY_USB_PAD_LEN, with values of either 1 or 2. Without this change, some build configurations would fail because the constant was missing. There is no security-relevant change in behavior visible in the diff.

Lower-priorityfix: btc multisig styleby soralit · 3ae41290 · Apr 23, 2026 · 1 fileMessage 40 · ThinTriage 0Details
Commit message · soralit

fix: btc multisig style

40/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope! No meaningful explanatory body
Security candidatefix buildby ww3512687 · 6917368e · Apr 23, 2026 · 1 fileMessage 0 · OpaqueInformational 15Details
Commit message · ww3512687

fix build

0/100 · OpaqueMessage clarity
! Very short subject! Too few words to establish purpose! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
boot or update path
AI analysis · Informational 15/100

This is a one-line build fix that changes a default padding length constant from 1 to 2 in a legacy USB web-update feature. There is no indication of a security problem, and the change itself does not introduce or fix any vulnerability visible in the diff.

Lower-priorityfix avax from error message displayby ww3512687 · 13033fe4 · Apr 23, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · ww3512687

fix avax from error message display

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritydocs: update changelog for v2.4.2by bianminyan · 88104548 · Apr 21, 2026 · 2 filesMessage 57 · ThinTriage 0Details
Commit message · bianminyan

docs: update changelog for v2.4.2

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount