Skip to content

Commit 8ad34ef

Browse files
committed
Introduce Padding for BlindedMessage Paths.
A note of Compact Blinded Paths: Compact Blinded paths are intended to be as short as possible. So to maintain there compactness, we don't apply padding to them.
1 parent 5ce2b5e commit 8ad34ef

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

lightning/src/blinded_path/message.rs

+18-6
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use bitcoin::secp256k1::{self, PublicKey, Secp256k1, SecretKey};
1414
#[allow(unused_imports)]
1515
use crate::prelude::*;
1616

17-
use crate::blinded_path::utils;
17+
use crate::blinded_path::utils::{self, BlindedPathWithPadding};
1818
use crate::blinded_path::{BlindedHop, BlindedPath, Direction, IntroductionNode, NodeIdLookUp};
1919
use crate::crypto::streams::ChaChaPolyReadAdapter;
2020
use crate::io;
@@ -265,7 +265,6 @@ impl Writeable for ForwardTlvs {
265265
NextMessageHop::NodeId(pubkey) => (Some(pubkey), None),
266266
NextMessageHop::ShortChannelId(scid) => (None, Some(scid)),
267267
};
268-
// TODO: write padding
269268
encode_tlv_stream!(writer, {
270269
(2, short_channel_id, option),
271270
(4, next_node_id, option),
@@ -277,7 +276,6 @@ impl Writeable for ForwardTlvs {
277276

278277
impl Writeable for ReceiveTlvs {
279278
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
280-
// TODO: write padding
281279
encode_tlv_stream!(writer, {
282280
(65537, self.context, option),
283281
});
@@ -495,6 +493,10 @@ impl_writeable_tlv_based!(DNSResolverContext, {
495493
(0, nonce, required),
496494
});
497495

496+
/// Represents the padding round off size (in bytes) that is used
497+
/// to pad message blinded path's [`BlindedHop`]
498+
pub(crate) const MESSAGE_PADDING_ROUND_OFF: usize = 100;
499+
498500
/// Construct blinded onion message hops for the given `intermediate_nodes` and `recipient_node_id`.
499501
pub(super) fn blinded_hops<T: secp256k1::Signing + secp256k1::Verification>(
500502
secp_ctx: &Secp256k1<T>, intermediate_nodes: &[MessageForwardNode],
@@ -504,6 +506,8 @@ pub(super) fn blinded_hops<T: secp256k1::Signing + secp256k1::Verification>(
504506
.iter()
505507
.map(|node| node.node_id)
506508
.chain(core::iter::once(recipient_node_id));
509+
let is_compact = intermediate_nodes.iter().any(|node| node.short_channel_id.is_some());
510+
507511
let tlvs = pks
508512
.clone()
509513
.skip(1) // The first node's TLVs contains the next node's pubkey
@@ -517,7 +521,15 @@ pub(super) fn blinded_hops<T: secp256k1::Signing + secp256k1::Verification>(
517521
})
518522
.chain(core::iter::once(ControlTlvs::Receive(ReceiveTlvs { context: Some(context) })));
519523

520-
let path = pks.zip(tlvs);
521-
522-
utils::construct_blinded_hops(secp_ctx, path, session_priv)
524+
if is_compact {
525+
let path = pks.zip(tlvs);
526+
utils::construct_blinded_hops(secp_ctx, path, session_priv)
527+
} else {
528+
let path =
529+
pks.zip(tlvs.map(|tlv| BlindedPathWithPadding {
530+
tlvs: tlv,
531+
round_off: MESSAGE_PADDING_ROUND_OFF,
532+
}));
533+
utils::construct_blinded_hops(secp_ctx, path, session_priv)
534+
}
523535
}

lightning/src/blinded_path/payment.rs

-1
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,6 @@ impl Writeable for UnauthenticatedReceiveTlvs {
508508

509509
impl<'a> Writeable for BlindedPaymentTlvsRef<'a> {
510510
fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
511-
// TODO: write padding
512511
match self {
513512
Self::Forward(tlvs) => tlvs.write(w)?,
514513
Self::Receive(tlvs) => tlvs.write(w)?,

0 commit comments

Comments
 (0)