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 queue35AI 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.
Odudex29148272
odudex892916159
Tads36108063
qlrd1621082
kdmukai422066
tadeubas410038
kkdao1200083
Jean Do600078
Naman015500060
bitcoisas500066
Naman Gupta200079
SatsCzar200062
Analysis record

Published AI watches

Last scanned 54 minutes ago

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 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 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 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
Low 25 AI analysisMessage 57 · Thin
KX KruxKrux BitcoinHardware wallets

fix: pin gcc base image by digest

This change locks the Docker build to one specific, unchangeable version of the GCC compiler image by adding a cryptographic fingerprint (SHA digest). Without this, an attacker who compromises the GCC image registry could silently replace …

Docker base image changed from mutable tag to digest-pinned referenceSupply-chain / build-integrity hardeningPrevents registry tag-replacement attacks for the gcc:12-bookworm image
ceefbb19by odudex+1−11 file
No security note in commit
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
Low 32 AI analysisMessage 95 · Strong
KX KruxKrux BitcoinHardware wallets

feat: migrate UR encoding to uUR MicroPython C module

This commit swaps out the pure-Python QR code encoding/decoding libraries used by the Krux hardware wallet for a new C module called uUR. The stated goal is faster scanning and lower memory use. The change touches code that handles Bitcoin…

Large-scale dependency swap in cryptographic data path (UR/PSBT/wallet descriptors/BIP39 seeds)New native C module is not visible in this diff; behavior must be trusted to MaixPy firmware imageShim layer changes string case handling (uppercase Bytewords) and decoder attribute semantics
401c70c4by odudex+167−7612 files
No security note in commit
Informational 15 AI analysisMessage 65 · Adequate
KX KruxKrux BitcoinHardware wallets

feat(TinyScan): Remove grid from TinyScan #809

This commit removes the visual grid lines drawn on camera scans of TinySeed metal backup plates. It is a user-interface improvement to make the punched holes easier to see; it does not change security logic, cryptography, or data handling.

e4f6e788by Tads+5−192 files
No security note in commit
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 66 AI analysisMessage 93 · Strong
KX KruxKrux BitcoinHardware wallets

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

This commit fixes two denial-of-service weaknesses in Krux, a Bitcoin hardware-wallet firmware. First, it caps how much data can come out of compressed (deflated) QR codes and encrypted backups, preventing a maliciously crafted 'zip bomb' …

