7. Normative dependencies
Fetched from github.com/bitcoin/bips at commit 7c7cb232 on 24 September
2026. Status and version are copied from each file's header. "Draft" and
"Complete" are the BIP process's own words; neither means the same as
Deployed.
| Document | File | Status (version) | Used for | nullroute |
|---|---|---|---|---|
| BIP-32 | bip-0032.mediawiki |
Deployed | Key derivation | Vectors 1 to 4 in spec/vectors/bip32.json. Vector 5, the invalid extended keys, extracted into spec/vectors/bip32-invalid-keys.json (bips c0644a05): all 16 refused by parseExtendedKey (INV-BIP32-3) and by every path a key from outside takes, through the descriptor parser (INV-DPARSE-3) |
| BIP-39 | bip-0039.mediawiki |
Deployed | Mnemonic, ENT = 256 | Vectors in spec/vectors/bip39-english.json |
| BIP-44, 49, 84, 86 | bip-0044, bip-0049, bip-0084, bip-0086 |
Deployed | Single-key account paths | Vectors in spec/vectors/bip84-86-addresses.json for 84 and 86 |
| BIP-48 | bip-0048.mediawiki |
Deployed | Multisig account paths | Used |
| BIP-67 | bip-0067.mediawiki |
Complete | sortedmulti key order |
Used |
| BIP-125 | bip-0125.mediawiki |
Deployed | Replaceability shown in review | SP-REV-9 |
| BIP-143 | bip-0143.mediawiki |
Deployed | Segwit v0 sighash | SP-REV-3 basis. Examples extracted into spec/vectors/bip143-sighash.json (bips d1d2042c): all 14 sighashes and all 12 keyed signatures reproduced, the p2wpkh, sh(wpkh) and sh(wsh(multi)) ones through the signing call |
| BIP-173, 350 | bip-0173, bip-0350 |
Deployed | Address encoding | SP-HW-2 arithmetic |
| BIP-174 | bip-0174.mediawiki |
Deployed (1.4.4) | PSBT | Required. Vectors extracted into spec/vectors/bip174-psbt.json (bips d1d2042c): all 20 invalid refused, all 10 valid parse, both walk-through signer steps reproduced, and the Input Finalizer's PSBT and the Transaction Extractor's transaction reproduced by the call the signer finalises with (INV-SIG-12) |
| BIP-370 | bip-0370.mediawiki |
Deployed | PSBT version 2 | Not supported. This profile requires version 0 only. nullroute refuses every version 2 PSBT the BIP publishes, with a message asking for a version 0 export (INV-PSBT-19, spec/vectors/bip370-psbt.json) |
| BIP-340, 341, 342 | bip-0340, bip-0341, bip-0342 |
Deployed | Taproot signing and scripts | SP-SIG-1, SP-REV-3. Vectors in spec/vectors/bip340-test-vectors.csv and spec/vectors/bip341-wallet-test-vectors.json (bips d1d2042c); BIP-342 publishes none |
| BIP-380, 381, 382, 383, 386, 387 | bip-0380 and the rest |
Deployed | Descriptors, including multi_a and sortedmulti_a |
Checksum required unless explicitly overridden (core.descriptor.parse); checksum vectors in spec/vectors/bip380-checksum.json. Key expressions extracted into spec/vectors/bip380-key-expressions.json (bips 93607da0): the 10 valid ones with no private key or hardened wildcard parse to what they name, the other 11 are refused by design, and all 16 invalid ones are refused, H as a hardened marker included (INV-DPARSE-1, INV-DPARSE-3, INV-DPARSE-4). BIP-381 to 386 vectors extracted into spec/vectors/bip381-descriptors.json to bip386-descriptors.json (INV-DESC-9, INV-DESC-10): of 52 valid descriptors, 3 derive the published script (sh(wsh(multi())), tr(KEY), tr(KEY,pk(KEY))), 23 parse and are refused by the evaluator as kinds it does not derive, and 26 hold a private key and are refused; all 32 invalid ones are refused at parse (INV-DPARSE-12). BIP-387 vectors extracted into spec/vectors/bip387-descriptors.json (bips 5aadddb5, INV-DESC-9, INV-DESC-10): of 6 valid descriptors, 2 derive the published script (tr(KEY,multi_a()), and tr(KEY,sortedmulti_a()) at children 0 to 2) and 4 hold a private key and are refused, though 2 of those, run with each xprv replaced by its public half, derive the published script too; all 7 invalid ones are refused at parse. No BIP-387 case failed |
| BIP-384, 385 | bip-0384, bip-0385 |
Deployed | combo(), raw(), addr() |
Not supported. They parse and nothing is derived from them; their published vectors run with the rows above |
| BIP-389 | bip-0389.mediawiki |
Draft | Multipath key expressions | A subset: nullroute accepts the multipath element only as the last step before the wildcard, where BIP-389 allows further /NUM steps after it (bip-0389.mediawiki lines 42-46), and of an element with more than two values derives only the first two, as receive and change (line 53). Vectors extracted into spec/vectors/bip389-descriptors.json (bips 5aadddb5, INV-DPARSE-10, INV-DPARSE-11): of 6 valid descriptors, 2 (pk(), pkh()) parse and match every descriptor the BIP expands them into, though neither is a kind nullroute derives, 3 are refused for steps after the element and 1 for its private key; all 8 invalid ones are refused at parse. Running them found that elements of different lengths in one descriptor, and a repeated value in one element, were accepted and derived addresses; both are refused now (INV-DPARSE-11) |
| BIP-322 | bip-0322.mediawiki |
Complete (2.0.0) | Message signing | INV-MSG-6 reproduces the ECDSA signature published in bip-0322/basic-test-vectors.json byte for byte |
| BIP-329 | bip-0329.mediawiki |
Draft | Label import and export | Labels never decide ownership (INV-DAEMON-21) |
| BIP-129 | bip-0129.mediawiki |
Complete | BSMS setup files | Import only |
| BIP-85 | bip-0085.mediawiki |
Deployed (2.1.0) | Child seeds | Outside this profile |
| BIP-388 | bip-0388.mediawiki |
Complete (1.1.0) | Wallet policies | Not used |
| BBQr | coinkite/BBQr, BBQr.md |
"Deployed Widely" (README) | Multi-frame QR | Section 6 |
| RFC 2119, RFC 8174 | rfc-editor.org | BCP 14 | Requirement words | Section 1.1 |
| RFC 6979 | rfc-editor.org | Informational RFC | ECDSA nonces | SP-SIG-1. Not fetched for this document; cited as nullroute's specs cite it |
SP-DEP-1. A conforming signer MUST implement BIP-32, BIP-39, BIP-174 and
the descriptor documents it claims, and MUST pass the published vectors of each
where the BIP provides them. Check: nullroute's vectors in spec/vectors/;
research/handoff-D.md, "BIP vectors for SP-DEP-1", lists per BIP which
published vectors nullroute includes and which it does not. BIP-143, BIP-174,
BIP-340 and BIP-341 are now included (INV-PSBT-9, INV-PSBT-18, INV-SIG-6 to
INV-SIG-10, INV-SIG-12, INV-TR-6), and so are BIP-32 test vector 5 and the
key expression and descriptor vectors of BIP-380 to BIP-387 and BIP-389
(INV-BIP32-3, INV-DPARSE-1, INV-DPARSE-3, INV-DPARSE-4, INV-DPARSE-10,
INV-DPARSE-11, INV-DESC-9, INV-DESC-10). Most valid descriptor vectors are kinds
nullroute does not derive from, or hold a private key; the section 7 rows say
how many of each. Where nullroute's own path cannot take a vector's input (raw
keys rather than a seed, a tapleaf it refuses, or a script with
OP_CODESEPARATOR), the test runs the library call that path makes and says so;
the invariant statements name each such limit.
7.1 nullroute conformance
| Id | Status | Evidence |
|---|---|---|
| SP-DEP-1 | Met for what nullroute implements; valid vectors outside that are asserted refused, each with its reason | BIP-32: all five vectors (INV-BIP32-3). BIP-39: all 24 English vectors; the device reads English only, so the other languages' vectors do not apply. BIP-174: every invalid PSBT refused, every valid one parsed, both signer steps and the Input Finalizer and Transaction Extractor outputs reproduced (INV-PSBT-9, INV-PSBT-18, INV-SIG-8, INV-SIG-12); combiner outputs are parsed only, since the device does not combine. BIP-380 to 387 and 389: every published vector run (INV-DPARSE-1, INV-DPARSE-3, INV-DPARSE-4, INV-DPARSE-10, INV-DPARSE-11, INV-DESC-9, INV-DESC-10). Running them found five defects, all fixed: invalid xpubs, the H marker, two uncompressed-key cases, and BIP-389 tuples of different lengths or with a repeated value |
Rendered from spec/signer-profile.md, the same bytes that ship with the code. SHA-256 4138440d8a2b925d07a9b6d1d96d4189a74c399b5fc717ae27a79d65c0065817