FD
← All projectsFoundation

Passport firmware

Firmware for Foundation Passport Bitcoin signing devices.

BitcoinHardware walletsNormal
Repository coverage

133 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.

43security candidates46second-pass queue123AI analyses
33commits · 30 days
53commits · 60 days
80commits · 180 days
133commits · 365 days
Backfill bands
Aug 5 → Feb 612 seen0 candidatesComplete
Feb 6 → Jun 659 seen3 candidatesComplete
Jun 6 → Jul 64 seen0 candidatesComplete
Jul 6 → Aug 52 seen0 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.

54/100 average clarity
6Strong · 80–100
38Adequate · 60–79
77Thin · 40–59
12Opaque · 0–39
4security 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.
Matt Gleason651457351
Jacksper1314714367
Jack331731150
Jean-Pierre De Jesus DIAZ828061
mjg-foundation525065
Ken Carpenter313048
dependabot[bot]505076
Analysis record

Published AI watches

Last scanned 31 minutes ago

Informational 24 AI analysisMessage 73 · Adequate
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #665 from Foundation-Devices/casa-crypto-account-export

This commit adds a new feature to Foundation's Passport hardware wallet that exports two cryptographic public keys for Casa wallet registration: the master extended public key and a separate Casa-specific key derived at path m/45'. The key…

