Skip to content

Commit addc024

Browse files
committed
docs(rc18): align audit report with Orchard release
1 parent 737361d commit addc024

1 file changed

Lines changed: 68 additions & 37 deletions

File tree

scripts/generate-test-report.py

Lines changed: 68 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ def _arg_shown(a):
483483
'- Input: single capacitive button (confirm/reject)',
484484
'- USB: micro-B, HID + WebUSB transports, HID fallback',
485485
'- Storage: BIP-39 seed encrypted in isolated flash region',
486-
'- Curves: secp256k1, ed25519, NIST P-256 (Pallas/Zcash only on KK_ZCASH_PRIVACY=ON builds)',
486+
'- Curves: secp256k1, ed25519, NIST P-256; regular firmware also includes Pallas/Orchard',
487487
'',
488488
'SECURITY MODEL:',
489489
'- All private key operations happen on-device, keys never leave',
@@ -492,12 +492,13 @@ def _arg_shown(a):
492492
'- BIP-39 passphrase creates hidden wallets (plausible deniability)',
493493
'',
494494
'FIRMWARE VARIANTS (7.15, PR #282):',
495-
'- Full multi-chain (default): all coin families; firmware_variant = model name',
495+
'- Full multi-chain (default): all coin families including Zcash Orchard privacy;',
496+
' firmware_variant = model name.',
496497
'- Bitcoin-only (KK_BITCOIN_ONLY): only Bitcoin + Testnet; all altcoin and',
497498
' shielded-Zcash handlers stripped; firmware_variant = KeepKeyBTC (EmulatorBTC',
498499
' on the emulator). Clients gate multi-chain-only tests on this string.',
499-
'- Zcash shielded (KK_ZCASH_PRIVACY): adds the Orchard/Pallas engine; default OFF',
500-
' pending external audit. Mutually exclusive with KK_BITCOIN_ONLY.',
500+
'- There is no separate Zcash artifact: KK_ZCASH_PRIVACY is ON for the regular',
501+
' product and OFF only for KK_BITCOIN_ONLY.',
501502
'',
502503
'SEED LOCK (7.15, PR #282):',
503504
'- A seed created under bitcoin-only firmware is stamped in a reserved storage-',
@@ -994,11 +995,11 @@ def _arg_shown(a):
994995
'500 uosmo is 0.000500 OSMO — no integer part and six decimals; it must not collapse '
995996
'to 0 or lose the trailing digits.',
996997
['Sub-unit amount']),
997-
('P4', 'test_msg_osmosis_signtx', 'test_osmosis_send_non_uosmo_denom_is_refused',
998-
'Direct-wire non-uosmo MsgSend is refused',
999-
'The test bypasses the Python MsgSend fence and sends OsmosisMsgAck directly. Firmware '
1000-
'rejects uatom before review or hashing, so the hardcoded uosmo serializer cannot be '
1001-
'reached under a different displayed asset.',
998+
('P4', 'test_msg_osmosis_signtx', 'test_osmosis_send_denom_is_committed_to_the_signature',
999+
'Direct-wire denomination is committed',
1000+
'Two otherwise-identical raw MsgSend requests using uosmo and uatom produce different '
1001+
'signatures, proving the reviewed denomination is part of the signed payload rather '
1002+
'than a hardcoded display-only label.',
10021003
[]),
10031004
('P5', 'test_msg_osmosis_signtx', 'test_osmosis_send_rejects_noncanonical_wire_amounts',
10041005
'Noncanonical and overflowing uosmo are refused',
@@ -1767,9 +1768,9 @@ def _arg_shown(a):
17671768
('Y', 'Zcash Transparent', '7.0.0',
17681769
'Transparent t-address Zcash (send/receive) over the generic Bitcoin UTXO signing path with '
17691770
'Overwinter/Sapling-v4 branch handling. This is the Zcash functionality that ships ENABLED on '
1770-
'the default 7.15.0 build -- t1.../t3... addresses sign like Bitcoin (SECP256K1) with a '
1771+
'the regular 7.15.0 build -- t1.../t3... addresses sign like Bitcoin (SECP256K1) with a '
17711772
'FeeOverThreshold guard. No shielded/Orchard engine is involved; contrast with section Z '
1772-
'(shielded), which is withheld behind KK_ZCASH_PRIVACY.',
1773+
'(shielded), which also ships in the regular product and is stripped from bitcoin-only.',
17731774
[
17741775
'INPUT: TxInputType over the Zcash coin (t-address, SECP256K1)',
17751776
'METADATA: version_group_id + branch_id for the target upgrade',
@@ -1799,13 +1800,11 @@ def _arg_shown(a):
17991800

18001801
('Z', 'Zcash Shielded (Orchard)', '7.14.0',
18011802
'Shielded Orchard (PCZT streaming, Full Viewing Key export, unified-address display with an '
1802-
'on-device ZIP-32 Sec 6.1 seed-fingerprint attestation) is WITHHELD on the default 7.15.0 build. '
1803-
'It is compile-gated behind the KK_ZCASH_PRIVACY build flag, which is DEFAULT-OFF pending an '
1804-
'external audit of the Orchard/Pallas engine. On this build the firmware does not register the '
1805-
'Zcash* shielded messages, so every test in this section SKIPS BY DESIGN (the requires_message '
1806-
'probe returns Failure_UnexpectedMessage) -- this is a deliberate policy hold, NOT missing or '
1807-
'broken support. To exercise these, build the KK_ZCASH_PRIVACY=ON variant. Transparent t-address '
1808-
'Zcash IS live and shipping -- see section Y (Zcash Transparent).',
1803+
'on-device ZIP-32 Sec 6.1 seed-fingerprint attestation) ships in the regular 7.15.0 product. '
1804+
'KK_ZCASH_PRIVACY is enabled for the regular build and disabled only for bitcoin-only. This '
1805+
'report covers device FVK/address behavior and the Python PCZT streaming contract. Mainnet '
1806+
'proof construction and the physical shield, deshield, and Orchard-to-Orchard matrix are '
1807+
'recorded separately in the RC18 release evidence.',
18091808
[
18101809
'FVK: Derive ak, nk, rivk components via ZIP-32 Orchard path',
18111810
'ADDRESS: Device derives its own unified address + shows it; optional seed-fingerprint pin',
@@ -1821,60 +1820,92 @@ def _arg_shown(a):
18211820
'FVK deterministic', 'Same account always produces same FVK.', []),
18221821
('Z4', 'test_msg_zcash_orchard', 'test_fvk_different_accounts',
18231822
'FVK different accounts', 'Different accounts produce different FVKs.', []),
1824-
('Z5', 'test_msg_zcash_sign_pczt', 'test_single_action_legacy_sighash',
1825-
'Sign single Orchard action', 'One shielded action, device shows amount + fee.', ['Shielded confirm']),
1826-
('Z6', 'test_msg_zcash_sign_pczt', 'test_multi_action_legacy_sighash',
1827-
'Sign multiple actions', 'Multiple Orchard actions in one transaction.', []),
1828-
('Z7', 'test_msg_zcash_sign_pczt', 'test_signatures_are_64_bytes',
1829-
'Signature format', 'Orchard signatures must be exactly 64 bytes (RedPallas).', []),
1830-
('Z8', 'test_msg_zcash_sign_pczt', 'test_transparent_shielding_single_input',
1831-
'Transparent to shielded', 'Transparent BTC-like input shielded into Orchard pool.', ['Shielding confirm']),
1832-
('Z9', 'test_msg_zcash_sign_pczt', 'test_transparent_shielding_multiple_inputs',
1833-
'Multi-input shielding', 'Multiple transparent inputs shielded in one tx.', []),
1834-
('Z10', 'test_msg_zcash_display_address', 'test_zcash_display_address_basic',
1823+
('Z5', 'test_msg_zcash_orchard', 'test_fvk_abandon_mnemonic',
1824+
'FVK abandon-mnemonic vector',
1825+
'FVK derivation matches the Orchard reference vector for the standard abandon mnemonic.',
1826+
[]),
1827+
('Z6', 'test_msg_zcash_display_address', 'test_zcash_display_address_basic',
18351828
'Display unified address',
18361829
'Device derives its OWN Orchard unified address (u1...) from the ZIP-32 path, shows it '
18371830
'on the OLED for confirmation, and returns it with the device seed fingerprint. The host '
18381831
'does not supply the address — this defends against a compromised host showing a fake UA.',
18391832
['Unified address (u1...)']),
1840-
('Z11', 'test_msg_zcash_display_address', 'test_zcash_display_address_bad_path_rejected',
1833+
('Z7', 'test_msg_zcash_display_address', 'test_zcash_display_address_bad_path_rejected',
18411834
'Reject malformed address path',
18421835
'A path that is neither m/32\'/133\'/account\' nor an explicit account is rejected with a '
18431836
'SyntaxError, so no wrong-account address is ever derived silently.',
18441837
[]),
1845-
('Z12', 'test_msg_zcash_seed_fingerprint', 'test_get_orchard_fvk_returns_seed_fingerprint',
1838+
('Z8', 'test_msg_zcash_seed_fingerprint', 'test_get_orchard_fvk_returns_seed_fingerprint',
18461839
'FVK carries seed fingerprint',
18471840
'ZcashGetOrchardFVK returns a 32-byte ZIP-32 §6.1 seed fingerprint alongside the FVK.',
18481841
[]),
1849-
('Z13', 'test_msg_zcash_seed_fingerprint', 'test_fingerprint_stable_across_accounts',
1842+
('Z9', 'test_msg_zcash_seed_fingerprint', 'test_fingerprint_stable_across_accounts',
18501843
'Fingerprint bound to seed not account',
18511844
'The seed fingerprint is identical across account indices — it identifies the device seed.',
18521845
[]),
1853-
('Z14', 'test_msg_zcash_seed_fingerprint', 'test_display_address_helper_accepts_matching_fingerprint',
1846+
('Z10', 'test_msg_zcash_seed_fingerprint', 'test_display_address_helper_accepts_matching_fingerprint',
18541847
'Address display accepts matching fingerprint',
18551848
'When the host supplies expected_seed_fingerprint and it matches, the device derives and '
18561849
'displays the address and echoes the fingerprint.',
18571850
['Unified address (u1...)']),
1858-
('Z15', 'test_msg_zcash_seed_fingerprint', 'test_display_address_helper_rejects_wrong_fingerprint',
1851+
('Z11', 'test_msg_zcash_seed_fingerprint', 'test_display_address_helper_rejects_wrong_fingerprint',
18591852
'Address display rejects wrong fingerprint',
18601853
'A mismatched expected_seed_fingerprint is rejected before any derivation — the host '
18611854
'cannot get an attestation from the wrong device.',
18621855
[]),
1863-
('Z16', 'test_msg_zcash_seed_fingerprint', 'test_display_address_helper_backward_compat',
1856+
('Z12', 'test_msg_zcash_seed_fingerprint', 'test_display_address_helper_backward_compat',
18641857
'Address display without fingerprint',
18651858
'Omitting expected_seed_fingerprint still works; the device populates the fingerprint on '
18661859
'the response regardless.',
18671860
[]),
1868-
('Z17', 'test_msg_zcash_seed_fingerprint', 'test_device_fingerprint_matches_python_helper',
1861+
('Z13', 'test_msg_zcash_seed_fingerprint', 'test_device_fingerprint_matches_python_helper',
18691862
'Fingerprint matches host computation',
18701863
'The device-derived fingerprint equals calculate_seed_fingerprint(seed) — firmware C and '
18711864
'the python helper agree byte-for-byte for the all-all-all seed.',
18721865
[]),
1873-
('Z18', 'test_msg_zcash_seed_fingerprint', 'test_sign_pczt_helper_rejects_wrong_fingerprint',
1866+
('Z14', 'test_msg_zcash_seed_fingerprint', 'test_sign_pczt_helper_rejects_wrong_fingerprint',
18741867
'PCZT signing rejects wrong fingerprint',
18751868
'A wrong expected_seed_fingerprint on a PCZT signing request is rejected before any '
18761869
'signing crypto runs.',
18771870
[]),
1871+
('Z15', 'test_msg_zcash_sign_pczt',
1872+
'test_all_dummy_shield_streams_outputs_inputs_and_no_orchard_sigs',
1873+
'Shield streams dummy actions without device signatures',
1874+
'The client streams transparent inputs/outputs and both dummy Orchard actions, preserves '
1875+
'their finalized PCZT signatures, and expects no compact device Orchard signatures.',
1876+
[]),
1877+
('Z16', 'test_msg_zcash_sign_pczt',
1878+
'test_mixed_deshield_returns_only_real_spend_signature',
1879+
'Deshield returns only real-spend signatures',
1880+
'A mixed real/dummy Orchard action set returns one compact signature for the real spend.',
1881+
[]),
1882+
('Z17', 'test_msg_zcash_sign_pczt',
1883+
'test_private_send_preserves_compact_real_spend_order',
1884+
'Private send preserves real-spend signature order',
1885+
'Compact device signatures remain ordered by the real-spend actions when dummy actions '
1886+
'are interleaved.',
1887+
[]),
1888+
('Z18', 'test_msg_zcash_sign_pczt',
1889+
'test_missing_is_spend_is_rejected_before_device_call',
1890+
'Missing spend classification rejected',
1891+
'Every action must explicitly declare is_spend before any device call is made.',
1892+
[]),
1893+
('Z19', 'test_msg_zcash_sign_pczt',
1894+
'test_host_transparent_sighash_is_rejected_before_device_call',
1895+
'Host transparent sighash rejected',
1896+
'The client refuses a host-provided transparent sighash instead of forwarding it as '
1897+
'trusted device input.',
1898+
[]),
1899+
('Z20', 'test_msg_zcash_sign_pczt',
1900+
'test_signature_count_must_match_real_spends',
1901+
'Signature count bound to real spends',
1902+
'The returned compact signature count must equal the number of real-spend actions.',
1903+
[]),
1904+
('Z21', 'test_msg_zcash_sign_pczt',
1905+
'test_duplicate_action_request_is_rejected',
1906+
'Duplicate action requests rejected',
1907+
'A repeated device request for the same action index aborts the streaming session.',
1908+
[]),
18781909
]),
18791910

18801911
('D', 'BIP-85 Child Derivation', '7.14.0',

0 commit comments

Comments
 (0)