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 queue71AI 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.
Odudex291416272
odudex892932159
Tads361011063
qlrd1622082
kdmukai422066
tadeubas411038
kkdao1204083
Jean Do600078
Naman015501060
bitcoisas500066
Naman Gupta201079
SatsCzar200062
Analysis record

Published AI watches

Last scanned 52 minutes ago

Moderate 66 AI analysisMessage 45 · Thin
KX KruxKrux BitcoinHardware wallets

Merge branch 'release-26.08.0'

This is a routine release merge for Krux firmware (version 26.08.0). It includes several genuine security fixes: a heap buffer overflow in camera-based entropy generation for a discontinued device, stricter fee calculation when signing Bit…

Heap buffer overflow fix in camera entropy module (discontinued Maix Bit only)PSBT fee calculation stricter checks and unverified-input-amount warningStored mnemonic file corruption now preserved instead of overwritten
be5eda28by odudex+4335−3028123 files
Vendor flagged security relevance
Informational 0 AI analysisMessage 40 · Thin
KX KruxKrux BitcoinHardware wallets

chore(Maixpy): bump cUR

This commit appears to be a routine version bump of a component called 'cUR' inside the MaixPy firmware build. No actual code changes are visible in the provided diff, and the commit message gives no indication of a security fix or vulnera…

74d6ed40by odudex+1−11 file
No security note in commit
Informational 2 AI analysisMessage 57 · Thin
KX KruxKrux BitcoinHardware wallets

chore: bump MaixPy with updated glyphs

This commit appears to update a submodule or dependency called MaixPy to a newer version that includes updated visual glyphs (small icons/symbols). The title and message describe it as a routine maintenance chore, not a security fix. No ac…

a9329228by odudex+1−11 file
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
KX KruxKrux BitcoinHardware wallets

fix: register embed_fire in the bdftokff device list

This commit fixes a build-time font-generation script so that a newly supported device ('embed_fire') is recognized. Before the fix, the script printed an error but still produced the same font files. There is no security issue.

f15308e4by odudex+1−01 file
No security note in commit
Moderate 63 AI analysisMessage 57 · Thin
KX KruxKrux BitcoinHardware wallets

docs: add PSBT input amount fixes to CHANGELOG

This commit only updates the project's CHANGELOG.md to document earlier fixes related to PSBT (Partially Signed Bitcoin Transaction) fee and amount handling. It does not contain any code changes itself. The changelog entries describe secur…

Changelog documents prior PSBT fee/amount validation fixesMentions insufficient coordinator data as a security concernNo actual code or test changes in this commit
48920c31by odudex+4−01 file
Vendor flagged security relevance
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
Informational 15 AI analysisMessage 90 · Strong
KX KruxKrux BitcoinHardware wallets

refactor: use native uUR on tests and simulator

This commit is a routine engineering cleanup: it removes a Python-only compatibility layer (a 'shim') used for testing and simulation, and makes the test environment use the same C-language UR encoder/decoder module that the real hardware …

2fe2f5f5by odudex+108−24919 files
No security note in commit
Low 34 AI analysisMessage 62 · Adequate
KX KruxKrux BitcoinHardware wallets

refactor: narrow parse_address fallbacks to EmbitError in wallet.py

This change fixes a bug where pressing a device's cancel/back button during address parsing could be ignored or misreported as an 'invalid address' instead of letting the user exit. The code previously caught every possible error (includin…

Bare exception handler narrowed to specific library exceptionUser-triggered interrupt (KeyboardInterrupt) no longer swallowedRegression test added for interrupt propagation in both code branches
a5fb4737by kkdao+24−32 files
No security note in commit
Moderate 62 AI analysisMessage 93 · Strong
KX KruxKrux BitcoinHardware wallets

fix: reject base58 address with unknown version byte in parse_address

This fix closes a hole where a Bitcoin address that looks valid (correct checksum) but belongs to no known network could be accepted by Krux's address parser. Before the patch, the parser only caught thrown errors; because the underlying l…

Input validation bypass fixedBase58 address version byte not validated before fixLibrary silent failure (None return) not handled by caller
63e8b8e5by kkdao+20−12 files
No security note in commit
Low 34 AI analysisMessage 62 · Adequate
KX KruxKrux BitcoinHardware wallets

refactor: catch Exception, not bare except, in parse_wallet fallbacks

This commit tightens error handling in Krux's wallet parsing. Previously, the code used bare 'except:' clauses that would catch everything, including KeyboardInterrupt and SystemExit. Those special exceptions should normally be allowed to …

