Skip to content

Commit 535fa47

Browse files
committed
Use BlindedPath::new_for_payment in fuzz tests
When creating a Bolt12Invoice in fuzz tests, use BlindedPath::new_for_payment instead of BlindedPath::new_for_message. This way PaymentContext is used instead of MessageContext, as is more realistic though should not affect the test. This allows us to remove OffersContext::Unknown.
1 parent 1cb22c3 commit 535fa47

File tree

2 files changed

+76
-95
lines changed

2 files changed

+76
-95
lines changed

fuzz/src/invoice_request_deser.rs

Lines changed: 43 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,19 @@
1010
use crate::utils::test_logger;
1111
use bitcoin::secp256k1::{self, Keypair, Parity, PublicKey, Secp256k1, SecretKey};
1212
use core::convert::TryFrom;
13-
use lightning::blinded_path::message::{ForwardNode, MessageContext, OffersContext};
13+
use lightning::blinded_path::payment::{Bolt12OfferContext, ForwardNode, ForwardTlvs, PaymentConstraints, PaymentContext, PaymentRelay, ReceiveTlvs};
1414
use lightning::blinded_path::BlindedPath;
15+
use lightning::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA;
1516
use lightning::ln::features::BlindedHopFeatures;
17+
use lightning::ln::types::PaymentSecret;
1618
use lightning::ln::PaymentHash;
17-
use lightning::offers::invoice::{BlindedPayInfo, UnsignedBolt12Invoice};
18-
use lightning::offers::invoice_request::InvoiceRequest;
19+
use lightning::offers::invoice::UnsignedBolt12Invoice;
20+
use lightning::offers::invoice_request::{InvoiceRequest, InvoiceRequestFields};
21+
use lightning::offers::offer::OfferId;
1922
use lightning::offers::parse::Bolt12SemanticError;
2023
use lightning::sign::EntropySource;
2124
use lightning::util::ser::Writeable;
25+
use lightning::util::string::UntrustedString;
2226

