Skip to content

Commit 9529226

Browse files
invoice: swap PaymentSecret for ChannelManager's PaymentSecret
1 parent 3be185a commit 9529226

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;
@@ -358,10 +359,6 @@ pub struct Description(String);
358359
#[derive(Eq, PartialEq, Debug, Clone)]
359360
pub struct PayeePubKey(pub PublicKey);
360361

361-
/// 256-bit payment secret
362-
#[derive(Eq, PartialEq, Debug, Clone)]
363-
pub struct PaymentSecret(pub [u8; 32]);
364-
365362
/// Positive duration that defines when (relatively to the timestamp) in the future the invoice
366363
/// expires
367364
///

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;
@@ -209,6 +211,33 @@ pub struct PaymentPreimage(pub [u8;32]);
209211
#[derive(Hash, Copy, Clone, PartialEq, Eq, Debug)]
210212
pub struct PaymentSecret(pub [u8;32]);
211213

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

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

0 commit comments

Comments
 (0)