Skip to content

Commit 6b85985

Browse files
committed
Require a PaymentContext in payment::ReceiveTlvs
UnknownPaymentContext is used when payment::ReceiveTlvs doesn't contain a PaymentContext. This is only needed for a legacy BlindedPaymentPath. Since these paths a short-lived, UnknownPaymentContext is no longer needed. Remove it and require that payment::ReceiveTlvs always contains a PaymentContext. Any such path would fail authentication since the payment::ReceiveTlvs would be missing an HMAC and Nonce, so this is a good time to remove UnknownPaymentContext.
1 parent 2d4f55b commit 6b85985

File tree

4 files changed

+16
-42
lines changed

4 files changed

+16
-42
lines changed

lightning/src/blinded_path/payment.rs

+8-34
Original file line numberDiff line numberDiff line change
@@ -315,9 +315,6 @@ pub struct PaymentConstraints {
315315
/// [`PaymentPurpose`]: crate::events::PaymentPurpose
316316
#[derive(Clone, Debug, Eq, PartialEq)]
317317
pub enum PaymentContext {
318-
/// The payment context was unknown.
319-
Unknown(UnknownPaymentContext),
320-
321318
/// The payment was made for an invoice requested from a BOLT 12 [`Offer`].
322319
///
323320
/// [`Offer`]: crate::offers::offer::Offer
@@ -335,10 +332,6 @@ pub(crate) enum PaymentContextRef<'a> {
335332
Bolt12Refund(&'a Bolt12RefundContext),
336333
}
337334

338-
/// An unknown payment context.
339-
#[derive(Clone, Debug, Eq, PartialEq)]
340-
pub struct UnknownPaymentContext(());
341-
342335
/// The context of a payment made for an invoice requested from a BOLT 12 [`Offer`].
343336
///
344337
/// [`Offer`]: crate::offers::offer::Offer
@@ -362,12 +355,6 @@ pub struct Bolt12OfferContext {
362355
#[derive(Clone, Debug, Eq, PartialEq)]
363356
pub struct Bolt12RefundContext {}
364357

365-
impl PaymentContext {
366-
pub(crate) fn unknown() -> Self {
367-
PaymentContext::Unknown(UnknownPaymentContext(()))
368-
}
369-
}
370-
371358
impl TryFrom<CounterpartyForwardingInfo> for PaymentRelay {
372359
type Error = ();
373360

@@ -437,7 +424,7 @@ impl Readable for BlindedPaymentTlvs {
437424
(12, payment_constraints, required),
438425
(14, features, (option, encoding: (BlindedHopFeatures, WithoutLength))),
439426
(65536, payment_secret, option),
440-
(65537, payment_context, (default_value, PaymentContext::unknown())),
427+
(65537, payment_context, option),
441428
(65539, authentication, option),
442429
});
443430
let _padding: Option<utils::Padding> = _padding;
@@ -458,7 +445,7 @@ impl Readable for BlindedPaymentTlvs {
458445
Ok(BlindedPaymentTlvs::Receive(ReceiveTlvs {
459446
payment_secret: payment_secret.ok_or(DecodeError::InvalidValue)?,
460447
payment_constraints: payment_constraints.0.unwrap(),
461-
payment_context: payment_context.0.unwrap(),
448+
payment_context: payment_context.ok_or(DecodeError::InvalidValue)?,
462449
authentication,
463450
}))
464451
}
@@ -595,7 +582,6 @@ impl Readable for PaymentConstraints {
595582

596583
impl_writeable_tlv_based_enum_legacy!(PaymentContext,
597584
;
598-
(0, Unknown),
599585
(1, Bolt12Offer),
600586
(2, Bolt12Refund),
601587
);
@@ -617,18 +603,6 @@ impl<'a> Writeable for PaymentContextRef<'a> {
617603
}
618604
}
619605

620-
impl Writeable for UnknownPaymentContext {
621-
fn write<W: Writer>(&self, _w: &mut W) -> Result<(), io::Error> {
622-
Ok(())
623-
}
624-
}
625-
626-
impl Readable for UnknownPaymentContext {
627-
fn read<R: io::Read>(_r: &mut R) -> Result<Self, DecodeError> {
628-
Ok(UnknownPaymentContext(()))
629-
}
630-
}
631-
632606
impl_writeable_tlv_based!(Bolt12OfferContext, {
633607
(0, offer_id, required),
634608
(2, invoice_request, required),
@@ -639,7 +613,7 @@ impl_writeable_tlv_based!(Bolt12RefundContext, {});
639613
#[cfg(test)]
640614
mod tests {
641615
use bitcoin::secp256k1::PublicKey;
642-
use crate::blinded_path::payment::{PaymentForwardNode, ForwardTlvs, ReceiveTlvs, PaymentConstraints, PaymentContext, PaymentRelay};
616+
use crate::blinded_path::payment::{Bolt12RefundContext, PaymentForwardNode, ForwardTlvs, ReceiveTlvs, PaymentConstraints, PaymentContext, PaymentRelay};
643617
use crate::types::payment::PaymentSecret;
644618
use crate::types::features::BlindedHopFeatures;
645619
use crate::ln::functional_test_utils::TEST_FINAL_CLTV;
@@ -690,7 +664,7 @@ mod tests {
690664
max_cltv_expiry: 0,
691665
htlc_minimum_msat: 1,
692666
},
693-
payment_context: PaymentContext::unknown(),
667+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
694668
authentication: None,
695669
};
696670
let htlc_maximum_msat = 100_000;
@@ -710,7 +684,7 @@ mod tests {
710684
max_cltv_expiry: 0,
711685
htlc_minimum_msat: 1,
712686
},
713-
payment_context: PaymentContext::unknown(),
687+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
714688
authentication: None,
715689
};
716690
let blinded_payinfo = super::compute_payinfo(&[], &recv_tlvs, 4242, TEST_FINAL_CLTV as u16).unwrap();
@@ -767,7 +741,7 @@ mod tests {
767741
max_cltv_expiry: 0,
768742
htlc_minimum_msat: 3,
769743
},
770-
payment_context: PaymentContext::unknown(),
744+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
771745
authentication: None,
772746
};
773747
let htlc_maximum_msat = 100_000;
@@ -821,7 +795,7 @@ mod tests {
821795
max_cltv_expiry: 0,
822796
htlc_minimum_msat: 1,
823797
},
824-
payment_context: PaymentContext::unknown(),
798+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
825799
authentication: None,
826800
};
827801
let htlc_minimum_msat = 3798;
@@ -879,7 +853,7 @@ mod tests {
879853
max_cltv_expiry: 0,
880854
htlc_minimum_msat: 1,
881855
},
882-
payment_context: PaymentContext::unknown(),
856+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
883857
authentication: None,
884858
};
885859

lightning/src/events/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ impl PaymentPurpose {
183183
payment_context: Option<PaymentContext>,
184184
) -> Self {
185185
match payment_context {
186-
Some(PaymentContext::Unknown(_)) | None => {
186+
None => {
187187
PaymentPurpose::Bolt11InvoicePayment {
188188
payment_preimage,
189189
payment_secret,

lightning/src/ln/blinded_payment_tests.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use bitcoin::secp256k1::{PublicKey, Scalar, Secp256k1, SecretKey, schnorr};
1414
use bitcoin::secp256k1::ecdh::SharedSecret;
1515
use bitcoin::secp256k1::ecdsa::{RecoverableSignature, Signature};
1616
use crate::blinded_path;
17-
use crate::blinded_path::payment::{BlindedPaymentPath, PaymentForwardNode, ForwardTlvs, PaymentConstraints, PaymentContext, PaymentRelay, ReceiveTlvs};
17+
use crate::blinded_path::payment::{BlindedPaymentPath, Bolt12RefundContext, PaymentForwardNode, ForwardTlvs, PaymentConstraints, PaymentContext, PaymentRelay, ReceiveTlvs};
1818
use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PaymentFailureReason};
1919
use crate::ln::types::ChannelId;
2020
use crate::types::payment::{PaymentHash, PaymentSecret};
@@ -81,7 +81,7 @@ fn blinded_payment_path(
8181
htlc_minimum_msat:
8282
intro_node_min_htlc_opt.unwrap_or_else(|| channel_upds.last().unwrap().htlc_minimum_msat),
8383
},
84-
payment_context: PaymentContext::unknown(),
84+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
8585
authentication: None,
8686
};
8787
payee_tlvs.authentication = Some(hmac_payee_tlvs(&payee_tlvs, keys_manager));
@@ -139,7 +139,7 @@ fn do_one_hop_blinded_path(success: bool) {
139139
max_cltv_expiry: u32::max_value(),
140140
htlc_minimum_msat: chan_upd.htlc_minimum_msat,
141141
},
142-
payment_context: PaymentContext::unknown(),
142+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
143143
authentication: None,
144144
};
145145
payee_tlvs.authentication = Some(hmac_payee_tlvs(&payee_tlvs, &chanmon_cfgs[1].keys_manager));
@@ -185,7 +185,7 @@ fn mpp_to_one_hop_blinded_path() {
185185
max_cltv_expiry: u32::max_value(),
186186
htlc_minimum_msat: chan_upd_1_3.htlc_minimum_msat,
187187
},
188-
payment_context: PaymentContext::unknown(),
188+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
189189
authentication: None,
190190
};
191191
payee_tlvs.authentication = Some(hmac_payee_tlvs(&payee_tlvs, &chanmon_cfgs[3].keys_manager));
@@ -1398,7 +1398,7 @@ fn custom_tlvs_to_blinded_path() {
13981398
max_cltv_expiry: u32::max_value(),
13991399
htlc_minimum_msat: chan_upd.htlc_minimum_msat,
14001400
},
1401-
payment_context: PaymentContext::unknown(),
1401+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
14021402
authentication: None,
14031403
};
14041404
payee_tlvs.authentication = Some(hmac_payee_tlvs(&payee_tlvs, &chanmon_cfgs[1].keys_manager));

lightning/src/ln/max_payment_path_len_tests.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
1313
use bitcoin::secp256k1::{Secp256k1, PublicKey};
1414
use crate::blinded_path::BlindedHop;
15-
use crate::blinded_path::payment::{BlindedPayInfo, BlindedPaymentPath, PaymentConstraints, PaymentContext, ReceiveTlvs};
15+
use crate::blinded_path::payment::{BlindedPayInfo, BlindedPaymentPath, Bolt12RefundContext, PaymentConstraints, PaymentContext, ReceiveTlvs};
1616
use crate::events::{Event, MessageSendEventsProvider};
1717
use crate::types::payment::PaymentSecret;
1818
use crate::ln::blinded_payment_tests::get_blinded_route_parameters;
@@ -165,7 +165,7 @@ fn one_hop_blinded_path_with_custom_tlv() {
165165
max_cltv_expiry: u32::max_value(),
166166
htlc_minimum_msat: chan_upd_1_2.htlc_minimum_msat,
167167
},
168-
payment_context: PaymentContext::unknown(),
168+
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
169169
authentication: None,
170170
};
171171
let nonce = Nonce([42u8; 16]);

0 commit comments

Comments
 (0)