1515//!
1616//! ```no_run
1717//! use bip324::io::{Protocol, Payload};
18- //! use bip324::serde::{serialize, deserialize, NetworkMessage};
18+ //! use bitcoin::consensus::{serialize, deserialize};
19+ //! use p2p::message::{NetworkMessage, V2NetworkMessage};
1920//! use std::net::TcpStream;
2021//! use std::io::BufReader;
2122//!
3435//! writer,
3536//! )?;
3637//!
37- //! let ping_msg = NetworkMessage::Ping(0xdeadbeef);
38- //! let serialized = serialize(ping_msg);
38+ //! let ping_msg = V2NetworkMessage::new( NetworkMessage::Ping(0xdeadbeef) );
39+ //! let serialized = serialize(& ping_msg);
3940//! protocol.write(&Payload::genuine(serialized))?;
4041//!
4142//! let response = protocol.read()?;
42- //! let response_msg: NetworkMessage = deserialize(&response.contents())?;
43+ //! let response_msg: V2NetworkMessage = deserialize(&response.contents())?;
4344//! # Ok(())
4445//! # }
4546//! ```
5253//! # async fn main() -> Result<(), Box<dyn std::error::Error>> {
5354//! use bip324::futures::Protocol;
5455//! use bip324::io::Payload;
55- //! use bip324::serde::{serialize, deserialize, NetworkMessage};
56+ //! use bitcoin::consensus::{deserialize, serialize};
57+ //! use p2p::message::{NetworkMessage, V2NetworkMessage};
5658//! use tokio::net::TcpStream;
5759//! use tokio::io::BufReader;
5860//!
7072//! writer,
7173//! ).await?;
7274//!
73- //! let ping_msg = NetworkMessage::Ping(12345); // nonce
74- //! let serialized = serialize(ping_msg);
75+ //! let ping_msg = V2NetworkMessage::new( NetworkMessage::Ping(12345) ); // nonce
76+ //! let serialized = serialize(& ping_msg);
7577//! protocol.write(&Payload::genuine(serialized)).await?;
7678//!
7779//! let response = protocol.read().await?;
78- //! let response_msg: NetworkMessage = deserialize(&response.contents())?;
79- //! # Ok(())
80- //! # }
81- //! ```
82- //!
83- //! # Message Serialization
84- //!
85- //! BIP-324 introduces specific changes to how bitcoin P2P messages are serialized for V2 transport.
86- //! The [`serde`] module provides these serialization functions.
87- //!
88- //! ```no_run
89- //! # #[cfg(feature = "std")]
90- //! # fn main() -> Result<(), Box<dyn std::error::Error>> {
91- //! use bip324::serde::{serialize, deserialize, NetworkMessage};
92- //!
93- //! let ping_msg = NetworkMessage::Ping(0xdeadbeef);
94- //! let serialized = serialize(ping_msg);
95- //!
96- //! let received_bytes = vec![0x12, 0xef, 0xbe, 0xad, 0xde, 0, 0, 0, 0];
97- //! let message: NetworkMessage = deserialize(&received_bytes)?;
80+ //! let response_msg: V2NetworkMessage = deserialize(&response.contents())?;
9881//! # Ok(())
9982//! # }
10083//! ```
@@ -148,8 +131,6 @@ pub mod futures;
148131mod handshake;
149132#[ cfg( feature = "std" ) ]
150133pub mod io;
151- #[ cfg( feature = "std" ) ]
152- pub mod serde;
153134
154135use core:: fmt;
155136
@@ -168,6 +149,7 @@ pub use handshake::{
168149} ;
169150
170151use fschacha20poly1305:: { FSChaCha20 , FSChaCha20Poly1305 } ;
152+ use p2p:: NetworkExt ;
171153
172154/// Value for header byte with the decoy flag flipped to true.
173155pub const DECOY_BYTE : u8 = 128 ;
@@ -234,10 +216,10 @@ impl fmt::Display for Error {
234216 "Packet size exceeds maximum 4MiB size for automatic allocation."
235217 ) ,
236218 Error :: NoGarbageTerminator => {
237- write ! ( f, "More than 4095 bytes of garbage recieved in the handshake before a terminator was sent." )
219+ write ! ( f, "More than 4095 bytes of garbage received in the handshake before a terminator was sent." )
238220 }
239221 Error :: SecretGeneration ( e) => write ! ( f, "Cannot generate secrets: {e:?}." ) ,
240- Error :: Decryption ( e) => write ! ( f, "Decrytion error: {e:?}." ) ,
222+ Error :: Decryption ( e) => write ! ( f, "Decryption error: {e:?}." ) ,
241223 Error :: V1Protocol => write ! ( f, "The remote peer is communicating on the V1 protocol." ) ,
242224 Error :: TooMuchGarbage => write ! (
243225 f,
@@ -353,7 +335,7 @@ impl SessionKeyMaterial {
353335 let ecdh_sk = ElligatorSwift :: shared_secret ( a, b, secret, party, Some ( data) ) ;
354336
355337 let ikm_salt = "bitcoin_v2_shared_secret" . as_bytes ( ) ;
356- let magic = network. magic ( ) . to_bytes ( ) ;
338+ let magic = network. default_network_magic ( ) . to_bytes ( ) ;
357339 let salt = [ ikm_salt, & magic] . concat ( ) ;
358340 let hk = Hkdf :: < sha256:: Hash > :: new ( salt. as_slice ( ) , ecdh_sk. as_secret_bytes ( ) ) ;
359341 let mut session_id = [ 0u8 ; 32 ] ;
@@ -376,7 +358,7 @@ impl SessionKeyMaterial {
376358 hk. expand ( garbage_info, & mut garbage) ?;
377359 let initiator_garbage_terminator: [ u8 ; 16 ] = garbage[ ..16 ]
378360 . try_into ( )
379- . expect ( "first 16 btyes of expanded garbage" ) ;
361+ . expect ( "first 16 bytes of expanded garbage" ) ;
380362 let responder_garbage_terminator: [ u8 ; 16 ] = garbage[ 16 ..]
381363 . try_into ( )
382364 . expect ( "last 16 bytes of expanded garbage" ) ;
0 commit comments