Skip to content

Commit 3baf2d4

Browse files
invoice: swap PaymentSecret for ChannelManager's PaymentSecret
1 parent a8bc8fb commit 3baf2d4

File tree

5 files changed

+33
-31
lines changed

5 files changed

+33
-31
lines changed

lightning-invoice/src/de.rs

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use bech32::{u5, FromBase32};
1010

1111
use bitcoin_hashes::Hash;
1212
use bitcoin_hashes::sha256;
13+
use lightning::ln::channelmanager::PaymentSecret;
1314
use lightning::routing::network_graph::RoutingFees;
1415
use lightning::routing::router::RouteHintHop;
1516

@@ -484,21 +485,6 @@ impl FromBase32 for PayeePubKey {
484485
}
485486
}
486487

487-
impl FromBase32 for PaymentSecret {
488-
type Err = ParseError;
489-
490-
fn from_base32(field_data: &[u5]) -> Result<PaymentSecret, ParseError> {
491-
if field_data.len() != 52 {
492-
Err(ParseError::Skip)
493-
} else {
494-
let data_bytes = Vec::<u8>::from_base32(field_data)?;
495-
let mut payment_secret = [0; 32];
496-
payment_secret.copy_from_slice(&data_bytes);
497-
Ok(PaymentSecret(payment_secret))
498-
}
499-
}
500-
}
501-
502488
impl FromBase32 for ExpiryTime {
503489
type Err = ParseError;
504490

lightning-invoice/src/lib.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use bech32::u5;
2525
use bitcoin_hashes::Hash;
2626
use bitcoin_hashes::sha256;
2727
use lightning::ln::features::InvoiceFeatures;
28+
use lightning::ln::channelmanager::PaymentSecret;
2829
#[cfg(any(doc, test))]
2930
use lightning::routing::network_graph::RoutingFees;
3031
use lightning::routing::router::RouteHintHop;
@@ -348,10 +349,6 @@ pub struct Description(String);
348349
#[derive(Eq, PartialEq, Debug, Clone)]
349350
pub struct PayeePubKey(pub PublicKey);
350351

351-
/// 256-bit payment secret
352-
#[derive(Eq, PartialEq, Debug, Clone)]
353-
pub struct PaymentSecret(pub [u8; 32]);
354-
355352
/// Positive duration that defines when (relatively to the timestamp) in the future the invoice
356353
/// expires
357354
///

lightning-invoice/src/ser.rs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -297,18 +297,6 @@ impl Base32Len for PayeePubKey {
297297
}
298298
}
299299

300-
impl ToBase32 for PaymentSecret {
301-
fn write_base32<W: WriteBase32>(&self, writer: &mut W) -> Result<(), <W as WriteBase32>::Err> {
302-
(&self.0[..]).write_base32(writer)
303-
}
304-
}
305-
306-
impl Base32Len for PaymentSecret {
307-
fn base32_len(&self) -> usize {
308-
bytes_size_to_base32_size(32)
309-
}
310-
}
311-
312300
impl ToBase32 for ExpiryTime {
313301
fn write_base32<W: WriteBase32>(&self, writer: &mut W) -> Result<(), <W as WriteBase32>::Err> {
314302
writer.write(&encode_int_be_base32(self.as_seconds()))

lightning-invoice/tests/ser_de.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
extern crate bitcoin_hashes;
2+
extern crate lightning;
23
extern crate lightning_invoice;
34
extern crate secp256k1;
45

56
use bitcoin_hashes::hex::FromHex;
67
use bitcoin_hashes::sha256;
8+
use lightning::ln::channelmanager::PaymentSecret;
79
use lightning_invoice::*;
810
use secp256k1::Secp256k1;
911
use secp256k1::key::SecretKey;

lightning/src/ln/channelmanager.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
//! imply it needs to fail HTLCs/payments/channels it manages).
1919
//!
2020
21+
use bitcoin::bech32;
22+
use bitcoin::bech32::{Base32Len, FromBase32, ToBase32, WriteBase32, u5};
2123
use bitcoin::blockdata::block::{Block, BlockHeader};
2224
use bitcoin::blockdata::transaction::Transaction;
2325
use bitcoin::blockdata::constants::genesis_block;
@@ -210,6 +212,33 @@ pub struct PaymentPreimage(pub [u8;32]);
210212
#[derive(Hash, Copy, Clone, PartialEq, Eq, Debug)]
211213
pub struct PaymentSecret(pub [u8;32]);
212214

215+
impl FromBase32 for PaymentSecret {
216+
type Err = bech32::Error;
217+
218+
fn from_base32(field_data: &[u5]) -> Result<PaymentSecret, bech32::Error> {
219+
if field_data.len() != 52 {
220+
return Err(bech32::Error::InvalidLength)
221+
} else {
222+
let data_bytes = Vec::<u8>::from_base32(field_data)?;
223+
let mut payment_secret = [0; 32];
224+
payment_secret.copy_from_slice(&data_bytes);
225+
Ok(PaymentSecret(payment_secret))
226+
}
227+
}
228+
}
229+
230+
impl ToBase32 for PaymentSecret {
231+
fn write_base32<W: WriteBase32>(&self, writer: &mut W) -> Result<(), <W as WriteBase32>::Err> {
232+
(&self.0[..]).write_base32(writer)
233+
}
234+
}
235+
236+
impl Base32Len for PaymentSecret {
237+
fn base32_len(&self) -> usize {
238+
52
239+
}
240+
}
241+
213242
type ShutdownResult = (Option<(OutPoint, ChannelMonitorUpdate)>, Vec<(HTLCSource, PaymentHash)>);
214243

215244
/// Error type returned across the channel_state mutex boundary. When an Err is generated for a

0 commit comments

Comments
 (0)