Skip to content

Commit 70add14

Browse files
authored
Merge pull request #3264 from jkczyz/2024-08-remove-user-provided-payer-id
Disallow user-provided `payer_signing_pubkey`
2 parents f152689 + c331b67 commit 70add14

13 files changed

+658
-780
lines changed

fuzz/src/chanmon_consistency.rs

-7
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ use lightning::ln::msgs::{
5757
use lightning::ln::script::ShutdownScript;
5858
use lightning::ln::types::ChannelId;
5959
use lightning::offers::invoice::UnsignedBolt12Invoice;
60-
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
6160
use lightning::onion_message::messenger::{Destination, MessageRouter, OnionMessagePath};
6261
use lightning::routing::router::{InFlightHtlcs, Path, Route, RouteHop, RouteParameters, Router};
6362
use lightning::sign::{
@@ -340,12 +339,6 @@ impl NodeSigner for KeyProvider {
340339
unreachable!()
341340
}
342341

343-
fn sign_bolt12_invoice_request(
344-
&self, _invoice_request: &UnsignedInvoiceRequest,
345-
) -> Result<schnorr::Signature, ()> {
346-
unreachable!()
347-
}
348-
349342
fn sign_bolt12_invoice(
350343
&self, _invoice: &UnsignedBolt12Invoice,
351344
) -> Result<schnorr::Signature, ()> {

fuzz/src/full_stack.rs

-7
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ use lightning::ln::peer_handler::{
5050
use lightning::ln::script::ShutdownScript;
5151
use lightning::ln::types::ChannelId;
5252
use lightning::offers::invoice::UnsignedBolt12Invoice;
53-
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
5453
use lightning::onion_message::messenger::{Destination, MessageRouter, OnionMessagePath};
5554
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
5655
use lightning::routing::router::{
@@ -413,12 +412,6 @@ impl NodeSigner for KeyProvider {
413412
unreachable!()
414413
}
415414

416-
fn sign_bolt12_invoice_request(
417-
&self, _invoice_request: &UnsignedInvoiceRequest,
418-
) -> Result<schnorr::Signature, ()> {
419-
unreachable!()
420-
}
421-
422415
fn sign_bolt12_invoice(
423416
&self, _invoice: &UnsignedBolt12Invoice,
424417
) -> Result<schnorr::Signature, ()> {

fuzz/src/offer_deser.rs

+25-18
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@
88
// licenses.
99

1010
use crate::utils::test_logger;
11-
use bitcoin::secp256k1::{Keypair, PublicKey, Secp256k1, SecretKey};
11+
use bitcoin::secp256k1::Secp256k1;
1212
use core::convert::TryFrom;
13-
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
13+
use lightning::ln::channelmanager::PaymentId;
14+
use lightning::ln::inbound_payment::ExpandedKey;
15+
use lightning::offers::invoice_request::InvoiceRequest;
16+
use lightning::offers::nonce::Nonce;
1417
use lightning::offers::offer::{Amount, Offer, Quantity};
1518
use lightning::offers::parse::Bolt12SemanticError;
19+
use lightning::sign::{EntropySource, KeyMaterial};
1620
use lightning::util::ser::Writeable;
1721

1822
#[inline]
@@ -22,27 +26,30 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
2226
offer.write(&mut bytes).unwrap();
2327
assert_eq!(data, bytes);
2428

25-
let secp_ctx = Secp256k1::new();
26-
let keys = Keypair::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
27-
let pubkey = PublicKey::from(keys);
2829
let mut buffer = Vec::new();
2930

30-
if let Ok(invoice_request) = build_response(&offer, pubkey) {
31-
invoice_request
32-
.sign(|message: &UnsignedInvoiceRequest| {
33-
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
34-
})
35-
.unwrap()
36-
.write(&mut buffer)
37-
.unwrap();
31+
if let Ok(invoice_request) = build_request(&offer) {
32+
invoice_request.write(&mut buffer).unwrap();
3833
}
3934
}
4035
}
4136

42-
fn build_response(
43-
offer: &Offer, pubkey: PublicKey,
44-
) -> Result<UnsignedInvoiceRequest, Bolt12SemanticError> {
45-
let mut builder = offer.request_invoice(vec![42; 64], pubkey)?;
37+
struct FixedEntropy;
38+
39+
impl EntropySource for FixedEntropy {
40+
fn get_secure_random_bytes(&self) -> [u8; 32] {
41+
[42; 32]
42+
}
43+
}
44+
45+
fn build_request(offer: &Offer) -> Result<InvoiceRequest, Bolt12SemanticError> {
46+
let expanded_key = ExpandedKey::new(&KeyMaterial([42; 32]));
47+
let entropy = FixedEntropy {};
48+
let nonce = Nonce::from_entropy_source(&entropy);
49+
let secp_ctx = Secp256k1::new();
50+
let payment_id = PaymentId([1; 32]);
51+
52+
let mut builder = offer.request_invoice(&expanded_key, nonce, &secp_ctx, payment_id)?;
4653

4754
builder = match offer.amount() {
4855
None => builder.amount_msats(1000).unwrap(),
@@ -56,7 +63,7 @@ fn build_response(
5663
Quantity::One => builder,
5764
};
5865

59-
builder.build()
66+
builder.build_and_sign()
6067
}
6168

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

fuzz/src/onion_message.rs

-7
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ use lightning::ln::msgs::{self, DecodeError, OnionMessageHandler};
1313
use lightning::ln::peer_handler::IgnoringMessageHandler;
1414
use lightning::ln::script::ShutdownScript;
1515
use lightning::offers::invoice::UnsignedBolt12Invoice;
16-
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
1716
use lightning::onion_message::async_payments::{
1817
AsyncPaymentsMessageHandler, HeldHtlcAvailable, ReleaseHeldHtlc,
1918
};
@@ -234,12 +233,6 @@ impl NodeSigner for KeyProvider {
234233
unreachable!()
235234
}
236235

237-
fn sign_bolt12_invoice_request(
238-
&self, _invoice_request: &UnsignedInvoiceRequest,
239-
) -> Result<schnorr::Signature, ()> {
240-
unreachable!()
241-
}
242-
243236
fn sign_bolt12_invoice(
244237
&self, _invoice: &UnsignedBolt12Invoice,
245238
) -> Result<schnorr::Signature, ()> {

lightning/src/ln/blinded_payment_tests.rs

-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ use crate::ln::onion_utils;
2727
use crate::ln::onion_utils::INVALID_ONION_BLINDING;
2828
use crate::ln::outbound_payment::{Retry, IDEMPOTENCY_TIMEOUT_TICKS};
2929
use crate::offers::invoice::UnsignedBolt12Invoice;
30-
use crate::offers::invoice_request::UnsignedInvoiceRequest;
3130
use crate::prelude::*;
3231
use crate::routing::router::{BlindedTail, Path, Payee, PaymentParameters, RouteHop, RouteParameters};
3332
use crate::sign::{KeyMaterial, NodeSigner, Recipient};
@@ -1540,9 +1539,6 @@ fn route_blinding_spec_test_vector() {
15401539
fn sign_invoice(
15411540
&self, _invoice: &RawBolt11Invoice, _recipient: Recipient,
15421541
) -> Result<RecoverableSignature, ()> { unreachable!() }
1543-
fn sign_bolt12_invoice_request(
1544-
&self, _invoice_request: &UnsignedInvoiceRequest,
1545-
) -> Result<schnorr::Signature, ()> { unreachable!() }
15461542
fn sign_bolt12_invoice(
15471543
&self, _invoice: &UnsignedBolt12Invoice,
15481544
) -> Result<schnorr::Signature, ()> { unreachable!() }

lightning/src/ln/channelmanager.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ use crate::ln::outbound_payment::{OutboundPayments, PendingOutboundPayment, Retr
6666
use crate::ln::wire::Encode;
6767
use crate::offers::invoice::{Bolt12Invoice, DEFAULT_RELATIVE_EXPIRY, DerivedSigningPubkey, ExplicitSigningPubkey, InvoiceBuilder, UnsignedBolt12Invoice};
6868
use crate::offers::invoice_error::InvoiceError;
69-
use crate::offers::invoice_request::{DerivedPayerSigningPubkey, InvoiceRequest, InvoiceRequestBuilder};
69+
use crate::offers::invoice_request::{InvoiceRequest, InvoiceRequestBuilder};
7070
use crate::offers::nonce::Nonce;
7171
use crate::offers::offer::{Offer, OfferBuilder};
7272
use crate::offers::parse::Bolt12SemanticError;
@@ -9632,8 +9632,8 @@ where
96329632
let secp_ctx = &self.secp_ctx;
96339633

96349634
let nonce = Nonce::from_entropy_source(entropy);
9635-
let builder: InvoiceRequestBuilder<DerivedPayerSigningPubkey, secp256k1::All> = offer
9636-
.request_invoice_deriving_signing_pubkey(expanded_key, nonce, secp_ctx, payment_id)?
9635+
let builder: InvoiceRequestBuilder<secp256k1::All> = offer
9636+
.request_invoice(expanded_key, nonce, secp_ctx, payment_id)?
96379637
.into();
96389638
let builder = builder.chain_hash(self.chain_hash)?;
96399639

lightning/src/ln/outbound_payment.rs

+13-10
Original file line numberDiff line numberDiff line change
@@ -2745,6 +2745,8 @@ mod tests {
27452745
let router = test_utils::TestRouter::new(network_graph, &logger, &scorer);
27462746
let secp_ctx = Secp256k1::new();
27472747
let keys_manager = test_utils::TestKeysInterface::new(&[0; 32], Network::Testnet);
2748+
let expanded_key = ExpandedKey::new(&KeyMaterial([42; 32]));
2749+
let nonce = Nonce([0; 16]);
27482750

27492751
let pending_events = Mutex::new(VecDeque::new());
27502752
let outbound_payments = OutboundPayments::new(new_hash_map());
@@ -2762,9 +2764,8 @@ mod tests {
27622764
let invoice = OfferBuilder::new(recipient_pubkey())
27632765
.amount_msats(1000)
27642766
.build().unwrap()
2765-
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
2766-
.build().unwrap()
2767-
.sign(payer_sign).unwrap()
2767+
.request_invoice(&expanded_key, nonce, &secp_ctx, payment_id).unwrap()
2768+
.build_and_sign().unwrap()
27682769
.respond_with_no_std(payment_paths(), payment_hash(), created_at).unwrap()
27692770
.build().unwrap()
27702771
.sign(recipient_sign).unwrap();
@@ -2801,15 +2802,16 @@ mod tests {
28012802

28022803
let pending_events = Mutex::new(VecDeque::new());
28032804
let outbound_payments = OutboundPayments::new(new_hash_map());
2805+
let expanded_key = ExpandedKey::new(&KeyMaterial([42; 32]));
2806+
let nonce = Nonce([0; 16]);
28042807
let payment_id = PaymentId([0; 32]);
28052808
let expiration = StaleExpiration::AbsoluteTimeout(Duration::from_secs(100));
28062809

28072810
let invoice = OfferBuilder::new(recipient_pubkey())
28082811
.amount_msats(1000)
28092812
.build().unwrap()
2810-
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
2811-
.build().unwrap()
2812-
.sign(payer_sign).unwrap()
2813+
.request_invoice(&expanded_key, nonce, &secp_ctx, payment_id).unwrap()
2814+
.build_and_sign().unwrap()
28132815
.respond_with_no_std(payment_paths(), payment_hash(), now()).unwrap()
28142816
.build().unwrap()
28152817
.sign(recipient_sign).unwrap();
@@ -2862,15 +2864,16 @@ mod tests {
28622864

28632865
let pending_events = Mutex::new(VecDeque::new());
28642866
let outbound_payments = OutboundPayments::new(new_hash_map());
2867+
let expanded_key = ExpandedKey::new(&KeyMaterial([42; 32]));
2868+
let nonce = Nonce([0; 16]);
28652869
let payment_id = PaymentId([0; 32]);
28662870
let expiration = StaleExpiration::AbsoluteTimeout(Duration::from_secs(100));
28672871

28682872
let invoice = OfferBuilder::new(recipient_pubkey())
28692873
.amount_msats(1000)
28702874
.build().unwrap()
2871-
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
2872-
.build().unwrap()
2873-
.sign(payer_sign).unwrap()
2875+
.request_invoice(&expanded_key, nonce, &secp_ctx, payment_id).unwrap()
2876+
.build_and_sign().unwrap()
28742877
.respond_with_no_std(payment_paths(), payment_hash(), now()).unwrap()
28752878
.build().unwrap()
28762879
.sign(recipient_sign).unwrap();
@@ -2955,7 +2958,7 @@ mod tests {
29552958
OfferBuilder::new(recipient_pubkey())
29562959
.amount_msats(1000)
29572960
.build().unwrap()
2958-
.request_invoice_deriving_signing_pubkey(&expanded_key, nonce, &secp_ctx, payment_id)
2961+
.request_invoice(&expanded_key, nonce, &secp_ctx, payment_id)
29592962
.unwrap()
29602963
.build_and_sign()
29612964
.unwrap()

0 commit comments

Comments
 (0)