Skip to content

Commit d071113

Browse files
committed
Drop error type parameter from SignError
SignError allows implementors of SignFunction to return a custom error type. Drop this as an unconstrained type causes problems with bindings and isn't useful unless the caller can take some sort of action based on different errors.
1 parent 24c5c79 commit d071113

File tree

8 files changed

+65
-86
lines changed

8 files changed

+65
-86
lines changed

fuzz/src/invoice_request_deser.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
use bitcoin::secp256k1::{KeyPair, Parity, PublicKey, Secp256k1, SecretKey, self};
1111
use crate::utils::test_logger;
12-
use core::convert::{Infallible, TryFrom};
12+
use core::convert::TryFrom;
1313
use lightning::blinded_path::BlindedPath;
1414
use lightning::sign::EntropySource;
1515
use lightning::ln::PaymentHash;
@@ -37,17 +37,17 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
3737
let even_pubkey = x_only_pubkey.public_key(Parity::Even);
3838
if signing_pubkey == odd_pubkey || signing_pubkey == even_pubkey {
3939
unsigned_invoice
40-
.sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
40+
.sign(|message: &UnsignedBolt12Invoice|
4141
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
42-
})
42+
)
4343
.unwrap()
4444
.write(&mut buffer)
4545
.unwrap();
4646
} else {
4747
unsigned_invoice
48-
.sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
48+
.sign(|message: &UnsignedBolt12Invoice|
4949
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
50-
})
50+
)
5151
.unwrap_err();
5252
}
5353
}

fuzz/src/offer_deser.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
use bitcoin::secp256k1::{KeyPair, PublicKey, Secp256k1, SecretKey};
1111
use crate::utils::test_logger;
12-
use core::convert::{Infallible, TryFrom};
12+
use core::convert::TryFrom;
1313
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
1414
use lightning::offers::offer::{Amount, Offer, Quantity};
1515
use lightning::offers::parse::Bolt12SemanticError;
@@ -29,9 +29,9 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
2929

3030
if let Ok(invoice_request) = build_response(&offer, pubkey) {
3131
invoice_request
32-
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
32+
.sign(|message: &UnsignedInvoiceRequest|
3333
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
34-
})
34+
)
3535
.unwrap()
3636
.write(&mut buffer)
3737
.unwrap();

fuzz/src/refund_deser.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
use bitcoin::secp256k1::{KeyPair, PublicKey, Secp256k1, SecretKey, self};
1111
use crate::utils::test_logger;
12-
use core::convert::{Infallible, TryFrom};
12+
use core::convert::TryFrom;
1313
use lightning::blinded_path::BlindedPath;
1414
use lightning::sign::EntropySource;
1515
use lightning::ln::PaymentHash;
@@ -33,9 +33,9 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
3333

3434
if let Ok(invoice) = build_response(&refund, pubkey, &secp_ctx) {
3535
invoice
36-
.sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
36+
.sign(|message: &UnsignedBolt12Invoice|
3737
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
38-
})
38+
)
3939
.unwrap()
4040
.write(&mut buffer)
4141
.unwrap();

