Skip to content

Commit 0adcda5

Browse files
committed
f - associated type on SignFunction
1 parent 0773209 commit 0adcda5

File tree

3 files changed

+36
-27
lines changed

3 files changed

+36
-27
lines changed

lightning/src/offers/invoice.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@
5858
//! .allow_mpp()
5959
//! .fallback_v0_p2wpkh(&wpubkey_hash)
6060
//! .build()?
61-
//! .sign::<_, Infallible>(|message: &UnsignedBolt12Invoice|
61+
//! .sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
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::<_, Infallible>(|message: &UnsignedBolt12Invoice|
94+
//! .sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
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();
@@ -321,9 +321,9 @@ macro_rules! invoice_derived_signing_pubkey_builder_methods { ($self: ident, $se
321321
let mut unsigned_invoice = UnsignedBolt12Invoice::new(invreq_bytes, invoice.clone());
322322

323323
let invoice = unsigned_invoice
324-
.sign::<_, Infallible>(|message: &UnsignedBolt12Invoice|
324+
.sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
325325
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
326-
)
326+
})
327327
.unwrap();
328328
Ok(invoice)
329329
}
@@ -529,9 +529,11 @@ macro_rules! unsigned_invoice_sign_method { ($self: ident, $self_type: ty $(, $s
529529
/// Signs the [`TaggedHash`] of the invoice using the given function.
530530
///
531531
/// Note: The hash computation may have included unknown, odd TLV records.
532-
pub fn sign<F, E>($($self_mut)* $self: $self_type, sign: F) -> Result<Bolt12Invoice, SignError<E>>
532+
pub fn sign<F>(
533+
$($self_mut)* $self: $self_type, sign: F
534+
) -> Result<Bolt12Invoice, SignError<F::Error>>
533535
where
534-
F: SignFunction<Self, E>,
536+
F: SignFunction<Self>,
535537
{
536538
let pubkey = $self.contents.fields().signing_pubkey;
537539
let signature = merkle::sign_message(sign, &$self, pubkey)?;

lightning/src/offers/invoice_request.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@
4848
//! .quantity(5)?
4949
//! .payer_note("foo".to_string())
5050
//! .build()?
51-
//! .sign::<_, Infallible>(|message: &UnsignedInvoiceRequest|
51+
//! .sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
5252
//! Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
53-
//! )
53+
//! })
5454
//! .expect("failed verifying signature")
5555
//! .write(&mut buffer)
5656
//! .unwrap();
@@ -225,9 +225,9 @@ macro_rules! invoice_request_derived_payer_id_builder_methods { (
225225
let secp_ctx = secp_ctx.unwrap();
226226
let keys = keys.unwrap();
227227
let invoice_request = unsigned_invoice_request
228-
.sign::<_, Infallible>(|message: &UnsignedInvoiceRequest|
228+
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
229229
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
230-
)
230+
})
231231
.unwrap();
232232
Ok(invoice_request)
233233
}
@@ -514,9 +514,11 @@ macro_rules! unsigned_invoice_request_sign_method { (
514514
/// Signs the [`TaggedHash`] of the invoice request using the given function.
515515
///
516516
/// Note: The hash computation may have included unknown, odd TLV records.
517-
pub fn sign<F, E>($($self_mut)* $self: $self_type, sign: F) -> Result<InvoiceRequest, SignError<E>>
517+
pub fn sign<F>(
518+
$($self_mut)* $self: $self_type, sign: F
519+
) -> Result<InvoiceRequest, SignError<F::Error>>
518520
where
519-
F: SignFunction<Self, E>,
521+
F: SignFunction<Self>,
520522
{
521523
let pubkey = $self.contents.payer_id;
522524
let signature = merkle::sign_message(sign, &$self, pubkey)?;
@@ -2116,9 +2118,9 @@ mod tests {
21162118
.build().unwrap()
21172119
.request_invoice(vec![1; 32], keys.public_key()).unwrap()
21182120
.build().unwrap()
2119-
.sign::<_, Infallible>(|message: &UnsignedInvoiceRequest|
2121+
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
21202122
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
2121-
)
2123+
})
21222124
.unwrap();
21232125

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

lightning/src/offers/merkle.rs

+16-11
Original file line numberDiff line numberDiff line change
@@ -76,24 +76,29 @@ impl AsRef<TaggedHash> for TaggedHash {
7676

7777
/// Error when signing messages.
7878
#[derive(Debug, PartialEq)]
79-
pub enum SignError<E> {
79+
pub enum SignError<E = ()> {
8080
/// User-defined error when signing the message.
8181
Signing(E),
8282
/// Error when verifying the produced signature using the given pubkey.
8383
Verification(secp256k1::Error),
8484
}
8585

8686
/// A function for signing a [`TaggedHash`].
87-
pub trait SignFunction<T: AsRef<TaggedHash>, E> {
87+
pub trait SignFunction<T: AsRef<TaggedHash>> {
88+
/// Error type returned by the function.
89+
type Error;
90+
8891
/// Signs a [`TaggedHash`] computed over the merkle root of `message`'s TLV stream.
89-
fn sign(&self, message: &T) -> Result<Signature, E>;
92+
fn sign(&self, message: &T) -> Result<Signature, Self::Error>;
9093
}
9194

92-
impl<F, T, E> SignFunction<T, E> for F
95+
impl<F, T, E> SignFunction<T> for F
9396
where
9497
F: Fn(&T) -> Result<Signature, E>,
9598
T: AsRef<TaggedHash>,
9699
{
100+
type Error = E;
101+
97102
fn sign(&self, message: &T) -> Result<Signature, E> {
98103
self(message)
99104
}
@@ -112,7 +117,7 @@ pub(super) fn sign_message<F, T, E>(
112117
f: F, message: &T, pubkey: PublicKey,
113118
) -> Result<Signature, SignError<E>>
114119
where
115-
F: SignFunction<T, E>,
120+
F: SignFunction<T, Error = E>,
116121
T: AsRef<TaggedHash>,
117122
{
118123
let signature = f.sign(message).map_err(|e| SignError::Signing(e))?;
@@ -337,9 +342,9 @@ mod tests {
337342
.build_unchecked()
338343
.request_invoice(vec![0; 8], payer_keys.public_key()).unwrap()
339344
.build_unchecked()
340-
.sign::<_, Infallible>(|message: &UnsignedInvoiceRequest|
345+
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
341346
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &payer_keys))
342-
)
347+
})
343348
.unwrap();
344349
assert_eq!(
345350
invoice_request.to_string(),
@@ -391,9 +396,9 @@ mod tests {
391396
.build_unchecked()
392397
.request_invoice(vec![0; 8], payer_keys.public_key()).unwrap()
393398
.build_unchecked()
394-
.sign::<_, Infallible>(|message: &UnsignedInvoiceRequest|
399+
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
395400
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &payer_keys))
396-
)
401+
})
397402
.unwrap();
398403

399404
let mut bytes_without_signature = Vec::new();
@@ -423,9 +428,9 @@ mod tests {
423428
.build_unchecked()
424429
.request_invoice(vec![0; 8], payer_keys.public_key()).unwrap()
425430
.build_unchecked()
426-
.sign::<_, Infallible>(|message: &UnsignedInvoiceRequest|
431+
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
427432
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &payer_keys))
428-
)
433+
})
429434
.unwrap();
430435

431436
let tlv_stream = TlvStream::new(&invoice_request.bytes).range(0..1)

0 commit comments

Comments
 (0)