15
15
//!
16
16
//! ```no_run
17
17
//! use bip324::io::{Protocol, Payload};
18
- //! use bip324::serde::{serialize, deserialize, NetworkMessage};
18
+ //! use bitcoin::consensus::{serialize, deserialize};
19
+ //! use p2p::message::{NetworkMessage, V2NetworkMessage};
19
20
//! use std::net::TcpStream;
20
21
//! use std::io::BufReader;
21
22
//!
34
35
//! writer,
35
36
//! )?;
36
37
//!
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);
39
40
//! protocol.write(&Payload::genuine(serialized))?;
40
41
//!
41
42
//! let response = protocol.read()?;
42
- //! let response_msg: NetworkMessage = deserialize(&response.contents())?;
43
+ //! let response_msg: V2NetworkMessage = deserialize(&response.contents())?;
43
44
//! # Ok(())
44
45
//! # }
45
46
//! ```
52
53
//! # async fn main() -> Result<(), Box<dyn std::error::Error>> {
53
54
//! use bip324::futures::Protocol;
54
55
//! use bip324::io::Payload;
55
- //! use bip324::serde::{serialize, deserialize, NetworkMessage};
56
+ //! use bitcoin::consensus::{deserialize, serialize};
57
+ //! use p2p::message::{NetworkMessage, V2NetworkMessage};
56
58
//! use tokio::net::TcpStream;
57
59
//! use tokio::io::BufReader;
58
60
//!
70
72
//! writer,
71
73
//! ).await?;
72
74
//!
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);
75
77
//! protocol.write(&Payload::genuine(serialized)).await?;
76
78
//!
77
79
//! 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())?;
98
81
//! # Ok(())
99
82
//! # }
100
83
//! ```
@@ -148,8 +131,6 @@ pub mod futures;
148
131
mod handshake;
149
132
#[ cfg( feature = "std" ) ]
150
133
pub mod io;
151
- #[ cfg( feature = "std" ) ]
152
- pub mod serde;
153
134
154
135
use core:: fmt;
155
136
@@ -168,6 +149,7 @@ pub use handshake::{
168
149
} ;
169
150
170
151
use fschacha20poly1305:: { FSChaCha20 , FSChaCha20Poly1305 } ;
152
+ use p2p:: NetworkExt ;
171
153
172
154
/// Value for header byte with the decoy flag flipped to true.
173
155
pub const DECOY_BYTE : u8 = 128 ;
@@ -234,10 +216,10 @@ impl fmt::Display for Error {
234
216
"Packet size exceeds maximum 4MiB size for automatic allocation."
235
217
) ,
236
218
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." )
238
220
}
239
221
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:?}." ) ,
241
223
Error :: V1Protocol => write ! ( f, "The remote peer is communicating on the V1 protocol." ) ,
242
224
Error :: TooMuchGarbage => write ! (
243
225
f,
@@ -353,7 +335,7 @@ impl SessionKeyMaterial {
353
335
let ecdh_sk = ElligatorSwift :: shared_secret ( a, b, secret, party, Some ( data) ) ;
354
336
355
337
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 ( ) ;
357
339
let salt = [ ikm_salt, & magic] . concat ( ) ;
358
340
let hk = Hkdf :: < sha256:: Hash > :: new ( salt. as_slice ( ) , ecdh_sk. as_secret_bytes ( ) ) ;
359
341
let mut session_id = [ 0u8 ; 32 ] ;
@@ -376,7 +358,7 @@ impl SessionKeyMaterial {
376
358
hk. expand ( garbage_info, & mut garbage) ?;
377
359
let initiator_garbage_terminator: [ u8 ; 16 ] = garbage[ ..16 ]
378
360
. try_into ( )
379
- . expect ( "first 16 btyes of expanded garbage" ) ;
361
+ . expect ( "first 16 bytes of expanded garbage" ) ;
380
362
let responder_garbage_terminator: [ u8 ; 16 ] = garbage[ 16 ..]
381
363
. try_into ( )
382
364
. expect ( "last 16 bytes of expanded garbage" ) ;
0 commit comments