//! Contains test vectors for network protocol address messages: //! * addr (v1): [addr Bitcoin Reference](https://developer.bitcoin.org/reference/p2p_networking.html#addr) //! * addrv2: [ZIP-155](https://zips.z.cash/zip-0155#specification) //! //! These formats are deserialized into the //! `zebra_network::protocol::external::Message::Addr` variant. use hex::FromHex; use lazy_static::lazy_static; lazy_static! { /// Array of `addr` (v1) test vectors containing IP addresses. /// /// These test vectors can be read by [`zebra_network::protocol::external::Codec::read_addr`]. /// They should produce successful results containing IP addresses. // From https://github.com/zingolabs/zcash/blob/9ee66e423a3fbf4829ffeec354e82f4fbceff864/src/test/netbase_tests.cpp#L397 pub static ref ADDR_V1_IP_VECTORS: Vec> = vec![ // stream_addrv1_hex >::from_hex( concat!( "02", // number of entries "61bc6649", // time, Fri Jan 9 02:54:25 UTC 2009 "0000000000000000", // service flags, NODE_NONE "00000000000000000000000000000001", // address, fixed 16 bytes (IPv4-mapped IPv6), ::1 "0000", // port, 0 "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "0100000000000000", // service flags, NODE_NETWORK "00000000000000000000000000000001", // address, fixed 16 bytes (IPv4-mapped IPv6), ::1 "00f1", // port, 241 ) ).expect("Message bytes are in valid hex representation"), // stream_torv3_incompatibly_serialized_to_v1 >::from_hex( concat!( "01", // number of entries "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "0100000000000000", // service flags, NODE_NETWORK "00000000000000000000000000000000", // address, fixed 16 bytes (IPv4-mapped IPv6), :: "235a", // port, 9050 ) ).expect("Message bytes are in valid hex representation"), // Extra test cases: // // all services flags set >::from_hex( concat!( "01", // number of entries "61bc6649", // time, Fri Jan 9 02:54:25 UTC 2009 "ffffffffffffffff", // service flags, all set "00000000000000000000000000000001", // address, fixed 16 bytes (IPv4-mapped IPv6), ::1 "0000", // port, 0 ) ).expect("Message bytes are in valid hex representation"), // IPv4 >::from_hex( concat!( "01", // number of entries "61bc6649", // time, Fri Jan 9 02:54:25 UTC 2009 "0100000000000000", // service flags, NODE_NETWORK // address, fixed 16 bytes (IPv4-mapped IPv6), "00000000000000000000ffff", // IPv4-mapped IPv6 prefix, ::ffff... "7f000001", // IPv4, 127.0.0.1 "0000", // port, 0 ) ).expect("Message bytes are in valid hex representation"), ]; /// Array of empty or unsupported `addr` (v1) test vectors. /// /// These test vectors can be read by [`zebra_network::protocol::external::Codec::read_addr`]. /// They should produce successful but empty results. pub static ref ADDR_V1_EMPTY_VECTORS: Vec> = vec![ // Empty list >::from_hex( "00" // number of entries ).expect("Message bytes are in valid hex representation"), ]; /// Array of ZIP-155 test vectors containing IP addresses. /// /// Some test vectors also contain some unsupported addresses. /// /// These test vectors can be read by [`zebra_network::protocol::external::Codec::read_addrv2`], /// They should produce successful results containing IP addresses. // From https://github.com/zingolabs/zcash/blob/9ee66e423a3fbf4829ffeec354e82f4fbceff864/src/test/netbase_tests.cpp#L421 pub static ref ADDR_V2_IP_VECTORS: Vec> = vec![ // stream_addrv2_hex >::from_hex( concat!( "03", // number of entries "61bc6649", // time, Fri Jan 9 02:54:25 UTC 2009 "00", // service flags, COMPACTSIZE(NODE_NONE) "02", // network id, IPv6 "10", // address length, COMPACTSIZE(16) "00000000000000000000000000000001", // address, ::1 "0000", // port, 0 "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "02", // network id, IPv6 "10", // address length, COMPACTSIZE(16) "00000000000000000000000000000001", // address, ::1 "00f1", // port, 241 "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "04", // network id, TorV3 "20", // address length, COMPACTSIZE(32) "53cd5648488c4707914182655b7664034e09e66f7e8cbf1084e654eb56c5bd88", // address, (32 byte Tor v3 onion service public key) "235a", // port, 9050 ) ).expect("Message bytes are in valid hex representation"), // Extra test cases: // // IPv4 >::from_hex( concat!( "02", // number of entries "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "01", // network id, IPv4 "04", // address length, COMPACTSIZE(4) "7f000001", // address, 127.0.0.1 "0001", // port, 1 // check that variable-length encoding works "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "02", // network id, IPv6 "10", // address length, COMPACTSIZE(16) "00000000000000000000000000000001", // address, ::1 "00f1", // port, 241 ) ).expect("Message bytes are in valid hex representation"), // all services flags set >::from_hex( concat!( "01", // number of entries "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "ffffffffffffffffff", // service flags, COMPACTSIZE(all flags set) "02", // network id, IPv6 "10", // address length, COMPACTSIZE(16) "00000000000000000000000000000001", // address, ::1 "0000", // port, 0 ) ).expect("Message bytes are in valid hex representation"), // Unknown Network ID: address within typical size range >::from_hex( concat!( "02", // number of entries "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "fb", // network id, (unknown) "08", // address length, COMPACTSIZE(8) "0000000000000000", // address, (8 zero bytes) "0001", // port, 1 // check that variable-length encoding works "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "02", // network id, IPv6 "10", // address length, COMPACTSIZE(16) "00000000000000000000000000000001", // address, ::1 "00f1", // port, 241 ) ).expect("Message bytes are in valid hex representation"), // Unknown Network ID: zero-sized address >::from_hex( concat!( "02", // number of entries "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "fc", // network id, (unknown) "00", // address length, COMPACTSIZE(0) "", // address, (no bytes) "0001", // port, 1 // check that variable-length encoding works "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "02", // network id, IPv6 "10", // address length, COMPACTSIZE(16) "00000000000000000000000000000001", // address, ::1 "00f1", // port, 241 ) ).expect("Message bytes are in valid hex representation"), // Unknown Network ID: maximum-sized address >::from_hex( format!("{}{}{}", concat!( "02", // number of entries "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "fd", // network id, (unknown) "fd0002", // address length, COMPACTSIZE(512) ), "00".repeat(512), // address, (512 zero bytes) concat!( "0001", // port, 1 // check that variable-length encoding works "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "02", // network id, IPv6 "10", // address length, COMPACTSIZE(16) "00000000000000000000000000000001", // address, ::1 "00f1", // port, 241 ) ) ).expect("Message bytes are in valid hex representation"), ]; /// Array of empty or unsupported ZIP-155 test vectors. /// /// These test vectors can be read by [`zebra_network::protocol::external::Codec::read_addrv2`]. /// They should produce successful but empty results. // From https://github.com/zingolabs/zcash/blob/9ee66e423a3fbf4829ffeec354e82f4fbceff864/src/test/netbase_tests.cpp#L421 pub static ref ADDR_V2_EMPTY_VECTORS: Vec> = vec![ // torv3_hex >::from_hex( concat!( "01", // number of entries "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "04", // network id, TorV3 "20", // address length, COMPACTSIZE(32) "53cd5648488c4707914182655b7664034e09e66f7e8cbf1084e654eb56c5bd88", // address, (32 byte Tor v3 onion service public key) "235a", // port, 9050 ) ).expect("Message bytes are in valid hex representation"), // Extra test cases: // // Empty list >::from_hex( "00" // number of entries ).expect("Message bytes are in valid hex representation"), ]; /// Array of invalid ZIP-155 test vectors. /// /// These test vectors can be read by [`zebra_network::protocol::external::Codec::read_addrv2`]. /// They should fail deserialization. pub static ref ADDR_V2_INVALID_VECTORS: Vec> = vec![ // Invalid address size: too large, but under CompactSizeMessage limit >::from_hex( format!("{}{}{}", concat!( "02", // number of entries "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "fe", // network id, (unknown) "fd0102", // invalid address length, COMPACTSIZE(513) ), "00".repeat(513), // address, (513 zero bytes) concat!( "0001", // port, 1 // check that the entire message is ignored "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "02", // network id, IPv6 "10", // address length, COMPACTSIZE(16) "00000000000000000000000000000001", // address, ::1 "00f1", // port, 241 ) ) ).expect("Message bytes are in valid hex representation"), // Invalid address size: too large, over CompactSizeMessage limit >::from_hex( concat!( "01", // number of entries "79627683", // time, Tue Nov 22 11:22:33 UTC 2039 "01", // service flags, COMPACTSIZE(NODE_NETWORK) "ff", // network id, (unknown) "feffffff7f", // invalid address length, COMPACTSIZE(2^31 - 1) // no address, generated bytes wouldn't fit in memory ), ).expect("Message bytes are in valid hex representation"), ]; }