Bare except clauses replaced with except Exception to avoid swallowing KeyboardInterrupt/SystemExitNew regression test ensures KeyboardInterrupt propagates through all parse_wallet fallback branchesComments explicitly call out untrusted input and interrupt propagation behavior
6f617710by kkdao+42−72 files
No security note in commit
Low 29 AI analysisMessage 85 · Strong
KX KruxKrux BitcoinHardware wallets

refactor: adapt UR decoding to cUR state machine API

This commit refactors how Krux handles animated QR codes in the 'UR' format. It swaps an older decoder API for a newer state-machine API. The visible change is that transient decoding errors are now ignored while scanning, and only termina…

Error-handling behavior change: transient UR decoder errors are now ignored instead of abortingTerminal error set is narrow (NO_RESULT, INVALID_CHECKSUM); other decoder error states may be silently droppedFirmware submodule MaixPy updated, indicating the actual C decoder API changed
f90219e3by odudex+80−74 files
No security note in commit
Informational 15 AI analysisMessage 95 · Strong
KX KruxKrux BitcoinHardware wallets

test: build embit's C libsecp256k1 for tests

This commit only changes how automated tests are run. It builds a C cryptography library during testing so the test environment matches the real firmware more closely. There is no change to the actual Krux firmware or wallet code, and no s…

ac3ea482by odudex+37−03 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
KX KruxKrux BitcoinHardware wallets

docs: add generated mnemonic flow screenshots

This commit only updates user documentation. It adds new screenshots showing how to create a new wallet mnemonic and updates the script that automatically generates those screenshots. There are no code changes that affect security.

61807e7eby Naman015+39−38 files
No security note in commit
Informational 0 AI analysisMessage 57 · Thin
KX KruxKrux BitcoinHardware wallets

chore: update cUR and k_quirk

The commit title says it is a routine maintenance update ('chore') for two internal items named cUR and k_quirk in the MaixPy firmware file. No diff content is available, and no verified references were supplied, so there is no visible evi…

f4796afeby odudex+1−11 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.

