Skip to content

Commit 15d16e5

Browse files
committed
Add SignFunction trait to document parameters
1 parent c9c7093 commit 15d16e5

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

lightning/src/offers/invoice.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ use crate::ln::features::{BlindedHopFeatures, Bolt12InvoiceFeatures};
110110
use crate::ln::inbound_payment::ExpandedKey;
111111
use crate::ln::msgs::DecodeError;
112112
use crate::offers::invoice_request::{INVOICE_REQUEST_PAYER_ID_TYPE, INVOICE_REQUEST_TYPES, IV_BYTES as INVOICE_REQUEST_IV_BYTES, InvoiceRequest, InvoiceRequestContents, InvoiceRequestTlvStream, InvoiceRequestTlvStreamRef};
113-
use crate::offers::merkle::{SignError, SignatureTlvStream, SignatureTlvStreamRef, TaggedBytes, TlvStream, WithoutSignatures, self};
113+
use crate::offers::merkle::{SignError, SignFunction, SignatureTlvStream, SignatureTlvStreamRef, TaggedBytes, TlvStream, WithoutSignatures, self};
114114
use crate::offers::offer::{Amount, OFFER_TYPES, OfferTlvStream, OfferTlvStreamRef};
115115
use crate::offers::parse::{ParseError, ParsedMessage, SemanticError};
116116
use crate::offers::payer::{PAYER_METADATA_TYPE, PayerTlvStream, PayerTlvStreamRef};
@@ -383,7 +383,7 @@ impl<'a> UnsignedInvoice<'a> {
383383
/// This is not exported to bindings users as functions aren't currently mapped.
384384
pub fn sign<F, E>(self, sign: F) -> Result<Invoice, SignError<E>>
385385
where
386-
F: FnOnce(&TaggedBytes, &[u8]) -> Result<Signature, E>
386+
F: SignFunction<E>
387387
{
388388
// Use the invoice_request bytes instead of the invoice_request TLV stream as the latter may
389389
// have contained unknown TLV records, which are not stored in `InvoiceRequestContents` or

lightning/src/offers/invoice_request.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ use crate::ln::features::InvoiceRequestFeatures;
6666
use crate::ln::inbound_payment::{ExpandedKey, IV_LEN, Nonce};
6767
use crate::ln::msgs::DecodeError;
6868
use crate::offers::invoice::{BlindedPayInfo, DerivedSigningPubkey, ExplicitSigningPubkey, InvoiceBuilder};
69-
use crate::offers::merkle::{SignError, SignatureTlvStream, SignatureTlvStreamRef, TaggedBytes, self};
69+
use crate::offers::merkle::{SignError, SignFunction, SignatureTlvStream, SignatureTlvStreamRef, TaggedBytes, self};
7070
use crate::offers::offer::{Offer, OfferContents, OfferTlvStream, OfferTlvStreamRef};
7171
use crate::offers::parse::{ParseError, ParsedMessage, SemanticError};
7272
use crate::offers::payer::{PayerContents, PayerTlvStream, PayerTlvStreamRef};
@@ -354,7 +354,7 @@ impl<'a> UnsignedInvoiceRequest<'a> {
354354
/// This is not exported to bindings users as functions are not yet mapped.
355355
pub fn sign<F, E>(self, sign: F) -> Result<InvoiceRequest, SignError<E>>
356356
where
357-
F: FnOnce(&TaggedBytes, &[u8]) -> Result<Signature, E>
357+
F: SignFunction<E>
358358
{
359359
// Use the offer bytes instead of the offer TLV stream as the offer may have contained
360360
// unknown TLV records, which are not stored in `OfferContents`.

lightning/src/offers/merkle.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ tlv_stream!(SignatureTlvStream, SignatureTlvStreamRef, SIGNATURE_TYPES, {
2525
(240, signature: Signature),
2626
});
2727

28+
/// A function for signing a [`Message`] digest produced from the given [`TaggedBytes`]. See
29+
/// [`TaggedBytes::digest`] for details.
30+
///
31+
/// The second parameter is either the payer or offer metadata, depending on the TLV stream
32+
/// represented by the first parameter, and may be useful in order to derive the signing keys.
33+
pub trait SignFunction<E>: FnOnce(&TaggedBytes, &[u8]) -> Result<Signature, E> {}
34+
35+
impl<F, E> SignFunction<E> for F where F: FnOnce(&TaggedBytes, &[u8]) -> Result<Signature, E> {}
36+
2837
/// Bytes associated with a tag, which are used to produced a [`Message`] digest to sign.
2938
pub struct TaggedBytes<'a> {
3039
tag: &'a str,
@@ -38,7 +47,8 @@ impl<'a> TaggedBytes<'a> {
3847
Self { tag, bytes, digest: RefCell::new(None) }
3948
}
4049

41-
/// Returns the digest to sign.
50+
/// Returns the digest to sign as defined in the BOLT 12 spec's "Signature Calculation" section.
51+
/// (i.e., the tagged merkle root of a TLV stream).
4252
pub fn digest(&self) -> Message {
4353
*self.digest.borrow_mut().get_or_insert_with(|| message_digest(self.tag, self.bytes))
4454
}
@@ -64,7 +74,7 @@ pub(super) fn sign_message<F, E>(
6474
sign: F, message: TaggedBytes, metadata: &[u8], pubkey: PublicKey,
6575
) -> Result<Signature, SignError<E>>
6676
where
67-
F: FnOnce(&TaggedBytes, &[u8]) -> Result<Signature, E>
77+
F: SignFunction<E>
6878
{
6979
let signature = sign(&message, metadata).map_err(|e| SignError::Signing(e))?;
7080

0 commit comments

Comments
 (0)