New key-export surface: two public keys (master + m/45' derived) are now exported togetherSensitive material is public-key/chain-code only; no private keys are exportedExport channels remain QR and microSD, unchanged from prior Casa export behavior
5e499107by mjg-foundation+291−315 files
No security note in commit
Low 25 AI analysisMessage 73 · Adequate
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #669 from Foundation-Devices/add-native-unchained-connect-wallet

This commit adds support for the Unchained wallet to the Passport hardware wallet. Most of the change is normal feature code, but it also introduces a new way to feed already-encoded data into the QR encoder and tightens up the encoder so …

New unsafe FFI function `ur_encoder_start_raw` added with documented safety preconditionsUR type string is validated (length, charset, UTF-8) before use in encoderEncoder now tracks a `started` flag and returns empty output if not started, reducing use-after-free/misuse risk
26bd36d5by mjg-foundation+426−1812 files
No security note in commit
Moderate 55 AI analysisMessage 78 · Adequate
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #655 from Foundation-Devices/sft-7320-entropy-hardening

This firmware update hardens the way Passport generates random numbers. Previously, a failing or stuck hardware random-number generator could silently produce weak or repeated values, which is dangerous for creating secret keys. The patch …

Fail-closed RNG error handling: persistent seed/clock errors now trigger a fatal handler instead of returning potentially weak valuesST-recommended seed-error recovery (RM0433 section 34.3.7): clear SEIS and flush 12 discard words, with bounded retry attemptsDuplicate and zero-value rejection in rng_try_sample to avoid returning stuck or invalid RNG output
0f1a5325by mjg-foundation+150−379 files
Vendor flagged security relevance
High 71 AI analysisMessage 83 · Strong
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #675 from Foundation-Devices/fix/verify-change-before-review

This firmware update moves the verification of Bitcoin 'change' addresses to happen before the user reviews the transaction on screen. Previously, the device checked whether change outputs truly belonged to the wallet only after the user h…

Reorders security-critical validation to occur before user approvalValidates change-output ownership before the review screen hides those outputsPrevents transaction signing if change derivation does not match the PSBT
1fea63c8by Jacksper13+174−454 files
Vendor flagged security relevance
Low 29 AI analysisMessage 83 · Strong
FD FoundationPassport firmware BitcoinHardware wallets

SFT-8098: skip change verification for transactions without change

This commit changes how the Passport hardware wallet reviews Bitcoin transactions that have no 'change' output. Previously, the wallet would always run a change-verification step that opens the secure key store, even when there was no chan…

Change reduces unnecessary access to the key store during transaction reviewNo cryptographic check is removed for transactions that actually contain changeUI label changed to more accurately describe the operation being performed
3df93748by Jacksper13+36−112 files
No security note in commit
Moderate 59 AI analysisMessage 83 · Strong
FD FoundationPassport firmware BitcoinHardware wallets

SFT-8098: complete change verification before transaction review

This commit moves a safety check earlier in the process of approving a Bitcoin transaction on the Passport hardware wallet. Previously, the wallet verified that 'change' outputs (money going back to your own wallet) truly belonged to you o…

Change-address verification moved from post-approval signing stage to pre-review stagePSBT change output ownership now proved before user is shown transaction detailsSensitive key derivation context closed before transaction review is displayed
fb88001cby Jacksper13+150−464 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 58 · Thin
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #673 from Foundation-Devices/SFT-7945-add-pytest-to-devshell

This commit is a routine development tooling and cleanup change. It adds the Pytest testing framework to the project's Nix development shell, fixes a test runner path, adds a GitHub Actions workflow to run simulator tests automatically, an…

d8ee1164by mjg-foundation+101−25825 files
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #648 from Foundation-Devices/dependabot-host-tooling-hygiene

This commit updates the Python Pillow image-processing library used in host-side developer tooling from version 8.x to 12.3.x and requires Python 3.10 or newer. Pillow 8.x is known to have many publicly disclosed security vulnerabilities, …

Dependency version bump of a library with known historical vulnerabilities (Pillow 8.x)Constraint now requires Python 3.10+ alongside the newer Pillow major versionChange is limited to host tooling files (pyproject.toml, setup.py, requirements-optional.txt, tox.ini, DEVELOPMENT.md)
d6c05830by Jacksper13+6−55 files
No security note in commit
Informational 15 AI analysisMessage 58 · Thin
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #649 from Foundation-Devices/bitcoin-safe-wallet-flow

This commit adds support for a new Bitcoin software wallet called 'Bitcoin Safe' to the Passport hardware wallet firmware. It is a straightforward feature addition that registers the wallet in the firmware's list of supported software wall…

9f1e36b0by Jacksper13+27−03 files
No security note in commit
Moderate 62 AI analysisMessage 58 · Thin
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #653 from Foundation-Devices/show-op-return-output-amount

This update changes how the Passport hardware wallet displays Bitcoin transaction outputs that carry data (OP_RETURN outputs). Previously, only the embedded message was shown. Now the device also shows the amount of bitcoin assigned to tha…

UI spoofing hardening: user-controlled OP_RETURN data is now escaped before renderingNew display of OP_RETURN output amount reduces risk of hidden value leakageUnit test includes an attacker-controlled message simulating fake Amount/Destination headings
433c4a20by Jacksper13+79−33 files
No security note in commit
Moderate 59 AI analysisMessage 78 · Adequate
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #660 from Foundation-Devices/fix/legacy-settings-overflow

This commit fixes a bug in how the Passport hardware wallet saves its settings to internal flash memory. Previously, the code checked whether the settings data was too large only after it had already picked and erased a flash storage slot.…

Buffer size validation moved before flash write/erase operationsReplaced broken 'assert false' crash path with explicit ValueErrorAdded unit test for oversized settings rejection
180e183dby Jacksper13+34−113 files
No security note in commit
Low 33 AI analysisMessage 78 · Adequate
FD FoundationPassport firmware BitcoinHardware wallets

tooling: constrain tox Pillow dependency (SFT-7281)

This commit tightens a software dependency used only in testing/development tooling. It prevents an automated test environment from installing old, known-vulnerable versions of the Pillow image library when running under Python 3.10. The c…

Dependency constraint added to block known-vulnerable Pillow versionsCommit message acknowledges prior path could install an older vulnerable releaseChange is in Trezor external module tooling, not Passport firmware runtime
56799183by Jack+2−12 files
Vendor flagged security relevance
High 73 AI analysisMessage 58 · Thin
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #662 from Foundation-Devices/fix/unverified-psbt-fees

This firmware update fixes a security issue in the Passport hardware wallet's handling of Bitcoin transaction fees. Previously, when a transaction file (PSBT) only provided a claimed input amount without the full previous transaction to pr…

UI now displays 'Unverified' instead of a numeric network fee when input amounts cannot be independently verifiedNew assertion prevents witness/non-witness UTXO value or scriptPubKey mismatch for the same inputHistory-cache amount updates are deferred until after cryptographic proof of input ownership is completed
7b64e920by Jacksper13+336−627 files
Vendor flagged security relevance
Moderate 66 AI analysisMessage 58 · Thin
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #661 from Foundation-Devices/fix/seedqr-validation

This update tightens the checks on SeedQR codes, which are QR codes that encode a wallet's backup seed phrase as numbers. Before, the decoder might accept invalid or oddly-sized numeric strings and either crash or produce an incorrect seed…

Input validation added to seed-import pathOut-of-range BIP-39 word index now rejected explicitlyNon-digit characters rejected before integer conversion
2c41d1c5by Jacksper13+59−63 files
No security note in commit
Informational 18 AI analysisMessage 28 · Opaque
FD FoundationPassport firmware BitcoinHardware wallets

fixed excess delete call

This tiny change removes two variables ('pu' and 'skp') from a Python 'del' cleanup statement in the code that signs Bitcoin transactions. The commit message says it fixes an 'excess delete call.' In Python, deleting a name that does not e…

Change is in a sensitive operation: PSBT signingOriginal code could raise NameError and crash the signing taskNo explicit security claim in commit message or diff
1b2efc8fby Matt Gleason+1−11 file
No security note in commit
Informational 15 AI analysisMessage 18 · Opaque
FD FoundationPassport firmware BitcoinHardware wallets

fixed format

This commit adds a single blank line between two test functions to fix code formatting. It makes no functional changes to the firmware or its tests.

52ade0a1by Matt Gleason+1−01 file
No security note in commit
Moderate 59 AI analysisMessage 58 · Thin
FD FoundationPassport firmware BitcoinHardware wallets

Merge pull request #672 from Foundation-Devices/fix/validate-local-multisig-xpub

This update fixes a validation gap when importing multisig wallets into the Passport hardware wallet. Previously, the device only checked that the public key matched; now it also checks the chain code. Without this check, a tampered extend…

Incomplete cryptographic input validation (public key only, not full xpub)Potential acceptance of tampered extended public keys in multisig wallet importFix adds chain_code equality check alongside existing public_key equality check
b1756906by Jacksper13+95−24 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 60 · Adequate
FD FoundationPassport firmware BitcoinHardware wallets

SFT-7945: test suite working in devshell, removed unused translation

This commit is a routine cleanup and test-infrastructure change. It removes an unused translation system (translation files, imports, and a test), updates linting rules to no longer exclude the now-removed translation folder, and fixes the…

d8353514by Matt Gleason+25−21420 files
No security note in commit
Low 36 AI analysisMessage 45 · Thin
FD FoundationPassport firmware BitcoinHardware wallets

Integrate PSBT fee and amount validation

This commit adds a test fixture flag called witness_utxo to a fake PSBT input object used in unit tests, and documents a changelog entry about marking network fees as 'unverified' when a PSBT input's UTXO data cannot be verified. The actua…

PSBT fee/amount validationunverifiable inputs flagged as unverifiedwitness UTXO handling
409137c9by Jack+2−02 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 45 · Thin
FD FoundationPassport firmware BitcoinHardware wallets

Reuse sensitive values during PSBT validation

This firmware update changes how Passport validates Bitcoin transaction files (PSBTs) before signing. It makes two main improvements: it reuses the wallet's secret seed for fewer key-derivation operations, and it verifies that the claimed …

Deferred and batched sensitive key derivation during PSBT validationAmount-cache update moved after ownership/key-path proofNew assertion to block re-signing already-signed non-multisig inputs
f88420bfby Jack+72−213 files
Vendor flagged security relevance
Repository ledger

Explore captured commits

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

Security candidateValidate SeedQR payloads before word lookupby Jack · 58aa4984 · Aug 10, 2026 · 3 filesMessage 45 · ThinModerate 59Details
Commit message · Jack

Validate SeedQR payloads before word lookup

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
defensive validationseed or entropy path
AI analysis · Moderate 59/100

This commit tightens how Passport firmware decodes SeedQR codes—QR codes that encode a wallet recovery phrase as numbers. Before the fix, the decoder would try to look up BIP-39 words using raw 4-digit indices before confirming the input was valid. The new code first checks that the payload length is a multiple of 4, that the number of words is a supported seed length, that every character is a digit, and that each index is within the valid BIP-39 word range. This prevents malformed or out-of-range SeedQR payloads from being partially processed or causing unexpected behavior during word lookup.

Lower-priorityValidate legacy settings before flash writesby Jack · b122951c · Aug 7, 2026 · 3 filesMessage 45 · ThinTriage 8Details
Commit message · Jack

Validate legacy settings before flash writes

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
defensive validation
Security candidateMerge pull request #651 from Foundation-Devices/firmware-update-validation-hardeningby Jacksper13 · 2e96f0af · Jul 30, 2026 · 1 fileMessage 58 · ThinModerate 61Details
Commit message · Jacksper13

Merge pull request #651 from Foundation-Devices/firmware-update-validation-hardening

Harden firmware update validation

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
defensive validationboot or update pathmerge-commit duplicate discount
AI analysis · Moderate 61/100

This change tightens how Passport's bootloader validates a new firmware update. Previously, if the currently-running firmware failed validation, the bootloader would skip signature checks on the incoming update and jump straight to installing it. The patch moves the signature verification outside that 'only if current firmware is valid' branch, so the new firmware is always signature-checked before installation. It also moves a check about whether the current firmware was user-signed so it is computed earlier. In short: the bootloader now refuses to install unsigned updates even when the existing firmware looks broken.

Security candidatePreserve hardened firmware verification resultby Jack · a6efb276 · Jul 23, 2026 · 1 fileMessage 55 · ThinModerate 57Details
Commit message · Jack

Preserve hardened firmware verification result

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
defensive validationboot or update path
AI analysis · Moderate 57/100

This bootloader patch changes how the result of a security check on the currently-running firmware is stored. Previously, the code immediately converted the secure verification result into a plain true/false boolean. Now it keeps the special secure result value intact and compares it directly later. This is a hardening fix: it reduces the chance that a subtle type-conversion bug or compiler optimization could let a failed firmware check be treated as a pass, which in turn could allow a malicious or corrupted firmware update to proceed.

Security candidateConstrain Pillow tooling compatibilityby Jack · fd359a24 · Jul 23, 2026 · 3 filesMessage 35 · OpaqueInformational 15Details
Commit message · Jack

Constrain Pillow tooling compatibility

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit tightens the allowed versions of a Python image-processing library called Pillow used only in developer tooling. It caps Pillow below version 13 and requires Python 3.10 or newer. There is no indication this fixes a security flaw in the firmware itself; it appears to be a build/maintenance compatibility change.

Security candidateHarden firmware update validationby Jack · b157473c · Jul 23, 2026 · 1 fileMessage 35 · OpaqueModerate 59Details
Commit message · Jack

Harden firmware update validation

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
defensive validationboot or update path
AI analysis · Moderate 59/100

This commit changes how Passport's bootloader checks firmware updates. Previously, if the currently-running firmware failed validation, the bootloader would skip verifying the new update's signature and could install it anyway. Now the new firmware's signature is always verified before installation, even when the current firmware is invalid. This closes a path where a corrupted or attacker-controlled running firmware might be able to load an unsigned or wrongly-signed update.

AI review queuedAdd Bitcoin Safe wallet flowby Jack · 66311050 · Jul 23, 2026 · 3 filesMessage 45 · ThinInformational 15Details
Commit message · Jack

Add Bitcoin Safe wallet flow

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit adds support for a new Bitcoin wallet app called Bitcoin Safe. It is a straightforward feature addition: a new wallet definition file is created and registered in two lists so the Passport device recognizes Bitcoin Safe during setup. There is no bug fix, no change to cryptographic code, and no indication of a security problem.

Security candidateUpdate Pillow constraints for host toolingby Jack · b44793cc · Jul 23, 2026 · 3 filesMessage 45 · ThinLow 27Details
Commit message · Jack

Update Pillow constraints for host tooling

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Low 27/100

This commit updates the required version of the Python imaging library Pillow from 8.x to at least 12.3.0 in the project's host tooling configuration. Pillow 8.x is known to have publicly disclosed security vulnerabilities, so raising the minimum version is a defensive maintenance change. It does not by itself prove the firmware was exploitable, but it removes a risky dependency version from the development/build environment.

Lower-prioritySFT-7182: added coconut wallet to manifest, needs testing on hardwareby Matt Gleason · c84bf29d · Jun 23, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Matt Gleason

SFT-7182: added coconut wallet to manifest, needs testing on hardware

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply adds a new Bitcoin wallet integration file named 'coconut.py' to the firmware build list. It is a one-line manifest change with no visible security implications on its own.

AI review queuedAdd Coconut Wallet single-sig Connect Wallet optionby Jack · 9d60781d · Jun 17, 2026 · 4 filesMessage 73 · AdequateInformational 18Details
Commit message · Jack

Add Coconut Wallet single-sig Connect Wallet option

Add Coconut Wallet (noncelab) to the Connect Wallet flow. It reuses the
generic single-sig JSON export (same payload as Sparrow) over an animated
UR2 QR code: single-sig QR only, no multisig or microSD.

Tag the export with a "model" field set to "passport-core" so Coconut
Wallet can label the imported wallet "Passport Core" (it shows a single
"Passport" connector and names the wallet from this flag). The field is
gated on the wallet config carrying a 'model' key, so all other wallets'
exports are unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This commit adds support for a new Bitcoin wallet app called Coconut Wallet to the Passport hardware device. It lets users export their single-signature wallet setup to Coconut Wallet via an animated QR code, using the same data format already used for Sparrow Wallet. There is no indication of a security bug or fix in the change.

AI review queuedSFT-7133: fixed dangerous change check on all taproot inputsby Matt Gleason · 46efe834 · Jun 11, 2026 · 1 fileMessage 50 · ThinHigh 70Details
Commit message · Matt Gleason

SFT-7133: fixed dangerous change check on all taproot inputs

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · High 70/100

This firmware update fixes a bug in how Passport checks whether a Bitcoin transaction's 'change' output is safe to send back to the user's own wallet. For modern Taproot-style transactions, the device was skipping an important ownership check on inputs. That could let a malicious or crafted PSBT (Partially Signed Bitcoin Transaction) trick the user into treating someone else's coins as their own change, potentially approving a transaction that sends funds to an attacker while the screen says it is just change.

Security candidateSFT-6378: removed more branching from mnemonic decode processby Matt Gleason · d0edb18a · Jun 11, 2026 · 1 fileMessage 50 · ThinLow 47Details
Commit message · Matt Gleason

SFT-6378: removed more branching from mnemonic decode process

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Low 47/100

This commit tweaks the code that converts a user's BIP39 recovery phrase (mnemonic words) into secret bits inside a hardware wallet. The change removes an 'if' branch during word copying so the loop always writes to the same positions, regardless of how long each word is. The stated goal is to make the copy operation take the same amount of time and perform the same memory accesses for every word length, which can help defend against timing and power-analysis side-channel attacks that might otherwise leak information about the recovery phrase.

Security candidateSFT-6378: refined more commentsby Matt Gleason · e58baa89 · May 29, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Matt Gleason

SFT-6378: refined more comments

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Informational 15/100

This commit only rewrites two code comments in a BIP39 mnemonic parser to be shorter and clearer. It does not change any executable code, logic, or behavior. There is no security-relevant change.

Security candidateSFT-6378: improved commentsby Matt Gleason · 42cad0d8 · May 28, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Matt Gleason

SFT-6378: improved comments

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Informational 15/100

This commit only rewrites comments in a source file that handles BIP39 seed phrases. No code logic, buffer sizes, or function behavior were changed. It is a documentation-only cleanup and does not affect security.

Security candidateSFT-6378: responded to more feedback, needs testing and evaluationby Matt Gleason · 42f95ed8 · May 25, 2026 · 1 fileMessage 60 · AdequateModerate 63Details
Commit message · Matt Gleason

SFT-6378: responded to more feedback, needs testing and evaluation

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Moderate 63/100

This commit hardens the code that converts a user's BIP39 recovery phrase (seed words) into secret bits. It fixes a bug where 8-character words were wrongly rejected, makes the loop length independent of the number of words to reduce timing clues, adds bounds checks to prevent reading past the end of the input buffer, and clears sensitive buffers before returning on error. The changes are defensive and reduce side-channel and out-of-bounds risks, but the commit message frames them as feedback responses needing testing, so it is not a finished security fix.

Security candidateSFT-6378: made more parts of mnemonic parsing and fetching constant timeby Matt Gleason · 5a0cc5ed · May 24, 2026 · 3 filesMessage 50 · ThinModerate 59Details
Commit message · Matt Gleason

SFT-6378: made more parts of mnemonic parsing and fetching constant time

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
constant-time or timing behaviorcryptography-sensitive pathboot or update path
AI analysis · Moderate 59/100

This commit hardens the code that converts a user's BIP-39 seed phrase into secret data. It removes timing and loop-behavior clues that an attacker with physical access might measure to learn how many words the phrase has, how long each word is, or where word boundaries fall. The change is defensive: it makes the parsing routine run in constant time and on a fixed-size buffer, reducing side-channel leakage. There is no claim in the commit that an actual exploit exists.

Security candidateSFT-6378: first pass at anti-sidechannel round 2, needs testing and evaluationby Matt Gleason · 2c7dc29f · May 19, 2026 · 4 filesMessage 75 · AdequateLow 49Details
Commit message · Matt Gleason

SFT-6378: first pass at anti-sidechannel round 2, needs testing and
evaluation

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
cryptography-sensitive pathboot or update path
AI analysis · Low 49/100

This commit is a defensive hardening change for the BIP-39 seed-word handling code in the Passport hardware wallet firmware. It restructures how the English word list is stored so that a constant-time word comparison function can safely read every entry without accidentally touching memory past the end of a short word. It also removes noisy timing-test thresholds that could fail on shared CI machines and keeps only a stricter statistical correlation check. The change is explicitly described by the developer as an early 'first pass' that still needs testing and evaluation, so it is not a finished security fix.

Lower-priorityLift bounded_message_read to module levelby Jack · e6e05ffb · May 14, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Jack

Lift bounded_message_read to module level

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply moves an existing helper function from inside a method to the top of the same file. The function's behavior and the security limits it enforces are unchanged. There is no security fix or vulnerability introduced.

Lower-priorityBound microSD message read at read time, not via separate statby Jack · c8f53cf8 · May 13, 2026 · 1 fileMessage 73 · AdequateModerate 59Details
Commit message · Jack

Bound microSD message read at read time, not via separate stat

A separate stat in its own CardSlot() left a TOCTOU window where a swapped file could still be read unbounded. Move the cap into a bounded read_fn inside the read.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Moderate 59/100

This commit fixes a security bug in the Passport hardware wallet's microSD message-signing flow. Previously, the firmware checked a file's size in one operation and then read it in another. Because the microSD card could be swapped between those two moments, a malicious file larger than the allowed limit could still be loaded. The fix reads only a bounded number of bytes in a single operation, closing that window.

Lower-prioritySFT-6948: fixed add-secrets portability, removed unnecessary error wallingby Matt Gleason · 7a55a01e · May 12, 2026 · 2 filesMessage 65 · AdequateInformational 18Details
Commit message · Matt Gleason

SFT-6948: fixed add-secrets portability, removed unnecessary error
walling

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 18/100

This is a small build-tool fix in the factory/secrets-injection utility used during Passport device manufacturing. It replaces a non-portable type name (`ulong`) with the standard C type (`unsigned long`) and removes a compiler flag that was suppressing the resulting error. There is no direct evidence this change fixes an exploitable security vulnerability; it appears to be a portability/correctness cleanup that lets the tool compile cleanly across build environments.

Security candidateEnforce MSG_SIGNING_MAX_LENGTH on microSD message signingby Jack · a6dfc59f · May 11, 2026 · 1 fileMessage 81 · StrongModerate 63Details
Commit message · Jack

Enforce MSG_SIGNING_MAX_LENGTH on microSD message signing

Restores the file-size cap that the deleted SignTextFileFlow used to
provide before its consolidation in #636. Gated on normal_signing so
health-check files (with their own implicit length constraints) are
unaffected.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing boundary
AI analysis · Moderate 63/100

This commit fixes a missing safety limit in the Passport hardware wallet's microSD message-signing feature. Previously, a user could accidentally or maliciously be asked to sign an extremely large file from the microSD card, which could strain memory, cause crashes, or be used in a denial-of-service-style attack. The change restores a maximum file-size check that existed in older code but was lost when two code paths were merged. Health-check files are exempt because they already have their own built-in size limits.

Security candidatePass expected_address through QR message signing pathby Jack · 80fda3a1 · May 11, 2026 · 1 fileMessage 81 · StrongModerate 59Details
Commit message · Jack

Pass expected_address through QR message signing path

Mirrors the WYSIWYG-signing assertion that microSD signing already has
(added in #636). Keeps self.address raw (used as expected_address) and
uses a local display_address for stylization in the preview.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 59/100

This commit fixes a consistency issue in the QR-code message-signing flow of the Passport hardware wallet. Previously, when signing a message via QR code, the wallet did not pass the user-confirmed address down to the signing code as an explicit 'expected address' check. The microSD signing path already had this safety check. After the change, the raw, verified address is passed through and used to confirm the signature is for the correct address, while a stylized version is still shown on screen. This reduces the risk that a tricked or confused user signs a message with the wrong address.

Security candidateSFT-3834: fixed return type for quitting message signingby Matt Gleason · 3f29f056 · May 11, 2026 · 1 fileMessage 50 · ThinInformational 19Details
Commit message · Matt Gleason

SFT-3834: fixed return type for quitting message signing

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundary
AI analysis · Informational 19/100

This commit fixes a minor return-value bug in the Passport hardware wallet's health-check flow. When the user cancels message signing, the flow now returns 'None' instead of 'False'. This is a correctness fix that likely prevents a downstream caller from misinterpreting a user cancellation as a failed health check. There is no direct evidence in the commit that this is exploitable for theft, bypass, or denial of service.

Lower-prioritySFT-3834: formatted code, added autopep8 to nix devshellby Matt Gleason · e77f08d3 · May 9, 2026 · 3 filesMessage 50 · ThinInformational 15Details
Commit message · Matt Gleason

SFT-3834: formatted code, added autopep8 to nix devshell

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit is purely cosmetic: it reformats Python code to follow style rules, fixes spacing around '@classmethod' decorators, and adds an auto-formatting tool (autopep8) to the developer environment. No program behavior or security properties change.

AI review queuedSFT-3834: ensured preview address matches the signed output addressby Matt Gleason · 434d4bcc · May 9, 2026 · 3 filesMessage 50 · ThinModerate 59Details
Commit message · Matt Gleason

SFT-3834: ensured preview address matches the signed output address

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Moderate 59/100

This firmware update fixes a bug where the Bitcoin address shown on the Passport hardware wallet screen before signing could differ from the address actually used to create the signature. The fix makes the signing task verify that the address it computes matches the address previewed to the user, and aborts if they don't match. This prevents a user from being tricked into approving a signature for one address while the device signs with another.