Skip to content

Commit 4922548

Browse files
committed
Use PublicKey values in construct_keys_callback
Instead of accepting iterators yielding PublicKey by reference in utils::construct_keys_callback, take iterators yielding values since these implement Copy and need to be copied anyway. This will help avoid a situation when padding where both a reference and mutable reference are needed.
1 parent 8d22f99 commit 4922548

File tree

4 files changed

+12
-11
lines changed

4 files changed

+12
-11
lines changed

lightning/src/blinded_path/message.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,14 +374,14 @@ pub(super) fn blinded_hops<T: secp256k1::Signing + secp256k1::Verification>(
374374
secp_ctx: &Secp256k1<T>, intermediate_nodes: &[ForwardNode], recipient_node_id: PublicKey,
375375
context: MessageContext, session_priv: &SecretKey
376376
) -> Result<Vec<BlindedHop>, secp256k1::Error> {
377-
let pks = intermediate_nodes.iter().map(|node| &node.node_id)
378-
.chain(core::iter::once(&recipient_node_id));
377+
let pks = intermediate_nodes.iter().map(|node| node.node_id)
378+
.chain(core::iter::once(recipient_node_id));
379379
let tlvs = pks.clone()
380380
.skip(1) // The first node's TLVs contains the next node's pubkey
381381
.zip(intermediate_nodes.iter().map(|node| node.short_channel_id))
382382
.map(|(pubkey, scid)| match scid {
383383
Some(scid) => NextMessageHop::ShortChannelId(scid),
384-
None => NextMessageHop::NodeId(*pubkey),
384+
None => NextMessageHop::NodeId(pubkey),
385385
})
386386
.map(|next_hop| ControlTlvs::Forward(ForwardTlvs { next_hop, next_blinding_override: None }))
387387
.chain(core::iter::once(ControlTlvs::Receive(ReceiveTlvs{ context: Some(context) })));

lightning/src/blinded_path/payment.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,8 +462,8 @@ pub(super) fn blinded_hops<T: secp256k1::Signing + secp256k1::Verification>(
462462
secp_ctx: &Secp256k1<T>, intermediate_nodes: &[ForwardNode],
463463
payee_node_id: PublicKey, payee_tlvs: ReceiveTlvs, session_priv: &SecretKey
464464
) -> Result<Vec<BlindedHop>, secp256k1::Error> {
465-
let pks = intermediate_nodes.iter().map(|node| &node.node_id)
466-
.chain(core::iter::once(&payee_node_id));
465+
let pks = intermediate_nodes.iter().map(|node| node.node_id)
466+
.chain(core::iter::once(payee_node_id));
467467
let tlvs = intermediate_nodes.iter().map(|node| BlindedPaymentTlvsRef::Forward(&node.tlvs))
468468
.chain(core::iter::once(BlindedPaymentTlvsRef::Receive(&payee_tlvs)));
469469
utils::construct_blinded_hops(secp_ctx, pks, tlvs, session_priv)

lightning/src/blinded_path/utils.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,13 @@ pub(crate) fn construct_keys_callback<'a, T, I, F>(
9191
) -> Result<(), secp256k1::Error>
9292
where
9393
T: secp256k1::Signing + secp256k1::Verification,
94-
I: Iterator<Item=&'a PublicKey>,
94+
I: Iterator<Item=PublicKey>,
9595
F: FnMut(PublicKey, SharedSecret, PublicKey, [u8; 32], Option<PublicKey>, Option<Vec<u8>>),
9696
{
9797
build_keys_helper!(session_priv, secp_ctx, callback);
9898

9999
for pk in unblinded_path {
100-
build_keys_in_loop!(*pk, false, None);
100+
build_keys_in_loop!(pk, false, None);
101101
}
102102
if let Some(dest) = destination {
103103
match dest {
@@ -120,7 +120,7 @@ pub(crate) fn construct_blinded_hops<'a, T, I1, I2>(
120120
) -> Result<Vec<BlindedHop>, secp256k1::Error>
121121
where
122122
T: secp256k1::Signing + secp256k1::Verification,
123-
I1: Iterator<Item=&'a PublicKey>,
123+
I1: Iterator<Item=PublicKey>,
124124
I2: Iterator,
125125
I2::Item: Writeable
126126
{

lightning/src/onion_message/messenger.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,7 @@ where
925925
}
926926
};
927927
let (packet_payloads, packet_keys) = packet_payloads_and_keys(
928-
&secp_ctx, &intermediate_nodes, destination, contents, reply_path, &blinding_secret
928+
&secp_ctx, intermediate_nodes, destination, contents, reply_path, &blinding_secret
929929
)?;
930930

931931
let prng_seed = entropy_source.get_secure_random_bytes();
@@ -1784,7 +1784,7 @@ pub type SimpleRefOnionMessenger<
17841784
/// Construct onion packet payloads and keys for sending an onion message along the given
17851785
/// `unblinded_path` to the given `destination`.
17861786
fn packet_payloads_and_keys<T: OnionMessageContents, S: secp256k1::Signing + secp256k1::Verification>(
1787-
secp_ctx: &Secp256k1<S>, unblinded_path: &[PublicKey], destination: Destination, message: T,
1787+
secp_ctx: &Secp256k1<S>, unblinded_path: Vec<PublicKey>, destination: Destination, message: T,
17881788
mut reply_path: Option<BlindedMessagePath>, session_priv: &SecretKey
17891789
) -> Result<(Vec<(Payload<T>, [u8; 32])>, Vec<onion_utils::OnionKeys>), SendError> {
17901790
let num_hops = unblinded_path.len() + destination.num_hops();
@@ -1809,7 +1809,8 @@ fn packet_payloads_and_keys<T: OnionMessageContents, S: secp256k1::Signing + sec
18091809
let mut blinded_path_idx = 0;
18101810
let mut prev_control_tlvs_ss = None;
18111811
let mut final_control_tlvs = None;
1812-
utils::construct_keys_callback(secp_ctx, unblinded_path.iter(), Some(destination), session_priv,
1812+
utils::construct_keys_callback(
1813+
secp_ctx, unblinded_path.into_iter(), Some(destination), session_priv,
18131814
|_, onion_packet_ss, ephemeral_pubkey, control_tlvs_ss, unblinded_pk_opt, enc_payload_opt| {
18141815
if num_unblinded_hops != 0 && unblinded_path_idx < num_unblinded_hops {
18151816
if let Some(ss) = prev_control_tlvs_ss.take() {

0 commit comments

Comments
 (0)