KX
← All projectsKrux

Krux

Open-source signing firmware for Kendryte K210 devices.

BitcoinHardware walletsNormal
Repository coverage

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

58security candidates41second-pass queue15AI analyses
39commits · 30 days
59commits · 60 days
100commits · 180 days
216commits · 365 days
Backfill bands
Aug 5 → Feb 6116 seen6 candidatesComplete
Feb 6 → Jun 639 seen3 candidatesComplete
Jun 6 → Jul 622 seen1 candidatesComplete
Jul 6 → Aug 538 seen5 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.

65/100 average clarity
59Strong · 80–100
62Adequate · 60–79
79Thin · 40–59
16Opaque · 0–39
6security 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.
Odudex29145272
odudex89297159
Tads36101063
qlrd1620082
kdmukai422066
tadeubas410038
kkdao1200083
Jean Do600078
Naman015500060
bitcoisas500066
SatsCzar200062
Naman Gupta200079
Analysis record

Published AI watches

Last scanned 0 minutes ago

Moderate 66 AI analysisMessage 85 · Strong
KX KruxKrux BitcoinHardware wallets

fix: reject a PSBT whose outputs exceed its inputs

This commit fixes a bug in Krux, a Bitcoin signing device, where a malformed transaction whose outputs spend more than its inputs could be loaded and shown to the user. Normally such a transaction is impossible on the Bitcoin network, but …

Input validation gap in PSBT parsingUI rendering bug masking invalid transaction economicsPotential social-engineering / user-confusion attack
d6813d88by odudex+52−02 files
Vendor flagged security relevance
High 78 AI analysisMessage 95 · Strong
KX KruxKrux BitcoinHardware wallets

fix: verify PSBT input amounts before showing the fee

This commit fixes a security flaw in Krux, a Bitcoin signing device. Before the fix, an attacker could trick the device into showing a low transaction fee on screen while actually signing a much higher fee. The fix makes the device verify …

Fixes fee-display/sighash amount mismatchAdds prevout txid hash verification for non_witness_utxoMandates non_witness_utxo for legacy inputs
fc808059by odudex+353−122 files
Vendor flagged security relevance
Moderate 62 AI analysisMessage 90 · Strong
KX KruxKrux BitcoinHardware wallets

feat: warn when PSBT input amounts cannot be verified

This commit adds a warning screen to Krux, a hardware signing device, when it is asked to sign a multi-input Bitcoin transaction where the amounts of some inputs cannot be independently verified. The risk is that a malicious transaction co…

New user-facing warning for unverified multi-input SegWit amountsDetection logic tied to BIP143 signature semantics and inp.is_verifiedDoes not enforce previous-transaction inclusion; user can still proceed
518b3314by odudex+159−24 files
Vendor flagged security relevance
Moderate 55 AI analysisMessage 82 · Strong
KX KruxKrux BitcoinHardware wallets

chore: bump MaixPy with Shannon changes and RNG removal

This commit updates a bundled firmware component called MaixPy. The commit message says it fixes a 'Shannon heap overflow,' removes an unused random-number binding, and drops support for one hardware variant (Maix Bit). A heap overflow is …

Commit message explicitly mentions fixing a heap overflowRemoval of an unused cryptographic/randomness binding (os.urandom)Submodule bump only; no source-level patch visible in this commit
5c4ece9aby odudex+1−11 file
Vendor flagged security relevance
Moderate 52 AI analysisMessage 85 · Strong
KX KruxKrux BitcoinHardware wallets

fix: remove Maix Bit and CIF camera support

This commit removes support for an old, discontinued hardware device called the Maix Bit from the Krux Bitcoin wallet firmware. The commit message says the Maix Bit's camera resolution (CIF) was the only one that fed frames larger than QVG…

Buffer overflow / scratch buffer overflow claimed in commit message (49,152 bytes)Removal of vulnerable hardware code path rather than hardening the entropy moduleDiscontinuation of affected device reduces real-world exposure
8090ac73by odudex+11−1279 files
Vendor flagged security relevance
Low 37 AI analysisMessage 90 · Strong
KX KruxKrux BitcoinHardware wallets

docs: self-host math, remove MathJax/require.js CDN

