Skip to the content
nullroute
Browse the docs

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