Invariants / CN-WIRE-07

CN-WIRE-07

CN derived enforced

Each protocol-visible message must decode into one closed, versioned message type

Source

classification_table.md §A

Enforcement trace

Tests 45

  • codec::handshake::tests::roundtrip_every_variant
  • codec::handshake::tests::decode_rejects_unknown_tag
  • codec::handshake::tests::decode_rejects_truncated_input
  • codec::handshake::tests::decode_rejects_invalid_utf8_in_text_fields
  • codec::n2c_handshake::tests::roundtrip_every_variant
  • codec::n2c_handshake::tests::decode_rejects_unknown_tag
  • codec::n2c_handshake::tests::decode_rejects_truncated_input
  • codec::n2c_handshake::tests::decode_rejects_invalid_utf8_in_text_fields
  • codec::chain_sync::tests::roundtrip_every_variant
  • codec::chain_sync::tests::decode_rejects_unknown_tag
  • codec::chain_sync::tests::decode_rejects_truncated_input
  • codec::block_fetch::tests::roundtrip_every_variant
  • codec::block_fetch::tests::decode_rejects_unknown_tag
  • codec::block_fetch::tests::decode_rejects_truncated_input
  • codec::tx_submission::tests::roundtrip_every_variant
  • codec::tx_submission::tests::decode_rejects_unknown_tag
  • codec::tx_submission::tests::decode_rejects_truncated_input
  • codec::keep_alive::tests::roundtrip_every_variant
  • codec::keep_alive::tests::decode_rejects_unknown_tag
  • codec::keep_alive::tests::decode_rejects_truncated_input
  • codec::peer_sharing::tests::roundtrip_every_variant
  • codec::peer_sharing::tests::decode_rejects_unknown_tag
  • codec::peer_sharing::tests::decode_rejects_truncated_input
  • codec::local_chain_sync::tests::roundtrip_every_variant
  • codec::local_chain_sync::tests::decode_rejects_unknown_tag
  • codec::local_chain_sync::tests::decode_rejects_truncated_input
  • codec::local_tx_submission::tests::roundtrip_every_variant
  • codec::local_tx_submission::tests::decode_rejects_unknown_tag
  • codec::local_tx_submission::tests::decode_rejects_truncated_input
  • codec::local_state_query::tests::roundtrip_every_variant
  • codec::local_state_query::tests::decode_rejects_unknown_tag
  • codec::local_state_query::tests::decode_rejects_truncated_input
  • codec::local_tx_monitor::tests::roundtrip_every_variant
  • codec::local_tx_monitor::tests::decode_rejects_unknown_tag
  • codec::local_tx_monitor::tests::decode_rejects_truncated_input
  • codec::local_tx_monitor::tests::decode_rejects_invalid_utf8_measure_name
  • handshake_real_capture_corpus::real_capture_round_trips_byte_identical
  • chain_sync_real_capture_corpus::real_capture_round_trips_byte_identical
  • chain_sync_real_capture_corpus::rollforward_header_opaque_pass_through
  • block_fetch_real_capture_corpus::real_capture_round_trips_byte_identical
  • block_fetch_real_capture_corpus::block_body_is_wrapped_cbor_item
  • keep_alive_real_capture_corpus::real_capture_round_trips_byte_identical
  • peer_sharing_real_capture_corpus::real_capture_round_trips_byte_identical
  • n2c_handshake_real_capture_corpus::real_capture_round_trips_byte_identical
  • n2c_handshake_real_capture_corpus::accept_version_decodes_to_semantic_version_range

Strengthened in

Attack rationale

Prevents ambiguous dispatch and version confusion in miniprotocols.

Evidence notes

Cardano-specific: addresses Cardano's protocol message versioning (N2N/N2C version negotiation, per-version message sets). S-A2 lands closed message taxonomy + CBOR codecs for all 11 protocols. Byte-identicality against real cardano-node 11.0.1 wire bytes proven for 6 of 11 protocols via *_real_capture_corpus tests (S-A9 partial): N2N handshake, chain-sync, block-fetch, keep-alive, peer-sharing, N2C handshake. Three codec wire-form bugs were uncovered + fixed by this real interop: chain-sync RollForward header era-wrap, block-fetch flat RequestRange triple, N2C version 0x8000 wire flag. Remaining 5 (tx-submission2, local-chain-sync, local-tx-submission, local-state-query, local-tx-monitor) pending.