2327
#[inline]
2428
pub fn do_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
@@ -76,57 +80,48 @@ fn build_response<T: secp256k1::Signing + secp256k1::Verification>(
7680
invoice_request: &InvoiceRequest, secp_ctx: &Secp256k1<T>,
7781
) -> Result<UnsignedBolt12Invoice, Bolt12SemanticError> {
7882
let entropy_source = Randomness {};
79-
let intermediate_nodes = [
80-
[
81-
ForwardNode { node_id: pubkey(43), short_channel_id: None },
82-
ForwardNode { node_id: pubkey(44), short_channel_id: None },
83-
],
84-
[
85-
ForwardNode { node_id: pubkey(45), short_channel_id: None },
86-
ForwardNode { node_id: pubkey(46), short_channel_id: None },
87-
],
88-
];
89-
let paths = vec![
90-
BlindedPath::new_for_message(
91-
&intermediate_nodes[0],
92-
pubkey(42),
93-
MessageContext::Offers(OffersContext::Unknown {}),
94-
&entropy_source,
95-
secp_ctx,
96-
)
97-
.unwrap(),
98-
BlindedPath::new_for_message(
99-
&intermediate_nodes[1],
100-
pubkey(42),
101-
MessageContext::Offers(OffersContext::Unknown {}),
102-
&entropy_source,
103-
secp_ctx,
104-
)
105-
.unwrap(),
106-
];
107-
108-
let payinfo = vec![
109-
BlindedPayInfo {
110-
fee_base_msat: 1,
111-
fee_proportional_millionths: 1_000,
112-
cltv_expiry_delta: 42,
113-
htlc_minimum_msat: 100,
114-
htlc_maximum_msat: 1_000_000_000_000,
115-
features: BlindedHopFeatures::empty(),
83+
let payment_context = PaymentContext::Bolt12Offer(Bolt12OfferContext {
84+
offer_id: OfferId([42; 32]),
85+
invoice_request: InvoiceRequestFields {
86+
payer_id: invoice_request.payer_id(),
87+
quantity: invoice_request.quantity(),
88+
payer_note_truncated: invoice_request.payer_note().map(|s| UntrustedString(s.to_string())),
89+
},
90+
});
91+
let payee_tlvs = ReceiveTlvs {
92+
payment_secret: PaymentSecret([42; 32]),
93+
payment_constraints: PaymentConstraints {
94+
max_cltv_expiry: 1_000_000,
95+
htlc_minimum_msat: 1,
11696
},
117-
BlindedPayInfo {
118-
fee_base_msat: 1,
119-
fee_proportional_millionths: 1_000,
120-
cltv_expiry_delta: 42,
121-
htlc_minimum_msat: 100,
97+
payment_context,
98+
};
99+
let intermediate_nodes = [
100+
ForwardNode {
101+
tlvs: ForwardTlvs {
102+
short_channel_id: 43,
103+
payment_relay: PaymentRelay {
104+
cltv_expiry_delta: 40,
105+
fee_proportional_millionths: 1_000,
106+
fee_base_msat: 1,
107+
},
108+
payment_constraints: PaymentConstraints {
109+
max_cltv_expiry: payee_tlvs.payment_constraints.max_cltv_expiry + 40,
110+
htlc_minimum_msat: 100,
111+
},
112+
features: BlindedHopFeatures::empty(),
113+
},
114+
node_id: pubkey(43),
122115
htlc_maximum_msat: 1_000_000_000_000,
123-
features: BlindedHopFeatures::empty(),
124116
},
125117
];
118+
let payment_path = BlindedPath::new_for_payment(
119+
&intermediate_nodes, pubkey(42), payee_tlvs, u64::MAX, MIN_FINAL_CLTV_EXPIRY_DELTA,
120+
&entropy_source, secp_ctx,
121+
).unwrap();
126122

127-
let payment_paths = payinfo.into_iter().zip(paths.into_iter()).collect();
128123
let payment_hash = PaymentHash([42; 32]);
129-
invoice_request.respond_with(payment_paths, payment_hash)?.build()
124+
invoice_request.respond_with(vec![payment_path], payment_hash)?.build()
130125
}
131126

132127
pub fn invoice_request_deser_test<Out: test_logger::Output>(data: &[u8], out: Out) {

fuzz/src/refund_deser.rs

Lines changed: 33 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
use crate::utils::test_logger;
1111
use bitcoin::secp256k1::{self, Keypair, PublicKey, Secp256k1, SecretKey};
1212
use core::convert::TryFrom;
13-
use lightning::blinded_path::message::{ForwardNode, MessageContext, OffersContext};
13+
use lightning::blinded_path::payment::{Bolt12RefundContext, ForwardNode, ForwardTlvs, PaymentConstraints, PaymentContext, PaymentRelay, ReceiveTlvs};
1414
use lightning::blinded_path::BlindedPath;
15+
use lightning::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA;
1516
use lightning::ln::features::BlindedHopFeatures;
17+
use lightning::ln::types::PaymentSecret;
1618
use lightning::ln::PaymentHash;
17-
use lightning::offers::invoice::{BlindedPayInfo, UnsignedBolt12Invoice};
19+
use lightning::offers::invoice::UnsignedBolt12Invoice;
1820
use lightning::offers::parse::Bolt12SemanticError;
1921
use lightning::offers::refund::Refund;
2022
use lightning::sign::EntropySource;
@@ -65,57 +67,41 @@ fn build_response<T: secp256k1::Signing + secp256k1::Verification>(
6567
refund: &Refund, signing_pubkey: PublicKey, secp_ctx: &Secp256k1<T>,
6668
) -> Result<UnsignedBolt12Invoice, Bolt12SemanticError> {
6769
let entropy_source = Randomness {};
68-
let intermediate_nodes = [
69-
[
70-
ForwardNode { node_id: pubkey(43), short_channel_id: None },
71-
ForwardNode { node_id: pubkey(44), short_channel_id: None },
72-
],
73-
[
74-
ForwardNode { node_id: pubkey(45), short_channel_id: None },
75-
ForwardNode { node_id: pubkey(46), short_channel_id: None },
76-
],
77-
];
78-
let paths = vec![
79-
BlindedPath::new_for_message(
80-
&intermediate_nodes[0],
81-
pubkey(42),
82-
MessageContext::Offers(OffersContext::Unknown {}),
83-
&entropy_source,
84-
secp_ctx,
85-
)
86-
.unwrap(),
87-
BlindedPath::new_for_message(
88-
&intermediate_nodes[1],
89-
pubkey(42),
90-
MessageContext::Offers(OffersContext::Unknown {}),
91-
&entropy_source,
92-
secp_ctx,
93-
)
94-
.unwrap(),
95-
];
96-
97-
let payinfo = vec![
98-
BlindedPayInfo {
99-
fee_base_msat: 1,
100-
fee_proportional_millionths: 1_000,
101-
cltv_expiry_delta: 42,
102-
htlc_minimum_msat: 100,
103-
htlc_maximum_msat: 1_000_000_000_000,
104-
features: BlindedHopFeatures::empty(),
70+
let payment_context = PaymentContext::Bolt12Refund(Bolt12RefundContext {});
71+
let payee_tlvs = ReceiveTlvs {
72+
payment_secret: PaymentSecret([42; 32]),
73+
payment_constraints: PaymentConstraints {
74+
max_cltv_expiry: 1_000_000,
75+
htlc_minimum_msat: 1,
10576
},
106-
BlindedPayInfo {
107-
fee_base_msat: 1,
108-
fee_proportional_millionths: 1_000,
109-
cltv_expiry_delta: 42,
110-
htlc_minimum_msat: 100,
77+
payment_context,
78+
};
79+
let intermediate_nodes = [
80+
ForwardNode {
81+
tlvs: ForwardTlvs {
82+
short_channel_id: 43,
83+
payment_relay: PaymentRelay {
84+
cltv_expiry_delta: 40,
85+
fee_proportional_millionths: 1_000,
86+
fee_base_msat: 1,
87+
},
88+
payment_constraints: PaymentConstraints {
89+
max_cltv_expiry: payee_tlvs.payment_constraints.max_cltv_expiry + 40,
90+
htlc_minimum_msat: 100,
91+
},
92+
features: BlindedHopFeatures::empty(),
93+
},
94+
node_id: pubkey(43),
11195
htlc_maximum_msat: 1_000_000_000_000,
112-
features: BlindedHopFeatures::empty(),
11396
},
11497
];
98+
let payment_path = BlindedPath::new_for_payment(
99+
&intermediate_nodes, pubkey(42), payee_tlvs, u64::MAX, MIN_FINAL_CLTV_EXPIRY_DELTA,
100+
&entropy_source, secp_ctx,
101+
).unwrap();
115102

116-
let payment_paths = payinfo.into_iter().zip(paths.into_iter()).collect();
117103
let payment_hash = PaymentHash([42; 32]);
118-
refund.respond_with(payment_paths, payment_hash, signing_pubkey)?.build()
104+
refund.respond_with(vec![payment_path], payment_hash, signing_pubkey)?.build()
119105
}
120106

121107
pub fn refund_deser_test<Out: test_logger::Output>(data: &[u8], out: Out) {

0 commit comments

Comments
 (0)