This change removes third-party web scripts (MathJax and require.js loaded from a content delivery network) from the project's documentation and replaces them with self-hosted, pre-rendered math images. That eliminates a supply-chain risk …

Removal of cdnjs MathJax and require.js external script loadsSelf-hosting of rendered math assets as static SVGsExplicit commit message reference to supply-chain class (polyfill.io incident)
492820a1by odudex+8779−8928 files
Vendor flagged security relevance
High 74 AI analysisMessage 83 · Strong
KX KruxKrux BitcoinHardware wallets

Security Hardening (#851)

This commit fixes four security weaknesses in Krux, a Bitcoin hardware-wallet project. The changes prevent: (1) encrypted backups from declaring zero or very low password-stretching effort, which would make them easy to brute-force; (2) mu…

Minimum PBKDF2 iteration enforcement against trivial work-factor envelopesRejection of multiple origin-less xpubs in multi-key descriptorsSD file-list filtering of traversal entries ('.', '..', path separators)
8f62c860by Odudex+263−39 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 93 · Strong
KX KruxKrux BitcoinHardware wallets

fix: warn user before signing raw hashes in message signing (#846)

This commit adds a warning screen to Krux's message-signing feature when the user is about to sign a raw 32-byte hash or a 64-character hex string. Previously, the device would silently treat such inputs as already-hashed values and sign t…

Silent signing of raw 32-byte values allowed transaction sighash spoofingMessage signing path treated raw hashes identically to SHA256(message) digestsFix explicitly references 'C3 of #843' as a security concern
23bc73b3by Odudex+46−726 files
Vendor flagged security relevance
High 78 AI analysisMessage 98 · Strong
KX KruxKrux BitcoinHardware wallets

fix: reject PSBT inputs with non-standard sighash types before signing (#844)

Krux is a small, open-source Bitcoin signing device (hardware wallet). This commit fixes a security flaw where the device would sign transactions even if the sender asked it to use unusual Bitcoin signature modes—specifically SIGHASH_NONE,…

Explicit security fix for externally-reported audit finding (#843 C2)Pre-sign validation added to reject non-standard sighash typesRelevant to transaction-replacement / fund-redirect attacks via SIGHASH_NONE/SINGLE/ANYONECANPAY
e5318112by Odudex+115−03 files
Vendor flagged security relevance
Low 36 AI analysisMessage 98 · Strong
KX KruxKrux BitcoinHardware wallets

chore: require urllib3 >2.6 security fix for CVE-2025-66471 urllib3 is dependency of requests and translate, used in dev tools

This commit updates the project's Python dependency lock file to require urllib3 version 2.6.0 or newer. The commit message says this is a security fix for CVE-2025-66471, a vulnerability in the urllib3 library. urllib3 is used indirectly …

Dependency version bump for a reported CVE (CVE-2025-66471)urllib3 constrained to >=2.6.0Affected packages moved from main to dev dependency group, limiting runtime exposure
268f3f7bby odudex+23−172 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 73 · Adequate
KX KruxKrux BitcoinHardware wallets

Refactor capture entropy test to be less fragile, more DRY (#781)

This commit only refactors a single test file to make the tests less brittle and remove duplicated code. It does not change any production code, cryptographic logic, or user-facing behavior. There is no security issue here.

f091ec71by kdmukai+18−511 file
No security note in commit
Informational 15 AI analysisMessage 63 · Adequate
KX KruxKrux BitcoinHardware wallets

Minor UI change: Add line break for "bits/px" Shannon's entropy text (#780)

This commit is a cosmetic user-interface change. It splits a single line of text showing camera-captured entropy statistics into two lines so it fits better on small screens. No security-sensitive code, calculations, or behavior was altere…

30efd634by kdmukai+52−2725 files
No security note in commit
Low 37 AI analysisMessage 58 · Thin
KX KruxKrux BitcoinHardware wallets

Give warning for non-ASCII BIP39-passphrase (#769)

This change relaxes a safety rule in the Krux hardware wallet firmware. Previously, if a user scanned a BIP39 passphrase QR code containing non-English/non-ASCII characters (for example accented letters or symbols), Krux would block it wit…

Relaxation of input validation for BIP39 passphraseNon-ASCII passphrase now allowed after warning instead of blockedBIP39 NFKD normalization not performed due to firmware size constraints
fad4a0b8by Tads+53−1127 files
Vendor flagged security relevance
Low 44 AI analysisMessage 58 · Thin
KX KruxKrux BitcoinHardware wallets

Embit update: Improved BIP39 mnemonic validation (#759)

This commit tightens how a Bitcoin wallet tool (Krux) checks recovery phrases. Previously, the code accepted phrases with extra spaces, tabs, newlines, or commas between words because it used a loose 'strip and split' approach. Now it requ…

Stricter input validation for BIP39 mnemonic parsingRejection of whitespace-normalized parsing that could mask malformed user inputAlignment with upstream embit validation behavior
6806a792by Odudex+43−33 files
No security note in commit
Moderate 64 AI analysisMessage 74 · Adequate
KX KruxKrux BitcoinHardware wallets

Release 25.10.1 (#757)

This release fixes a bug in Krux, a Bitcoin signing device firmware. When a user scanned an encrypted QR code meant to provide a wallet passphrase, address, or wallet descriptor, the device could silently treat the raw encrypted bytes as t…

Silent derivation of wrong wallet from encrypted passphrase/data due to uncaught decoding exceptionCross-runtime behavior difference: CPython UnicodeDecodeError vs MaixPy TypeErrorMissing input validation for passphrase character set
64212093by Odudex+259−610 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 candidateMerge branch 'release-26.08.0'by odudex · be5eda28 · Aug 4, 2026 · 123 filesMessage 45 · ThinTriage 0Details
Commit message · odudex

Merge branch 'release-26.08.0'

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
seed or entropy pathsigning or wallet pathboot or update pathmerge-commit duplicate discount
Security candidatechore(Maixpy): bump cURby odudex · 74d6ed40 · Aug 1, 2026 · 1 fileMessage 40 · ThinTriage 12Details
Commit message · odudex

chore(Maixpy): bump cUR

40/100 · ThinMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
boot or update path
Security candidatechore: bump MaixPy with updated glyphsby odudex · a9329228 · Jul 31, 2026 · 1 fileMessage 57 · ThinTriage 12Details
Commit message · odudex

chore: bump MaixPy with updated glyphs

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
boot or update path
Security candidatefix: register embed_fire in the bdftokff device listby odudex · f15308e4 · Jul 31, 2026 · 1 fileMessage 85 · StrongTriage 12Details
Commit message · odudex

fix: register embed_fire in the bdftokff device list

The device was added in 26.03.0 but never listed, so glyph generation fell
through to the unmapped-device branch and printed an error on every run.
That branch happened to write the same 16px font, so the generated files
are unchanged by this.

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
boot or update path
Security candidatedocs: add PSBT input amount fixes to CHANGELOGby odudex · 48920c31 · Jul 31, 2026 · 1 fileMessage 57 · ThinTriage 0Details
Commit message · odudex

docs: add PSBT input amount fixes to CHANGELOG

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 boundarydocumentation-only discount
Security candidatefix: verify PSBT input amounts before showing the feeby odudex · fc808059 · Jul 31, 2026 · 2 filesMessage 95 · StrongHigh 78Details
Commit message · odudex

fix: verify PSBT input amounts before showing the fee

Display, policy and sighash now all read inp.utxo, so the amount on the
review screen is the amount the signer commits to. Any attached previous
transaction must hash to the outpoint being spent, and legacy inputs
require one since their sighash does not commit to the amount.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing boundarysigning or wallet path
AI analysis · High 78/100

This commit fixes a security flaw in Krux, a Bitcoin signing device. Before the fix, an attacker could trick the device into showing a low transaction fee on screen while actually signing a much higher fee. The fix makes the device verify that any attached previous transaction really matches the input being spent, and forces legacy (non-Segwit) inputs to include that previous transaction. It also makes sure the amount shown to the user is always the same amount the signature commits to. A small residual risk remains for multi-input Segwit transactions where previous transactions are not required.

Security candidatefeat: warn when PSBT input amounts cannot be verifiedby odudex · 518b3314 · Jul 31, 2026 · 4 filesMessage 90 · StrongModerate 62Details
Commit message · odudex

feat: warn when PSBT input amounts cannot be verified

BIP143 commits only to the amount of the input being signed, so a
coordinator can declare a different input truthfully in each of two
sessions and combine one valid signature per input. Warn when a
non-taproot PSBT has more than one input and any amount is unbacked
by its previous transaction.

The warning states the risk rather than instructing the user, since a
malicious retry request is indistinguishable from a failed transfer,
and signing the same transaction twice is legitimate when one person
holds more than one key of a multisig.

Translations for the two new strings are still pending.

90/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 62/100

This commit adds a warning screen to Krux, a hardware signing device, when it is asked to sign a multi-input Bitcoin transaction where the amounts of some inputs cannot be independently verified. The risk is that a malicious transaction coordinator could trick a user into paying a much higher fee than shown, or into signing away more money than intended, by lying about input amounts during separate signing sessions. The patch does not block signing; it only warns the user and asks whether to proceed. It also does not fix the underlying cryptographic gap in older SegWit (BIP143) signatures, which is why the warning is needed.

Security candidatefix: reject a PSBT whose outputs exceed its inputsby odudex · d6813d88 · Jul 31, 2026 · 2 filesMessage 85 · StrongModerate 66Details
Commit message · odudex

fix: reject a PSBT whose outputs exceed its inputs

Such a transaction is invalid on chain, and it used to render as a small
negative fee with fee_percent clamped to 0.1, so the high fee warning
did not fire either. Fail at load instead.

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
signing boundarysigning or wallet path
AI analysis · Moderate 66/100

This commit fixes a bug in Krux, a Bitcoin signing device, where a malformed transaction whose outputs spend more than its inputs could be loaded and shown to the user. Normally such a transaction is impossible on the Bitcoin network, but Krux would display it with a tiny negative fee and skip the high-fee warning, potentially tricking a user into approving a transaction that can never be mined. The fix now rejects these PSBTs immediately when loading them.

Security candidatechore: bump MaixPy with Shannon changes and RNG removalby odudex · 5c4ece9a · Jul 31, 2026 · 1 fileMessage 82 · StrongModerate 55Details
Commit message · odudex

chore: bump MaixPy with Shannon changes and RNG removal

Fixes the shannon heap overflow, removes the unused os.urandom binding,
and drops the Maix Bit build project.

82/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomnessmemory safetyboot or update path
AI analysis · Moderate 55/100

This commit updates a bundled firmware component called MaixPy. The commit message says it fixes a 'Shannon heap overflow,' removes an unused random-number binding, and drops support for one hardware variant (Maix Bit). A heap overflow is a memory corruption bug that can sometimes be exploited to run attacker-controlled code, but the actual code change is just a one-line version bump of a submodule, so we cannot verify the fix from the diff alone.

Security candidatefix: remove Maix Bit and CIF camera supportby odudex · 8090ac73 · Jul 31, 2026 · 9 filesMessage 85 · StrongModerate 52Details
Commit message · odudex

fix: remove Maix Bit and CIF camera support

The device was discontinued in 25.09.0 and has no known users. Its CIF
framesize was the only caller that fed the shannon entropy module a frame
larger than QVGA, overflowing that module's scratch buffer by 49152 bytes.

Also drops the OV5642 sensor handling, which only the Maix Bit used.

85/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomnessmemory safetyboot or update path
AI analysis · Moderate 52/100

This commit removes support for an old, discontinued hardware device called the Maix Bit from the Krux Bitcoin wallet firmware. The commit message says the Maix Bit's camera resolution (CIF) was the only one that fed frames larger than QVGA into a 'shannon entropy' module, overflowing that module's scratch buffer by 49,152 bytes. In plain terms, this is a fix for a buffer overflow bug, but the fix is to delete the only hardware configuration that triggered it rather than enlarge the buffer. Because the device was already discontinued and reportedly has no users, the practical risk is low, but the underlying overflow condition is a real memory-safety issue.

Security candidaterefactor: use native uUR on tests and simulatorby odudex · 2fe2f5f5 · Jul 31, 2026 · 19 filesMessage 90 · StrongTriage 24Details
Commit message · odudex

refactor: use native uUR on tests and simulator

Replace the pure-Python ur/urtypes vendor packages with the uUR CPython
extension built from the bc-ur submodule, so host and device run identical
UR code. Drops the simulator shim that mapped one API onto the other.

Tests now need a C compiler and Python headers.

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
Why it was queued
signing or wallet pathboot or update path
Security candidaterefactor: adapt UR decoding to cUR state machine APIby odudex · f90219e3 · Jul 29, 2026 · 4 filesMessage 85 · StrongTriage 12Details
Commit message · odudex

refactor: adapt UR decoding to cUR state machine API

receive_part now returns a decoder state instead of raising, and is_complete/is_success were replaced by the state attribute. Transient errors are ignored while scanning; terminal ones abort the capture.

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
boot or update path
Security candidatetest: build embit's C libsecp256k1 for testsby odudex · ac3ea482 · Jul 27, 2026 · 3 filesMessage 95 · StrongTriage 26Details
Commit message · odudex

test: build embit's C libsecp256k1 for tests

Without it embit falls back to its pure Python EC implementation, which does
not always behave like the C library the firmware runs: firmware.bin.bad.sig
raises while parsing instead of failing verification, so the Bad signature
branch in firmware.py was never exercised. Adds poe tasks to build and to
check the active backend, wired into CI, which now fails on the fallback.

Full suite goes from 118s to 84s.

95/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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarydefensive validation
Security candidatefix(test): fake the clock in test_fill_flash timeout testby qlrd · 9fecf150 · Jul 27, 2026 · 1 fileMessage 95 · StrongTriage 25Details
Commit message · qlrd

fix(test): fake the clock in test_fill_flash timeout test

test_fill_flash_insufficient_entropy_scenario waited 25 real seconds for
MAX_CAPTURE_PERIOD to elapse, spinning ~500k iterations that piled up mock
call records. Patching time.time in fill_flash fires the timeout after 4
frames: 25.1s to 0.09s, same coverage.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
entropy or randomness
Security candidatechore: update cUR and k_quirkby odudex · f4796afe · Jul 8, 2026 · 1 fileMessage 57 · ThinTriage 12Details
Commit message · odudex

chore: update cUR and k_quirk

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
boot or update path
Security candidatefix: pin gcc base image by digestby odudex · ceefbb19 · Jul 8, 2026 · 1 fileMessage 57 · ThinTriage 18Details
Commit message · odudex

fix: pin gcc base image by digest

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
access control
Security candidatedocs: update `poetry` to `uv commandsby qlrd · 55c72c34 · Jun 17, 2026 · 4 filesMessage 57 · ThinTriage 0Details
Commit message · qlrd

docs: update `poetry` to `uv commands

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
boot or update pathdocumentation-only discount
Security candidatedocs: self-host math, remove MathJax/require.js CDNby odudex · 492820a1 · Jun 8, 2026 · 28 filesMessage 90 · StrongLow 37Details
Commit message · odudex

docs: self-host math, remove MathJax/require.js CDN

Pre-render the entropy page display equations to committed SVGs and
write inline math as plain HTML, removing the cdnjs MathJax and
require.js loads (same supply chain class as the polyfill.io incident).
render_docs_math.py regenerates the SVGs from the markdown. Also ignore
mkdocs (public/) and pytest-cov (htmlcov/) build output.

90/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomnessseed or entropy path
AI analysis · Low 37/100

This change removes third-party web scripts (MathJax and require.js loaded from a content delivery network) from the project's documentation and replaces them with self-hosted, pre-rendered math images. That eliminates a supply-chain risk similar to the polyfill.io incident, where a compromised or malicious CDN could inject harmful code into documentation pages viewed by users or developers.

Security candidatechore: update Embit and Maixpy to latestby odudex · b9b269c7 · May 30, 2026 · 2 filesMessage 57 · ThinTriage 12Details
Commit message · odudex

chore: update Embit and Maixpy to latest

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
boot or update path
Security candidatechore(firmware): bump MaixPy to k_quirc + bump uUC + Maixpy cleanupby odudex · 834d75be · May 14, 2026 · 1 fileMessage 62 · AdequateTriage 12Details
Commit message · odudex

chore(firmware): bump MaixPy to k_quirc + bump uUC + Maixpy cleanup

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
boot or update path
Security candidatefeat: migrate UR encoding to uUR MicroPython C moduleby odudex · 401c70c4 · May 6, 2026 · 12 filesMessage 95 · StrongTriage 24Details
Commit message · odudex

feat: migrate UR encoding to uUR MicroPython C module

Switch src/krux from the pure-Python urtypes and foundation-ur-py packages to the new uUR C module (built into MaixPy). The simulator and tests reach the same API surface through a sys.modules shim that re-exports the Python packages.

chore: update to latest Maixpy develop commit

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing or wallet pathboot or update path
Security candidatefeat(TinyScan): Remove grid from TinyScan #809by Tads · e4f6e788 · May 6, 2026 · 2 filesMessage 65 · AdequateTriage 15Details
Commit message · Tads

feat(TinyScan): Remove grid from TinyScan #809

65/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
seed or entropy path
Security candidateSecurity Hardening (#851)by Odudex · 8f62c860 · Apr 22, 2026 · 9 filesMessage 83 · StrongHigh 74Details
Commit message · Odudex

Security Hardening (#851)

* fix: enforce minimum PBKDF2 iterations in kef.unwrap

A malicious envelope could declare iterations=0 and bypass key
stretching. Reject any envelope below 10000 iterations.

* fix: reject multiple origin-less xpubs in multi-key descriptors

Previously a second origin-less key would silently overwrite the first,
losing cosigner identity. Only the single taproot internal-key
exception remains allowed.

* fix: filter traversal entries from SD listings in file manager

A malicious or corrupted SD card could return names like ".", ".." or entries containing path separators which, concatenated into a path, would allow escaping the current directory. Drop those entries from os.listdir results. The intended ".." up-navigation is unaffected because it is added explicitly by the page.

* fix: add in-session backoff on KEF decryption failures

Track failed KEF decrypt attempts in a RAM-only class counter and sleep with exponentially growing delay (1s, 2s, 4s, capped at 30s) before each new attempt. Reset on success. A power cycle clears the counter, an accepted trade-off to slow interactive brute forcing without writing lockout state to flash.

83/100 · StrongMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
access controldefensive validationsigning or wallet path
AI analysis · High 74/100

This commit fixes four security weaknesses in Krux, a Bitcoin hardware-wallet project. The changes prevent: (1) encrypted backups from declaring zero or very low password-stretching effort, which would make them easy to brute-force; (2) multi-signature wallet descriptors from silently accepting multiple cosigners whose identity cannot be verified; (3) a malicious or corrupted SD card from tricking the file manager into leaving its intended folder; and (4) repeated wrong password attempts on encrypted backups by adding growing delays between attempts. All four are hardening fixes rather than a single critical vulnerability.

Security candidatefix: add zip bomb protection and QR part limit enforcement (#843) (#848)by Odudex · bd95e828 · Apr 7, 2026 · 10 filesMessage 93 · StrongTriage 20Details
Commit message · Odudex

fix: add zip bomb protection and QR part limit enforcement (#843) (#848)

DeflateIO now enforces a 100KB max decompressed size at the C level, protecting all callers (BBQR and KEF) from zip bomb OOM on K210.
pMofN parser validates part_total (1-99) and part_index range.
BBQR parser validates part_total >= 1.

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
defensive validationboot or update path
Security candidatefix: warn user before signing raw hashes in message signing (#846)by Odudex · 23bc73b3 · Apr 6, 2026 · 26 filesMessage 93 · StrongModerate 60Details
Commit message · Odudex

fix: warn user before signing raw hashes in message signing (#846)

Add a warning screen when the input is a raw 32-byte hash or 64-char hex string, alerting the user before signing. This mitigates the risk of an attacker submitting a transaction sighash disguised as a message. Fixes C3 of #843

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
explicit security languagesigning boundarysigning or wallet path
AI analysis · Moderate 60/100

This commit adds a warning screen to Krux's message-signing feature when the user is about to sign a raw 32-byte hash or a 64-character hex string. Previously, the device would silently treat such inputs as already-hashed values and sign them directly. Because a Bitcoin transaction's signature hash (sighash) is also a 32-byte value, an attacker could trick a user into signing what looks like a harmless message but is actually a transaction hash, effectively authorizing a transaction. The fix asks the user to confirm before proceeding.