AI-generated analysisPublished automatically and not human-verified. Validated context appears in community notes below.
← Watch feed
Low 43 Bitcoin

BIP-322 changes after BIP got in to the complete state

Public commit record

What the developer wrote

Authored by scgbckbone

50/100 · Thin
BIP-322 changes after BIP got in to the complete state
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
The short version

What changed, and why it matters

This commit updates COLDCARD's BIP-322 (Bitcoin message signing / proof-of-reserves) implementation to match the finalized BIP-322 specification. The main user-visible change is that the message to be signed must now be embedded directly in the PSBT file under a new standard field, instead of being imported separately by the user. The device verifies that the embedded message matches the on-screen message before signing. The change also adds HSM policy checks so BIP-322 signing is governed by message-signing rules, and it prevents BIP-322 PSBTs from being finalized into broadcastable transactions. There is no obvious vulnerability introduced; it is primarily a standards-compliance and safety hardening patch.

Recommended action

Review the new validation logic in shared/psbt.py validate_bip322_input0 for completeness, especially the witness-UTXO reconstruction path and the handling of non-ASCII message warnings. Confirm that HSM msg_paths enforcement covers multisig and WIF-store edge cases. Because the patch is large and changes both parsing and policy, run the full BIP-322 and HSM test matrices (including --psbt2) before release.

Security signals we found

01

BIP-322 message now embedded in PSBT and verified against reconstructed to_spend, reducing reliance on external/user-supplied message files

02

BIP-322 PSBTs are explicitly prevented from being finalized into broadcastable transactions

03

HSM policy now applies message-signing path restrictions to BIP-322 PSBTs

04

SIGHASH_ALL is enforced for BIP-322 inputs

05

Legacy proof-of-reserves PSBTs without PSBT_GLOBAL_GENERIC_SIGNED_MESSAGE are rejected

06

Segwit v0 address rendering now requires exact script length (22 or 34 bytes), hardening against malformed scripts

07

Empty scriptPubKey inputs are rejected (new regression test test_empty_input_scriptPubKey)

Risk score

Why this scored 43/100

Our methodology →
Potential impact 12/30
Exploitability 8/25
Stealth signal 5/15
Affected reach 7/15
Confidence 7/10
Evidence quality 4/5
Human-validated context

Community notes

Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.

No validated notes yet.

The AI analysis stands alone for now. Submit a note if you can add evidence or important context.