Skip to content

Commit c7f1080

Browse files
committed
Rename get_inbound_payment_key to get_expanded_key
The use of ExpandedKey has grown beyond just encrypting inbound payment data-it now also supports BOLT 12 Offers, spontaneous payments, and authentication of various payment metadata. To reflect this broader purpose, this commit renames the function and updates its documentation accordingly.
1 parent 98297a6 commit c7f1080

14 files changed

+44
-39
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ impl NodeSigner for KeyProvider {
326326
Ok(SharedSecret::new(other_key, &node_secret))
327327
}
328328

329-
fn get_inbound_payment_key(&self) -> ExpandedKey {
329+
fn get_expanded_key(&self) -> ExpandedKey {
330330
#[rustfmt::skip]
331331
let random_bytes = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, self.node_secret[31]];
332332
ExpandedKey::new(random_bytes)

fuzz/src/full_stack.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ impl NodeSigner for KeyProvider {
405405
Ok(SharedSecret::new(other_key, &node_secret))
406406
}
407407

408-
fn get_inbound_payment_key(&self) -> ExpandedKey {
408+
fn get_expanded_key(&self) -> ExpandedKey {
409409
self.inbound_payment_key
410410
}
411411

fuzz/src/onion_message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ impl NodeSigner for KeyProvider {
228228
Ok(SharedSecret::new(other_key, &node_secret))
229229
}
230230

231-
fn get_inbound_payment_key(&self) -> ExpandedKey {
231+
fn get_expanded_key(&self) -> ExpandedKey {
232232
unreachable!()
233233
}
234234

lightning/src/ln/async_payments_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ fn amount_doesnt_match_invreq() {
668668
valid_invreq = Some(invoice_request.clone());
669669
*invoice_request = offer
670670
.request_invoice(
671-
&nodes[0].keys_manager.get_inbound_payment_key(),
671+
&nodes[0].keys_manager.get_expanded_key(),
672672
Nonce::from_entropy_source(nodes[0].keys_manager),
673673
&secp_ctx,
674674
payment_id,

lightning/src/ln/blinded_payment_tests.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ pub fn blinded_payment_path(
8383
};
8484

8585
let nonce = Nonce([42u8; 16]);
86-
let expanded_key = keys_manager.get_inbound_payment_key();
86+
let expanded_key = keys_manager.get_expanded_key();
8787
let payee_tlvs = payee_tlvs.authenticate(nonce, &expanded_key);
8888

8989
let mut secp_ctx = Secp256k1::new();
@@ -168,7 +168,7 @@ fn do_one_hop_blinded_path(success: bool) {
168168
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
169169
};
170170
let nonce = Nonce([42u8; 16]);
171-
let expanded_key = chanmon_cfgs[1].keys_manager.get_inbound_payment_key();
171+
let expanded_key = chanmon_cfgs[1].keys_manager.get_expanded_key();
172172
let payee_tlvs = payee_tlvs.authenticate(nonce, &expanded_key);
173173

174174
let mut secp_ctx = Secp256k1::new();
@@ -222,7 +222,7 @@ fn mpp_to_one_hop_blinded_path() {
222222
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
223223
};
224224
let nonce = Nonce([42u8; 16]);
225-
let expanded_key = chanmon_cfgs[3].keys_manager.get_inbound_payment_key();
225+
let expanded_key = chanmon_cfgs[3].keys_manager.get_expanded_key();
226226
let payee_tlvs = payee_tlvs.authenticate(nonce, &expanded_key);
227227
let blinded_path = BlindedPaymentPath::new(
228228
&[], nodes[3].node.get_our_node_id(), payee_tlvs, u64::MAX, TEST_FINAL_CLTV as u16,
@@ -1342,7 +1342,7 @@ fn custom_tlvs_to_blinded_path() {
13421342
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
13431343
};
13441344
let nonce = Nonce([42u8; 16]);
1345-
let expanded_key = chanmon_cfgs[1].keys_manager.get_inbound_payment_key();
1345+
let expanded_key = chanmon_cfgs[1].keys_manager.get_expanded_key();
13461346
let payee_tlvs = payee_tlvs.authenticate(nonce, &expanded_key);
13471347
let mut secp_ctx = Secp256k1::new();
13481348
let blinded_path = BlindedPaymentPath::new(
@@ -1396,7 +1396,7 @@ fn fails_receive_tlvs_authentication() {
13961396
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
13971397
};
13981398
let nonce = Nonce([42u8; 16]);
1399-
let expanded_key = chanmon_cfgs[1].keys_manager.get_inbound_payment_key();
1399+
let expanded_key = chanmon_cfgs[1].keys_manager.get_expanded_key();
14001400
let payee_tlvs = payee_tlvs.authenticate(nonce, &expanded_key);
14011401

14021402
let mut secp_ctx = Secp256k1::new();
@@ -1622,7 +1622,7 @@ fn route_blinding_spec_test_vector() {
16221622
}
16231623
Ok(SharedSecret::new(other_key, &node_secret))
16241624
}
1625-
fn get_inbound_payment_key(&self) -> ExpandedKey { unreachable!() }
1625+
fn get_expanded_key(&self) -> ExpandedKey { unreachable!() }
16261626
fn get_node_id(&self, _recipient: Recipient) -> Result<PublicKey, ()> { unreachable!() }
16271627
fn sign_invoice(
16281628
&self, _invoice: &RawBolt11Invoice, _recipient: Recipient,
@@ -1931,7 +1931,7 @@ fn test_trampoline_inbound_payment_decoding() {
19311931
}
19321932
Ok(SharedSecret::new(other_key, &node_secret))
19331933
}
1934-
fn get_inbound_payment_key(&self) -> ExpandedKey { unreachable!() }
1934+
fn get_expanded_key(&self) -> ExpandedKey { unreachable!() }
19351935
fn get_node_id(&self, _recipient: Recipient) -> Result<PublicKey, ()> { unreachable!() }
19361936
fn sign_invoice(
19371937
&self, _invoice: &RawBolt11Invoice, _recipient: Recipient,
@@ -2016,7 +2016,7 @@ fn do_test_trampoline_single_hop_receive(success: bool) {
20162016
};
20172017

20182018
let nonce = Nonce([42u8; 16]);
2019-
let expanded_key = nodes[2].keys_manager.get_inbound_payment_key();
2019+
let expanded_key = nodes[2].keys_manager.get_expanded_key();
20202020
let payee_tlvs = payee_tlvs.authenticate(nonce, &expanded_key);
20212021
let carol_unblinded_tlvs = payee_tlvs.encode();
20222022

lightning/src/ln/channelmanager.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ pub enum PendingHTLCRouting {
256256
requires_blinded_error: bool,
257257
/// Set if we are receiving a keysend to a blinded path, meaning we created the
258258
/// [`PaymentSecret`] and should verify it using our
259-
/// [`NodeSigner::get_inbound_payment_key`].
259+
/// [`NodeSigner::get_expanded_key`].
260260
has_recipient_created_payment_secret: bool,
261261
/// The [`InvoiceRequest`] associated with the [`Offer`] corresponding to this payment.
262262
invoice_request: Option<InvoiceRequest>,
@@ -3576,7 +3576,7 @@ where
35763576
) -> Self {
35773577
let mut secp_ctx = Secp256k1::new();
35783578
secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
3579-
let expanded_inbound_key = node_signer.get_inbound_payment_key();
3579+
let expanded_inbound_key = node_signer.get_expanded_key();
35803580
ChannelManager {
35813581
default_configuration: config.clone(),
35823582
chain_hash: ChainHash::using_genesis_block(params.network),
@@ -14569,7 +14569,7 @@ where
1456914569
}, None));
1457014570
}
1457114571

14572-
let expanded_inbound_key = args.node_signer.get_inbound_payment_key();
14572+
let expanded_inbound_key = args.node_signer.get_expanded_key();
1457314573

1457414574
let mut claimable_payments = hash_map_with_capacity(claimable_htlcs_list.len());
1457514575
if let Some(purposes) = claimable_htlc_purposes {

lightning/src/ln/inbound_payment.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ const AMT_MSAT_LEN: usize = 8;
3737
// retrieve said payment type bits.
3838
const METHOD_TYPE_OFFSET: usize = 5;
3939

40-
/// A set of keys that were HKDF-expanded. Returned by [`NodeSigner::get_inbound_payment_key`].
40+
/// A set of keys that were HKDF-expanded. Returned by [`NodeSigner::get_expanded_key`].
4141
///
42-
/// [`NodeSigner::get_inbound_payment_key`]: crate::sign::NodeSigner::get_inbound_payment_key
42+
/// [`NodeSigner::get_expanded_key`]: crate::sign::NodeSigner::get_expanded_key
4343
#[derive(Hash, Copy, Clone, PartialEq, Eq, Debug)]
4444
pub struct ExpandedKey {
4545
/// The key used to encrypt the bytes containing the payment metadata (i.e. the amount and
@@ -133,7 +133,7 @@ fn min_final_cltv_expiry_delta_from_metadata(bytes: [u8; METADATA_LEN]) -> u16 {
133133
/// `ChannelManager` is required. Useful for generating invoices for [phantom node payments] without
134134
/// a `ChannelManager`.
135135
///
136-
/// `keys` is generated by calling [`NodeSigner::get_inbound_payment_key`]. It is recommended to
136+
/// `keys` is generated by calling [`NodeSigner::get_expanded_key`]. It is recommended to
137137
/// cache this value and not regenerate it for each new inbound payment.
138138
///
139139
/// `current_time` is a Unix timestamp representing the current time.
@@ -142,7 +142,7 @@ fn min_final_cltv_expiry_delta_from_metadata(bytes: [u8; METADATA_LEN]) -> u16 {
142142
/// on versions of LDK prior to 0.0.114.
143143
///
144144
/// [phantom node payments]: crate::sign::PhantomKeysManager
145-
/// [`NodeSigner::get_inbound_payment_key`]: crate::sign::NodeSigner::get_inbound_payment_key
145+
/// [`NodeSigner::get_expanded_key`]: crate::sign::NodeSigner::get_expanded_key
146146
pub fn create<ES: Deref>(
147147
keys: &ExpandedKey, min_value_msat: Option<u64>, invoice_expiry_delta_secs: u32,
148148
entropy_source: &ES, current_time: u64, min_final_cltv_expiry_delta: Option<u16>,
@@ -322,7 +322,7 @@ fn construct_payment_secret(
322322
/// For payments including a custom `min_final_cltv_expiry_delta`, the metadata is constructed as:
323323
/// payment method (3 bits) || payment amount (8 bytes - 3 bits) || min_final_cltv_expiry_delta (2 bytes) || expiry (6 bytes)
324324
///
325-
/// In both cases the result is then encrypted using a key derived from [`NodeSigner::get_inbound_payment_key`].
325+
/// In both cases the result is then encrypted using a key derived from [`NodeSigner::get_expanded_key`].
326326
///
327327
/// Then on payment receipt, we verify in this method that the payment preimage and payment secret
328328
/// match what was constructed.
@@ -343,7 +343,7 @@ fn construct_payment_secret(
343343
///
344344
/// See [`ExpandedKey`] docs for more info on the individual keys used.
345345
///
346-
/// [`NodeSigner::get_inbound_payment_key`]: crate::sign::NodeSigner::get_inbound_payment_key
346+
/// [`NodeSigner::get_expanded_key`]: crate::sign::NodeSigner::get_expanded_key
347347
/// [`create_inbound_payment`]: crate::ln::channelmanager::ChannelManager::create_inbound_payment
348348
/// [`create_inbound_payment_for_hash`]: crate::ln::channelmanager::ChannelManager::create_inbound_payment_for_hash
349349
pub(super) fn verify<L: Deref>(

lightning/src/ln/invoice_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ where
195195
},
196196
};
197197

198-
let keys = node_signer.get_inbound_payment_key();
198+
let keys = node_signer.get_expanded_key();
199199
let (payment_hash, payment_secret) = if let Some(payment_hash) = payment_hash {
200200
let payment_secret = create_from_hash(
201201
&keys,

lightning/src/ln/max_payment_path_len_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ fn one_hop_blinded_path_with_custom_tlv() {
173173
payment_context: PaymentContext::Bolt12Refund(Bolt12RefundContext {}),
174174
};
175175
let nonce = Nonce([42u8; 16]);
176-
let expanded_key = chanmon_cfgs[2].keys_manager.get_inbound_payment_key();
176+
let expanded_key = chanmon_cfgs[2].keys_manager.get_expanded_key();
177177
let payee_tlvs = payee_tlvs.authenticate(nonce, &expanded_key);
178178
let mut secp_ctx = Secp256k1::new();
179179
let blinded_path = BlindedPaymentPath::new(

lightning/src/ln/msgs.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3443,7 +3443,7 @@ where
34433443
},
34443444
ChaChaPolyReadAdapter { readable: BlindedPaymentTlvs::Receive(receive_tlvs) } => {
34453445
let ReceiveTlvs { tlvs, authentication: (hmac, nonce) } = receive_tlvs;
3446-
let expanded_key = node_signer.get_inbound_payment_key();
3446+
let expanded_key = node_signer.get_expanded_key();
34473447
if tlvs.verify_for_offer_payment(hmac, nonce, &expanded_key).is_err() {
34483448
return Err(DecodeError::InvalidValue);
34493449
}
@@ -3595,7 +3595,7 @@ where
35953595
readable: BlindedTrampolineTlvs::Receive(receive_tlvs),
35963596
} => {
35973597
let ReceiveTlvs { tlvs, authentication: (hmac, nonce) } = receive_tlvs;
3598-
let expanded_key = node_signer.get_inbound_payment_key();
3598+
let expanded_key = node_signer.get_expanded_key();
35993599
if tlvs.verify_for_offer_payment(hmac, nonce, &expanded_key).is_err() {
36003600
return Err(DecodeError::InvalidValue);
36013601
}

lightning/src/ln/offers_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2223,7 +2223,7 @@ fn fails_paying_invoice_with_unknown_required_features() {
22232223
let payment_paths = invoice.payment_paths().to_vec();
22242224
let payment_hash = invoice.payment_hash();
22252225

2226-
let expanded_key = alice.keys_manager.get_inbound_payment_key();
2226+
let expanded_key = alice.keys_manager.get_expanded_key();
22272227
let secp_ctx = Secp256k1::new();
22282228

22292229
let created_at = alice.node.duration_since_epoch();

lightning/src/sign/mod.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -820,19 +820,24 @@ pub trait EntropySource {
820820

821821
/// A trait that can handle cryptographic operations at the scope level of a node.
822822
pub trait NodeSigner {
823-
/// Get the [`ExpandedKey`] for use in encrypting and decrypting inbound payment data.
823+
/// Get the [`ExpandedKey`] which provides cryptographic material for various Lightning Network operations.
824+
///
825+
/// This key set is used for:
826+
/// - Encrypting and decrypting inbound payment metadata
827+
/// - Authenticating payment hashes (both LDK-provided and user-provided)
828+
/// - Supporting BOLT 12 Offers functionality (signing and encryption)
829+
/// - Authenticating spontaneous payments' metadata
824830
///
825831
/// If the implementor of this trait supports [phantom node payments], then every node that is
826832
/// intended to be included in the phantom invoice route hints must return the same value from
827833
/// this method.
828-
// This is because LDK avoids storing inbound payment data by encrypting payment data in the
829-
// payment hash and/or payment secret, therefore for a payment to be receivable by multiple
830-
// nodes, they must share the key that encrypts this payment data.
831834
///
832-
/// This method must return the same value each time it is called.
835+
/// This method must return the same value each time it is called, as LDK avoids storing inbound
836+
/// payment data by encrypting it in the payment hash and/or payment secret. Consistency is also
837+
/// required for signature and encryption verification in Offers and spontaneous payments.
833838
///
834839
/// [phantom node payments]: PhantomKeysManager
835-
fn get_inbound_payment_key(&self) -> ExpandedKey;
840+
fn get_expanded_key(&self) -> ExpandedKey;
836841

837842
/// Get node id based on the provided [`Recipient`].
838843
///
@@ -2113,7 +2118,7 @@ impl NodeSigner for KeysManager {
21132118
Ok(SharedSecret::new(other_key, &node_secret))
21142119
}
21152120

2116-
fn get_inbound_payment_key(&self) -> ExpandedKey {
2121+
fn get_expanded_key(&self) -> ExpandedKey {
21172122
self.inbound_payment_key.clone()
21182123
}
21192124

@@ -2274,7 +2279,7 @@ impl NodeSigner for PhantomKeysManager {
22742279
Ok(SharedSecret::new(other_key, &node_secret))
22752280
}
22762281

2277-
fn get_inbound_payment_key(&self) -> ExpandedKey {
2282+
fn get_expanded_key(&self) -> ExpandedKey {
22782283
self.inbound_payment_key.clone()
22792284
}
22802285

lightning/src/util/dyn_signer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ inner,
214214
fn sign_bolt12_invoice(,
215215
invoice: &crate::offers::invoice::UnsignedBolt12Invoice
216216
) -> Result<secp256k1::schnorr::Signature, ()>,
217-
fn get_inbound_payment_key(,) -> ExpandedKey
217+
fn get_expanded_key(,) -> ExpandedKey
218218
);
219219

220220
delegate!(DynKeysInterface, SignerProvider,
@@ -278,7 +278,7 @@ delegate!(DynPhantomKeysInterface, NodeSigner,
278278
fn sign_invoice(, invoice: &RawBolt11Invoice, recipient: Recipient) -> Result<RecoverableSignature, ()>,
279279
fn sign_bolt12_invoice(, invoice: &crate::offers::invoice::UnsignedBolt12Invoice
280280
) -> Result<secp256k1::schnorr::Signature, ()>,
281-
fn get_inbound_payment_key(,) -> ExpandedKey
281+
fn get_expanded_key(,) -> ExpandedKey
282282
);
283283

284284
impl SignerProvider for DynPhantomKeysInterface {

lightning/src/util/test_utils.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,7 +1486,7 @@ impl TestNodeSigner {
14861486
}
14871487

14881488
impl NodeSigner for TestNodeSigner {
1489-
fn get_inbound_payment_key(&self) -> ExpandedKey {
1489+
fn get_expanded_key(&self) -> ExpandedKey {
14901490
unreachable!()
14911491
}
14921492

@@ -1559,8 +1559,8 @@ impl NodeSigner for TestKeysInterface {
15591559
self.backing.ecdh(recipient, other_key, tweak)
15601560
}
15611561

1562-
fn get_inbound_payment_key(&self) -> ExpandedKey {
1563-
self.backing.get_inbound_payment_key()
1562+
fn get_expanded_key(&self) -> ExpandedKey {
1563+
self.backing.get_expanded_key()
15641564
}
15651565

15661566
fn sign_invoice(

0 commit comments

Comments
 (0)