Skip to content

Commit fe5a076

Browse files
Move blinded message path util into message submodule
1 parent 381cc64 commit fe5a076

File tree

3 files changed

+45
-42
lines changed

3 files changed

+45
-42
lines changed

lightning/src/blinded_path/message.rs

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
use bitcoin::secp256k1::{self, PublicKey, Secp256k1, SecretKey};
2-
use crate::blinded_path::BlindedHop;
2+
3+
use crate::blinded_path::{BlindedHop, BlindedPath};
34
use crate::blinded_path::utils;
45
use crate::io;
6+
use crate::io::Cursor;
7+
use crate::ln::onion_utils;
8+
use crate::onion_message::ControlTlvs;
59
use crate::prelude::*;
6-
use crate::util::ser::{Writeable, Writer};
10+
use crate::sign::{NodeSigner, Recipient};
11+
use crate::util::chacha20poly1305rfc::ChaChaPolyReadAdapter;
12+
use crate::util::ser::{FixedLengthReader, LengthReadableArgs, Writeable, Writer};
13+
14+
use core::mem;
15+
use core::ops::Deref;
716

817
/// TLVs to encode in an intermediate onion message packet's hop data. When provided in a blinded
918
/// route, they are encoded into [`BlindedHop::encrypted_payload`].
@@ -77,3 +86,32 @@ pub(super) fn blinded_hops<T: secp256k1::Signing + secp256k1::Verification>(
7786

7887
Ok(blinded_hops)
7988
}
89+
90+
// Advance the blinded onion message path by one hop, so make the second hop into the new
91+
// introduction node.
92+
pub(crate) fn advance_path_by_one<NS: Deref, T: secp256k1::Signing + secp256k1::Verification>(
93+
path: &mut BlindedPath, node_signer: &NS, secp_ctx: &Secp256k1<T>
94+
) -> Result<(), ()> where NS::Target: NodeSigner {
95+
let control_tlvs_ss = node_signer.ecdh(Recipient::Node, &path.blinding_point, None)?;
96+
let rho = onion_utils::gen_rho_from_shared_secret(&control_tlvs_ss.secret_bytes());
97+
let encrypted_control_tlvs = path.blinded_hops.remove(0).encrypted_payload;
98+
let mut s = Cursor::new(&encrypted_control_tlvs);
99+
let mut reader = FixedLengthReader::new(&mut s, encrypted_control_tlvs.len() as u64);
100+
match ChaChaPolyReadAdapter::read(&mut reader, rho) {
101+
Ok(ChaChaPolyReadAdapter { readable: ControlTlvs::Forward(ForwardTlvs {
102+
mut next_node_id, next_blinding_override,
103+
})}) => {
104+
let mut new_blinding_point = match next_blinding_override {
105+
Some(blinding_point) => blinding_point,
106+
None => {
107+
onion_utils::next_hop_pubkey(secp_ctx, path.blinding_point,
108+
control_tlvs_ss.as_ref()).map_err(|_| ())?
109+
}
110+
};
111+
mem::swap(&mut path.blinding_point, &mut new_blinding_point);
112+
mem::swap(&mut path.introduction_node_id, &mut next_node_id);
113+
Ok(())
114+
},
115+
_ => Err(())
116+
}
117+
}

lightning/src/blinded_path/mod.rs

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,11 @@ pub(crate) mod utils;
1414

1515
use bitcoin::secp256k1::{self, PublicKey, Secp256k1, SecretKey};
1616

17-
use crate::sign::{EntropySource, NodeSigner, Recipient};
18-
use crate::onion_message::ControlTlvs;
17+
use crate::sign::EntropySource;
1918
use crate::ln::msgs::DecodeError;
20-
use crate::ln::onion_utils;
21-
use crate::util::chacha20poly1305rfc::ChaChaPolyReadAdapter;
22-
use crate::util::ser::{FixedLengthReader, LengthReadableArgs, Readable, Writeable, Writer};
19+
use crate::util::ser::{Readable, Writeable, Writer};
2320

24-
use core::mem;
25-
use core::ops::Deref;
26-
use crate::io::{self, Cursor};
21+
use crate::io;
2722
use crate::prelude::*;
2823

2924
/// Onion messages and payments can be sent and received to blinded paths, which serve to hide the
@@ -77,36 +72,6 @@ impl BlindedPath {
7772
blinded_hops: message::blinded_hops(secp_ctx, node_pks, &blinding_secret).map_err(|_| ())?,
7873
})
7974
}
80-
81-
// Advance the blinded onion message path by one hop, so make the second hop into the new
82-
// introduction node.
83-
pub(super) fn advance_message_path_by_one<NS: Deref, T: secp256k1::Signing + secp256k1::Verification>
84-
(&mut self, node_signer: &NS, secp_ctx: &Secp256k1<T>) -> Result<(), ()>
85-
where NS::Target: NodeSigner
86-
{
87-
let control_tlvs_ss = node_signer.ecdh(Recipient::Node, &self.blinding_point, None)?;
88-
let rho = onion_utils::gen_rho_from_shared_secret(&control_tlvs_ss.secret_bytes());
89-
let encrypted_control_tlvs = self.blinded_hops.remove(0).encrypted_payload;
90-
let mut s = Cursor::new(&encrypted_control_tlvs);
91-
let mut reader = FixedLengthReader::new(&mut s, encrypted_control_tlvs.len() as u64);
92-
match ChaChaPolyReadAdapter::read(&mut reader, rho) {
93-
Ok(ChaChaPolyReadAdapter { readable: ControlTlvs::Forward(message::ForwardTlvs {
94-
mut next_node_id, next_blinding_override,
95-
})}) => {
96-
let mut new_blinding_point = match next_blinding_override {
97-
Some(blinding_point) => blinding_point,
98-
None => {
99-
onion_utils::next_hop_pubkey(secp_ctx, self.blinding_point,
100-
control_tlvs_ss.as_ref()).map_err(|_| ())?
101-
}
102-
};
103-
mem::swap(&mut self.blinding_point, &mut new_blinding_point);
104-
mem::swap(&mut self.introduction_node_id, &mut next_node_id);
105-
Ok(())
106-
},
107-
_ => Err(())
108-
}
109-
}
11075
}
11176

11277
impl Writeable for BlindedPath {

lightning/src/onion_message/messenger.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use bitcoin::hashes::sha256::Hash as Sha256;
1616
use bitcoin::secp256k1::{self, PublicKey, Scalar, Secp256k1, SecretKey};
1717

1818
use crate::blinded_path::BlindedPath;
19-
use crate::blinded_path::message::{ForwardTlvs, ReceiveTlvs};
19+
use crate::blinded_path::message::{advance_path_by_one, ForwardTlvs, ReceiveTlvs};
2020
use crate::blinded_path::utils;
2121
use crate::sign::{EntropySource, KeysManager, NodeSigner, Recipient};
2222
use crate::events::OnionMessageProvider;
@@ -299,7 +299,7 @@ where
299299
let our_node_id = self.node_signer.get_node_id(Recipient::Node)
300300
.map_err(|()| SendError::GetNodeIdFailed)?;
301301
if blinded_path.introduction_node_id == our_node_id {
302-
blinded_path.advance_message_path_by_one(&self.node_signer, &self.secp_ctx)
302+
advance_path_by_one(blinded_path, &self.node_signer, &self.secp_ctx)
303303
.map_err(|()| SendError::BlindedPathAdvanceFailed)?;
304304
}
305305
}

0 commit comments

Comments
 (0)