Lower-priorityupdate docs navigation (#720)by Tads · 380a840c · Sep 22, 2025 · 1 fileMessage 43 · ThinTriage 0Details
Commit message · Tads

update docs navigation (#720)

43/100 · ThinMessage clarity
✓ Descriptive subject✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
documentation-only discount
Lower-priorityAdd TZT to simulator and docs (#723)by Tads · f54a8dc8 · Sep 22, 2025 · 15 filesMessage 53 · ThinTriage 0Details
Commit message · Tads

Add TZT to simulator and docs (#723)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Lower-priorityrestores working "paging" feature in DatumTool, (#722)by Jean Do · 2f51a274 · Sep 22, 2025 · 5 filesMessage 91 · StrongTriage 0Details
Commit message · Jean Do

restores working "paging" feature in DatumTool, (#722)

* restores working "paging" feature in DatumTool,
however there remains a problem originating in display.to_lines_endpos()
whenever the very last character on a page was a breakable space, the 2nd
to last character is replaced with elipsis and is lost on the following page.

* resolves appending "ellipsis" as very last character on page
instead of replacing the second-to-last character when it
would have been a clippped white-space.
Includes test that would fail w/o the change to display.py
and confirms that this adjustment passes the test.

* test added, primarily to appease coverage of 3 new lines paging in Datum Tool:
* as page index gets appended,
* as user pages to next page,
* as user pages to previous page.

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Lower-prioritytest: add bit board and OV5642_ID type to `tests/test_camera.py` (#715)by qlrd · b1ffb409 · Sep 22, 2025 · 6 filesMessage 100 · StrongTriage 0Details
Commit message · qlrd

test: add bit board and OV5642_ID type to `tests/test_camera.py` (#715)

* feat: add OV5642 camera id to `src/krux/camera.py`.

* test: add `bit` board and `OV5642_ID` type to `tests/test_camera/py`.

* chore(test): add `bit` board to `tests/pages/test_flash_tools.py` and `tests/test_power.py`.

100/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✓ Links an issue, advisory, or supporting reference
Lower-prioritydiscontinue Maix Bit releases (#719)by Odudex · 94c268ba · Sep 17, 2025 · 7 filesMessage 53 · ThinTriage 0Details
Commit message · Odudex

discontinue Maix Bit releases (#719)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Security candidateupdate Maixpyby odudex · a91124b8 · Sep 17, 2025 · 1 fileMessage 18 · OpaqueInformational 0Details
Commit message · odudex

update Maixpy

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! 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 0/100

This commit updates a submodule called MaixPy in the Krux firmware project, but the actual code changes are not available. There is no diff to review and no public references describing what changed or whether it has security relevance. We cannot determine if this update fixes a security issue, introduces one, or is purely routine maintenance.

Lower-priorityadds maixpy_yahboom_devkit to krux script (#718)by Jean Do · 0d53051f · Sep 17, 2025 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Jean Do

adds maixpy_yahboom_devkit to krux script (#718)

which has been built since late 2024 with --unsupported flag,
and flashed like via maixpy_yahboom

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Security candidateAdd Wonder K PRO Support (#717)by Odudex · 9dbd578d · Sep 16, 2025 · 18 filesMessage 68 · AdequateInformational 15Details
Commit message · Odudex

Add Wonder K PRO Support (#717)

* Add WonderK support

---------

Co-authored-by: tadeubas <tadeubas@gmail.com>

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit adds support for a new hardware device called the Wonder K PRO to the Krux Bitcoin signing firmware. It is a routine feature addition: it introduces a new touchscreen driver (GT911), updates build scripts, simulators, display/camera settings, and font handling to recognize the new device. There is no indication in the commit or supplied references that this change fixes or introduces a security vulnerability.

Security candidateUse optimized Maixpy (#716)by Odudex · 2856ecea · Sep 16, 2025 · 3 filesMessage 58 · ThinInformational 12Details
Commit message · Odudex

Use optimized Maixpy (#716)

* Use optimized Maixpy

* Enable grayscale on GC2145 cameras for Tinyseed

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
boot or update path
AI analysis · Informational 12/100

This commit updates the Krux firmware to use an optimized version of MaixPy and enables grayscale mode for GC2145 cameras in Tinyseed devices. The visible code change removes a special-case exception that previously skipped grayscale for GC2145 cameras. The stated goal is to reduce firmware size by 25% and lower RAM usage. There is no direct evidence in the commit or supplied references that this fixes a security vulnerability.

AI review queuedupdate beta versionby odudex · bf361aab · Sep 16, 2025 · 3 filesMessage 28 · OpaqueTriage 0Details
Commit message · odudex

update beta version

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI review queuedInclude @qlrd suggestionsby tadeubas · 0244ecd3 · Sep 16, 2025 · 3 filesMessage 35 · OpaqueTriage 0Details
Commit message · tadeubas

Include @qlrd suggestions

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
Security candidateNew device TZTby tadeubas · a0a68286 · Sep 16, 2025 · 6 filesMessage 28 · OpaqueInformational 15Details
Commit message · tadeubas

New device TZT

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

This commit adds support for a new hardware device called the TZT CanMV. It is a routine feature addition: the code now recognizes the new device type, includes it in build/flash scripts, sets the correct display and touchscreen flags, and assigns a USB product ID. There is no security fix or security-relevant behavior change.

Security candidateTest missing cases for fast_forward or backward (#714)by Tads · eaece17c · Sep 16, 2025 · 6 filesMessage 68 · AdequateInformational 15Details
Commit message · Tads

Test missing cases for fast_forward or backward (#714)

68/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
seed or entropy path
AI analysis · Informational 15/100

This commit is a routine test and build-tool update. It adds automated tests for fast-forward and fast-backward button navigation in several user-interface screens, and expands the project's flashing/erase commands in the build script and pyproject.toml. There is no change to how the device handles secrets, cryptography, or user data, and no security bug is being fixed.

Lower-priorityremoves a long list of "# pylint disable:" errors and warnings (#713)by Jean Do · 6ada4764 · Sep 16, 2025 · 1 fileMessage 58 · ThinTriage 0Details
Commit message · Jean Do

removes a long list of "# pylint disable:" errors and warnings (#713)

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
AI review queuedFix simulator sequences symlinks (#712)by Tads · c58bd16a · Sep 16, 2025 · 26 filesMessage 53 · ThinTriage 0Details
Commit message · Tads

Fix simulator sequences symlinks (#712)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
signing or wallet pathdocumentation-only discountsecond-pass: unusually broad changesecond-pass: security-sensitive path
Security candidateMerge pull request #711 from selfcustody/release-25.09.0by Odudex · 8e4a2cfb · Sep 15, 2025 · 771 filesMessage 58 · ThinInformational 15Details
Commit message · Odudex

Merge pull request #711 from selfcustody/release-25.09.0

Release 25.09.0

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
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathmerge-commit duplicate discount
AI analysis · Informational 15/100

This commit is a routine release merge (Release 25.09.0) that adds the entire Krux project repository as a new import. The diff shows only new files: documentation, images, build tooling, CI workflows, configuration, and source code. There is no patch to existing code, no bug fix, and no security-relevant change described in the commit message or diff. It is a large content addition, not a vulnerability fix or security update.