Skip to content

Commit a8cc5fe

Browse files
committed
f - associated type on SignFunction
1 parent 0336dd1 commit a8cc5fe

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();
@@ -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::<_, Infallible>(|message: &UnsignedBolt12Invoice|
328+
.sign(|message: &UnsignedBolt12Invoice| -> Result<_, Infallible> {
329329
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
330-
)
330+
})
331331
.unwrap();
332332
Ok(invoice)
333333
}
@@ -535,9 +535,11 @@ macro_rules! unsigned_invoice_sign_method { ($self: ident, $self_type: ty $(, $s
535535
/// Signs the [`TaggedHash`] of the invoice using the given function.
536536
///
537537
/// Note: The hash computation may have included unknown, odd TLV records.
538-
pub fn sign<F, E>($($self_mut)* $self: $self_type, sign: F) -> Result<Bolt12Invoice, SignError<E>>
538+
pub fn sign<F>(
539+
$($self_mut)* $self: $self_type, sign: F
540+
) -> Result<Bolt12Invoice, SignError<F::Error>>
539541
where
540-
F: SignFunction<Self, E>,
542+
F: SignFunction<Self>,
541543
{
542544
let pubkey = $self.contents.fields().signing_pubkey;
543545
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();
@@ -228,9 +228,9 @@ macro_rules! invoice_request_derived_payer_id_builder_methods { (
228228
let secp_ctx = secp_ctx.unwrap();
229229
let keys = keys.unwrap();
230230
let invoice_request = unsigned_invoice_request
231-
.sign::<_, Infallible>(|message: &UnsignedInvoiceRequest|
231+
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
232232
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
233-
)
233+
})
234234
.unwrap();
235235
Ok(invoice_request)
236236
}
@@ -523,9 +523,11 @@ macro_rules! unsigned_invoice_request_sign_method { (
523523
/// Signs the [`TaggedHash`] of the invoice request using the given function.
524524
///
525525
/// Note: The hash computation may have included unknown, odd TLV records.
526-
pub fn sign<F, E>($($self_mut)* $self: $self_type, sign: F) -> Result<InvoiceRequest, SignError<E>>
526+
pub fn sign<F>(
527+
$($self_mut)* $self: $self_type, sign: F
528+
) -> Result<InvoiceRequest, SignError<F::Error>>
527529
where
528-
F: SignFunction<Self, E>,
530+
F: SignFunction<Self>,
529531
{
530532
let pubkey = $self.contents.payer_id;
531533
let signature = merkle::sign_message(sign, &$self, pubkey)?;
@@ -2125,9 +2127,9 @@ mod tests {
21252127
.build().unwrap()
21262128
.request_invoice(vec![1; 32], keys.public_key()).unwrap()
21272129
.build().unwrap()
2128-
.sign::<_, Infallible>(|message: &UnsignedInvoiceRequest|
2130+
.sign(|message: &UnsignedInvoiceRequest| -> Result<_, Infallible> {
21292131
Ok(secp_ctx.sign_schnorr_no_aux_rand(message.as_ref().as_digest(), &keys))
2130-
)
2132+
})
21312133
.unwrap();
21322134

21332135
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)