zip-bomb / decompression-bomb protectiondenial-of-service (OOM) mitigationinput validation on multi-part QR part counts
bd95e828by Odudex+102−610 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
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 queueddocs: update installer info (#782)by qlrd · 8767792e · Nov 30, 2025 · 13 filesMessage 98 · StrongTriage 12Details
Commit message · qlrd

docs: update installer info (#782)

The latest installer changed authenticity/integrity checks. This commit
removes `snippets/verify-the-*.en.txt` as well change some
`getting-started/installing/from-gui` files to comply with the necessary
steps.

98/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✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Lower-priorityDocs troubleshooting wonder-mv (#788)by Tads · 850460a8 · Nov 28, 2025 · 3 filesMessage 53 · ThinTriage 0Details
Commit message · Tads

Docs troubleshooting wonder-mv (#788)

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
documentation-only discount
Lower-priorityUI tweak: Adjust mnemonic list alignment (#786)by kdmukai · 34f03e5c · Nov 26, 2025 · 2 filesMessage 68 · AdequateTriage 0Details
Commit message · kdmukai

UI tweak: Adjust mnemonic list alignment (#786)

* Right align mnemonic numbers; add missing space char

* Format the 2nd half of a 24 word display

* DRY optimization

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Lower-priorityFix mnemonic index number display for replacement words (#785)by kdmukai · 1d6113fe · Nov 26, 2025 · 1 fileMessage 58 · ThinTriage 0Details
Commit message · kdmukai

Fix mnemonic index number display for replacement words (#785)

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Lower-priorityfix: pMofN QRs now deal with bytes databy odudex · f15e198e · Nov 25, 2025 · 1 fileMessage 57 · ThinTriage 0Details
Commit message · odudex

fix: pMofN QRs now deal with bytes data

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Security candidateRefactor capture entropy test to be less fragile, more DRY (#781)by kdmukai · f091ec71 · Nov 25, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · kdmukai

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

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

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.

Security candidateMinor UI change: Add line break for "bits/px" Shannon's entropy text (#780)by kdmukai · 30efd634 · Nov 24, 2025 · 25 filesMessage 63 · AdequateInformational 15Details
Commit message · kdmukai

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

63/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
entropy or randomnessseed or entropy path
AI analysis · Informational 15/100

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

Lower-priorityExtend USB list port macOS command with more possible outputs (#773)by Nick Klockenga · f11b9e19 · Nov 24, 2025 · 1 fileMessage 58 · ThinTriage 0Details
Commit message · Nick Klockenga

Extend USB list port macOS command with more possible outputs (#773)

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
documentation-only discount
Lower-prioritybump version to 25.11.beta1 add WonderK to release scriptby odudex · 3ddefc52 · Nov 22, 2025 · 4 filesMessage 65 · AdequateTriage 0Details
Commit message · odudex

bump version to 25.11.beta1
add WonderK to release script

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Lower-priorityUR QR codes: reduce density using upper case (#776)by Odudex · 8e6e580f · Nov 22, 2025 · 2 filesMessage 58 · ThinTriage 0Details
Commit message · Odudex

UR QR codes: reduce density using upper case (#776)

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Security candidateTrue Binary QR codes (#777)by Odudex · fd46e8df · Nov 22, 2025 · 7 filesMessage 76 · AdequateTriage 12Details
Commit message · Odudex

True Binary QR codes (#777)

* Update Maixpy to return bytes object from binary QR codes

* Update Datum to auto convert, when possible, binary QRs to strings

* Ensure addresses become strings when scanned

* When encryption-key is scanned, try to decode as str

---------

Co-authored-by: Jean Do <117163651+jdlcdl@users.noreply.github.com>

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
boot or update path
Security candidateKboot: Disable "interactive mode" (Embed Fire issue) (#778)by Odudex · 37085e3e · Nov 22, 2025 · 1 fileMessage 58 · ThinTriage 12Details
Commit message · Odudex

Kboot: Disable "interactive mode" (Embed Fire issue) (#778)

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
boot or update path
Lower-priorityDocs: info about embed fire loose touchscreen (#779)by Tads · df07d2e4 · Nov 22, 2025 · 2 filesMessage 70 · AdequateTriage 0Details
Commit message · Tads

Docs: info about embed fire loose touchscreen (#779)

and videos management

70/100 · AdequateMessage clarity
✓ Specific, 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
documentation-only discount
Lower-prioritydocs refactor parts add info about PPI (#775)by Tads · d73c689f · Nov 19, 2025 · 1 fileMessage 53 · ThinTriage 0Details
Commit message · Tads

docs refactor parts add info about PPI (#775)

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
documentation-only discount
Lower-prioritydocs: update Mac driver troubleshooting IIby odudex · 66e8ea10 · Nov 18, 2025 · 2 filesMessage 57 · ThinTriage 0Details
Commit message · odudex

docs: update Mac driver troubleshooting II

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
Lower-prioritydocs: update Mac driver troubleshootingby odudex · d885de64 · Nov 18, 2025 · 1 fileMessage 57 · ThinTriage 0Details
Commit message · odudex

docs: update Mac driver troubleshooting

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
Lower-priorityAdd info about missing CH341 driver for Mac OS (#774)by Tads · 78487023 · Nov 17, 2025 · 3 filesMessage 58 · ThinTriage 0Details
Commit message · Tads

Add info about missing CH341 driver for Mac OS (#774)

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
documentation-only discount
Security candidateGive warning for non-ASCII BIP39-passphrase (#769)by Tads · fad4a0b8 · Nov 17, 2025 · 27 filesMessage 58 · ThinLow 37Details
Commit message · Tads

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

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
secret or key materialaccess controlsigning or wallet path
AI analysis · Low 37/100

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 with an error. Now it shows a warning and lets the user proceed anyway. The risk is that different wallet software may interpret those special characters slightly differently, so the user could end up with a different Bitcoin key than expected and potentially lose access to funds. The change is intentional and documented, not a hidden bug.

Lower-priorityExtend USB list port macOS command with more possible outputs (#773)by Nick Klockenga · 150e8a16 · Nov 17, 2025 · 1 fileMessage 58 · ThinTriage 0Details
Commit message · Nick Klockenga

Extend USB list port macOS command with more possible outputs (#773)

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
documentation-only discount
Lower-priorityDatum better menu btn offset (#770)by Tads · 23dd7323 · Nov 17, 2025 · 1 fileMessage 53 · ThinTriage 0Details
Commit message · Tads

Datum better menu btn offset (#770)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Lower-priorityDocs: add new cam to embed fire (#762)by Tads · 07d9b2c9 · Nov 17, 2025 · 1 fileMessage 65 · AdequateTriage 0Details
Commit message · Tads

Docs: add new cam to embed fire (#762)

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
documentation-only discount
AI review queuedupdate CHANGELOGby odudex · 15e4f26f · Nov 13, 2025 · 1 fileMessage 18 · OpaqueTriage 0Details
Commit message · odudex

update CHANGELOG

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
Security candidateEmbit update: Improved BIP39 mnemonic validation (#759)by Odudex · 6806a792 · Nov 13, 2025 · 3 filesMessage 58 · ThinLow 44Details
Commit message · Odudex

Embit update: Improved BIP39 mnemonic validation (#759)

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
secret or key materialcryptography-sensitive path
AI analysis · Low 44/100

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 requires words to be separated by exactly one ordinary space. The change is defensive: malformed phrases that a user might accidentally type are now rejected, reducing the chance of accepting an invalid or unexpectedly interpreted recovery phrase.

Lower-priorityscreensaver bugfix: fix trigger condition (#761)by Odudex · 135ff2d6 · Nov 13, 2025 · 1 fileMessage 53 · ThinTriage 0Details
Commit message · Odudex

screensaver bugfix: fix trigger condition (#761)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Security candidateAdd backtick to NUM_SPECIAL_2 (#766)by Tads · 8df6ac23 · Nov 13, 2025 · 4 filesMessage 53 · ThinTriage 12Details
Commit message · Tads

Add backtick to NUM_SPECIAL_2 (#766)

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
boot or update path