lightning/src/ln/channelmanager.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9306,7 +9306,7 @@ where
93069306
self.node_signer.sign_bolt12_invoice(invoice)
93079307
) {
93089308
Ok(invoice) => Ok(OffersMessage::Invoice(invoice)),
9309-
Err(SignError::Signing(())) => Err(OffersMessage::InvoiceError(
9309+
Err(SignError::Signing) => Err(OffersMessage::InvoiceError(
93109310
InvoiceError::from_string("Failed signing invoice".to_string())
93119311
)),
93129312
Err(SignError::Verification(_)) => Err(OffersMessage::InvoiceError(

lightning/src/offers/invoice.rs

+17-24
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
//!
2323
//! use bitcoin::hashes::Hash;
2424
//! use bitcoin::secp256k1::{KeyPair, PublicKey, Secp256k1, SecretKey};
25-
//! use core::convert::{Infallible, TryFrom};
25+
//! use core::convert::TryFrom;
2626
//! use lightning::offers::invoice::UnsignedBolt12Invoice;
2727
//! use lightning::offers::invoice_request::InvoiceRequest;
2828
//! use lightning::offers::refund::Refund;
@@ -58,9 +58,9 @@
5858
//! .allow_mpp()
5959
//! .fallback_v0_p2wpkh(&wpubkey_hash)
6060
//! .build()?
61-
//! .sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
61+
//! .sign(|message: &UnsignedBolt12Invoice|
6262
//! Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
63-
//! })
63+
//! )
6464
//! .expect("failed verifying signature")
6565
//! .write(&mut buffer)
6666
//! .unwrap();
@@ -91,9 +91,9 @@
9191
//! .allow_mpp()
9292
//! .fallback_v0_p2wpkh(&wpubkey_hash)
9393
//! .build()?
94-
//! .sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
94+
//! .sign(|message: &UnsignedBolt12Invoice|
9595
//! Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
96-
//! })
96+
//! )
9797
//! .expect("failed verifying signature")
9898
//! .write(&mut buffer)
9999
//! .unwrap();
@@ -110,7 +110,7 @@ use bitcoin::secp256k1::{KeyPair, PublicKey, Secp256k1, self};
110110
use bitcoin::secp256k1::schnorr::Signature;
111111
use bitcoin::address::{Address, Payload, WitnessProgram, WitnessVersion};
112112
use bitcoin::key::TweakedPublicKey;
113-
use core::convert::{AsRef, Infallible, TryFrom};
113+
use core::convert::{AsRef, TryFrom};
114114
use core::time::Duration;
115115
use crate::io;
116116
use crate::blinded_path::BlindedPath;
@@ -325,9 +325,9 @@ macro_rules! invoice_derived_signing_pubkey_builder_methods { ($self: ident, $se
325325
let mut unsigned_invoice = UnsignedBolt12Invoice::new(invreq_bytes, invoice.clone());
326326

327327
let invoice = unsigned_invoice
328-
.sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
328+
.sign(|message: &UnsignedBolt12Invoice|
329329
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
330-
})
330+
)
331331
.unwrap();
332332
Ok(invoice)
333333
}
@@ -510,31 +510,24 @@ pub struct UnsignedBolt12Invoice {
510510

511511
/// A function for signing an [`UnsignedBolt12Invoice`].
512512
pub trait SignBolt12InvoiceFn {
513-
/// Error type returned by the function.
514-
type Error;
515-
516513
/// Signs a [`TaggedHash`] computed over the merkle root of `message`'s TLV stream.
517-
fn sign_invoice(&self, message: &UnsignedBolt12Invoice) -> Result<Signature, Self::Error>;
514+
fn sign_invoice(&self, message: &UnsignedBolt12Invoice) -> Result<Signature, ()>;
518515
}
519516

520-
impl<F, E> SignBolt12InvoiceFn for F
517+
impl<F> SignBolt12InvoiceFn for F
521518
where
522-
F: Fn(&UnsignedBolt12Invoice) -> Result<Signature, E>,
519+
F: Fn(&UnsignedBolt12Invoice) -> Result<Signature, ()>,
523520
{
524-
type Error = E;
525-
526-
fn sign_invoice(&self, message: &UnsignedBolt12Invoice) -> Result<Signature, E> {
521+
fn sign_invoice(&self, message: &UnsignedBolt12Invoice) -> Result<Signature, ()> {
527522
self(message)
528523
}
529524
}
530525

531-
impl<F, E> SignFn<UnsignedBolt12Invoice> for F
526+
impl<F> SignFn<UnsignedBolt12Invoice> for F
532527
where
533-
F: SignBolt12InvoiceFn<Error = E>,
528+
F: SignBolt12InvoiceFn,
534529
{
535-
type Error = E;
536-
537-
fn sign(&self, message: &UnsignedBolt12Invoice) -> Result<Signature, Self::Error> {
530+
fn sign(&self, message: &UnsignedBolt12Invoice) -> Result<Signature, ()> {
538531
self.sign_invoice(message)
539532
}
540533
}
@@ -568,7 +561,7 @@ macro_rules! unsigned_invoice_sign_method { ($self: ident, $self_type: ty $(, $s
568561
/// Note: The hash computation may have included unknown, odd TLV records.
569562
pub fn sign<F: SignBolt12InvoiceFn>(
570563
$($self_mut)* $self: $self_type, sign: F
571-
) -> Result<Bolt12Invoice, SignError<F::Error>> {
564+
) -> Result<Bolt12Invoice, SignError> {
572565
let pubkey = $self.contents.fields().signing_pubkey;
573566
let signature = merkle::sign_message(sign, &$self, pubkey)?;
574567

@@ -2045,7 +2038,7 @@ mod tests {
20452038
.sign(fail_sign)
20462039
{
20472040
Ok(_) => panic!("expected error"),
2048-
Err(e) => assert_eq!(e, SignError::Signing(())),
2041+
Err(e) => assert_eq!(e, SignError::Signing),
20492042
}
20502043

20512044
match OfferBuilder::new("foo".into(), recipient_pubkey())

lightning/src/offers/invoice_request.rs

+17-25
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
//!
2626
//! use bitcoin::network::constants::Network;
2727
//! use bitcoin::secp256k1::{KeyPair, PublicKey, Secp256k1, SecretKey};
28-
//! use core::convert::Infallible;
2928
//! use lightning::ln::features::OfferFeatures;
3029
//! use lightning::offers::invoice_request::UnsignedInvoiceRequest;
3130
//! use lightning::offers::offer::Offer;
@@ -48,9 +47,9 @@
4847
//! .quantity(5)?
4948
//! .payer_note("foo".to_string())
5049
//! .build()?
51-
//! .sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
50+
//! .sign(|message: &UnsignedInvoiceRequest|
5251
//! Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
53-
//! })
52+
//! )
5453
//! .expect("failed verifying signature")
5554
//! .write(&mut buffer)
5655
//! .unwrap();
@@ -62,7 +61,7 @@ use bitcoin::blockdata::constants::ChainHash;
6261
use bitcoin::network::constants::Network;
6362
use bitcoin::secp256k1::{KeyPair, PublicKey, Secp256k1, self};
6463
use bitcoin::secp256k1::schnorr::Signature;
65-
use core::convert::{AsRef, Infallible, TryFrom};
64+
use core::convert::{AsRef, TryFrom};
6665
use core::ops::Deref;
6766
use crate::sign::EntropySource;
6867
use crate::io;
@@ -228,9 +227,9 @@ macro_rules! invoice_request_derived_payer_id_builder_methods { (
228227
let secp_ctx = secp_ctx.unwrap();
229228
let keys = keys.unwrap();
230229
let invoice_request = unsigned_invoice_request
231-
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
230+
.sign(|message: &UnsignedInvoiceRequest|
232231
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
233-
})
232+
)
234233
.unwrap();
235234
Ok(invoice_request)
236235
}
@@ -496,31 +495,24 @@ pub struct UnsignedInvoiceRequest {
496495

497496
/// A function for signing an [`UnsignedInvoiceRequest`].
498497
pub trait SignInvoiceRequestFn {
499-
/// Error type returned by the function.
500-
type Error;
501-
502498
/// Signs a [`TaggedHash`] computed over the merkle root of `message`'s TLV stream.
503-
fn sign_invoice_request(&self, message: &UnsignedInvoiceRequest) -> Result<Signature, Self::Error>;
499+
fn sign_invoice_request(&self, message: &UnsignedInvoiceRequest) -> Result<Signature, ()>;
504500
}
505501

506-
impl<F, E> SignInvoiceRequestFn for F
502+
impl<F> SignInvoiceRequestFn for F
507503
where
508-
F: Fn(&UnsignedInvoiceRequest) -> Result<Signature, E>,
504+
F: Fn(&UnsignedInvoiceRequest) -> Result<Signature, ()>,
509505
{
510-
type Error = E;
511-
512-
fn sign_invoice_request(&self, message: &UnsignedInvoiceRequest) -> Result<Signature, E> {
506+
fn sign_invoice_request(&self, message: &UnsignedInvoiceRequest) -> Result<Signature, ()> {
513507
self(message)
514508
}
515509
}
516510

517-
impl<F, E> SignFn<UnsignedInvoiceRequest> for F
511+
impl<F> SignFn<UnsignedInvoiceRequest> for F
518512
where
519-
F: SignInvoiceRequestFn<Error = E>,
513+
F: SignInvoiceRequestFn,
520514
{
521-
type Error = E;
522-
523-
fn sign(&self, message: &UnsignedInvoiceRequest) -> Result<Signature, Self::Error> {
515+
fn sign(&self, message: &UnsignedInvoiceRequest) -> Result<Signature, ()> {
524516
self.sign_invoice_request(message)
525517
}
526518
}
@@ -556,7 +548,7 @@ macro_rules! unsigned_invoice_request_sign_method { (
556548
/// Note: The hash computation may have included unknown, odd TLV records.
557549
pub fn sign<F: SignInvoiceRequestFn>(
558550
$($self_mut)* $self: $self_type, sign: F
559-
) -> Result<InvoiceRequest, SignError<F::Error>> {
551+
) -> Result<InvoiceRequest, SignError> {
560552
let pubkey = $self.contents.payer_id;
561553
let signature = merkle::sign_message(sign, &$self, pubkey)?;
562554

@@ -1111,7 +1103,7 @@ mod tests {
11111103
use bitcoin::blockdata::constants::ChainHash;
11121104
use bitcoin::network::constants::Network;
11131105
use bitcoin::secp256k1::{KeyPair, Secp256k1, SecretKey, self};
1114-
use core::convert::{Infallible, TryFrom};
1106+
use core::convert::TryFrom;
11151107
use core::num::NonZeroU64;
11161108
#[cfg(feature = "std")]
11171109
use core::time::Duration;
@@ -1744,7 +1736,7 @@ mod tests {
17441736
.sign(fail_sign)
17451737
{
17461738
Ok(_) => panic!("expected error"),
1747-
Err(e) => assert_eq!(e, SignError::Signing(())),
1739+
Err(e) => assert_eq!(e, SignError::Signing),
17481740
}
17491741

17501742
match OfferBuilder::new("foo".into(), recipient_pubkey())
@@ -2155,9 +2147,9 @@ mod tests {
21552147
.build().unwrap()
21562148
.request_invoice(vec![1; 32], keys.public_key()).unwrap()
21572149
.build().unwrap()
2158-
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
2150+
.sign(|message: &UnsignedInvoiceRequest|
21592151
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
2160-
})
2152+
)
21612153
.unwrap();
21622154

21632155
let mut encoded_invoice_request = Vec::new();

0 commit comments

Comments
 (0)