44
44
//! .quantity(5)?
45
45
//! .payer_note("foo".to_string())
46
46
//! .build()?
47
- //! .sign::<_, Infallible>(|digest | Ok(secp_ctx.sign_schnorr_no_aux_rand(digest, &keys)))
47
+ //! .sign::<_, Infallible>(|message, _ | Ok(secp_ctx.sign_schnorr_no_aux_rand(&message. digest() , &keys)))
48
48
//! .expect("failed verifying signature")
49
49
//! .write(&mut buffer)
50
50
//! .unwrap();
54
54
55
55
use bitcoin:: blockdata:: constants:: ChainHash ;
56
56
use bitcoin:: network:: constants:: Network ;
57
- use bitcoin:: secp256k1:: { KeyPair , Message , PublicKey , Secp256k1 , self } ;
57
+ use bitcoin:: secp256k1:: { KeyPair , PublicKey , Secp256k1 , self } ;
58
58
use bitcoin:: secp256k1:: schnorr:: Signature ;
59
59
use core:: convert:: { Infallible , TryFrom } ;
60
60
use core:: ops:: Deref ;
@@ -66,7 +66,7 @@ use crate::ln::features::InvoiceRequestFeatures;
66
66
use crate :: ln:: inbound_payment:: { ExpandedKey , IV_LEN , Nonce } ;
67
67
use crate :: ln:: msgs:: DecodeError ;
68
68
use crate :: offers:: invoice:: { BlindedPayInfo , DerivedSigningPubkey , ExplicitSigningPubkey , InvoiceBuilder } ;
69
- use crate :: offers:: merkle:: { SignError , SignatureTlvStream , SignatureTlvStreamRef , self } ;
69
+ use crate :: offers:: merkle:: { SignError , SignatureTlvStream , SignatureTlvStreamRef , TaggedBytes , self } ;
70
70
use crate :: offers:: offer:: { Offer , OfferContents , OfferTlvStream , OfferTlvStreamRef } ;
71
71
use crate :: offers:: parse:: { ParseError , ParsedMessage , SemanticError } ;
72
72
use crate :: offers:: payer:: { PayerContents , PayerTlvStream , PayerTlvStreamRef } ;
@@ -306,7 +306,9 @@ impl<'a, 'b, T: secp256k1::Signing> InvoiceRequestBuilder<'a, 'b, DerivedPayerId
306
306
let secp_ctx = secp_ctx. unwrap ( ) ;
307
307
let keys = keys. unwrap ( ) ;
308
308
let invoice_request = unsigned_invoice_request
309
- . sign :: < _ , Infallible > ( |digest| Ok ( secp_ctx. sign_schnorr_no_aux_rand ( digest, & keys) ) )
309
+ . sign :: < _ , Infallible > (
310
+ |message, _| Ok ( secp_ctx. sign_schnorr_no_aux_rand ( & message. digest ( ) , & keys) )
311
+ )
310
312
. unwrap ( ) ;
311
313
Ok ( invoice_request)
312
314
}
@@ -352,7 +354,7 @@ impl<'a> UnsignedInvoiceRequest<'a> {
352
354
/// This is not exported to bindings users as functions are not yet mapped.
353
355
pub fn sign < F , E > ( self , sign : F ) -> Result < InvoiceRequest , SignError < E > >
354
356
where
355
- F : FnOnce ( & Message ) -> Result < Signature , E >
357
+ F : FnOnce ( & TaggedBytes , & [ u8 ] ) -> Result < Signature , E >
356
358
{
357
359
// Use the offer bytes instead of the offer TLV stream as the offer may have contained
358
360
// unknown TLV records, which are not stored in `OfferContents`.
@@ -364,8 +366,10 @@ impl<'a> UnsignedInvoiceRequest<'a> {
364
366
let mut bytes = Vec :: new ( ) ;
365
367
unsigned_tlv_stream. write ( & mut bytes) . unwrap ( ) ;
366
368
369
+ let message = TaggedBytes :: new ( SIGNATURE_TAG , & bytes) ;
370
+ let metadata = self . offer . metadata ( ) . map ( |metadata| metadata. as_slice ( ) ) . unwrap_or ( & [ ] ) ;
367
371
let pubkey = self . invoice_request . payer_id ;
368
- let signature = merkle:: sign_message ( sign, SIGNATURE_TAG , & bytes , pubkey) ?;
372
+ let signature = merkle:: sign_message ( sign, message , metadata , pubkey) ?;
369
373
370
374
// Append the signature TLV record to the bytes.
371
375
let signature_tlv_stream = SignatureTlvStreamRef {
@@ -591,7 +595,7 @@ impl InvoiceRequest {
591
595
}
592
596
593
597
impl InvoiceRequestContents {
594
- pub fn metadata ( & self ) -> & [ u8 ] {
598
+ pub ( super ) fn metadata ( & self ) -> & [ u8 ] {
595
599
self . inner . metadata ( )
596
600
}
597
601
@@ -790,7 +794,7 @@ mod tests {
790
794
use crate :: ln:: inbound_payment:: ExpandedKey ;
791
795
use crate :: ln:: msgs:: { DecodeError , MAX_VALUE_MSAT } ;
792
796
use crate :: offers:: invoice:: { Invoice , SIGNATURE_TAG as INVOICE_SIGNATURE_TAG } ;
793
- use crate :: offers:: merkle:: { SignError , SignatureTlvStreamRef , self } ;
797
+ use crate :: offers:: merkle:: { SignError , SignatureTlvStreamRef , TaggedBytes , self } ;
794
798
use crate :: offers:: offer:: { Amount , OfferBuilder , OfferTlvStreamRef , Quantity } ;
795
799
use crate :: offers:: parse:: { ParseError , SemanticError } ;
796
800
use crate :: offers:: payer:: PayerTlvStreamRef ;
@@ -922,8 +926,9 @@ mod tests {
922
926
let mut bytes = Vec :: new ( ) ;
923
927
tlv_stream. write ( & mut bytes) . unwrap ( ) ;
924
928
929
+ let message = TaggedBytes :: new ( INVOICE_SIGNATURE_TAG , & bytes) ;
925
930
let signature = merkle:: sign_message (
926
- recipient_sign, INVOICE_SIGNATURE_TAG , & bytes , recipient_pubkey ( )
931
+ recipient_sign, message , invoice_request . metadata ( ) , recipient_pubkey ( )
927
932
) . unwrap ( ) ;
928
933
signature_tlv_stream. signature = Some ( & signature) ;
929
934
@@ -946,8 +951,9 @@ mod tests {
946
951
let mut bytes = Vec :: new ( ) ;
947
952
tlv_stream. write ( & mut bytes) . unwrap ( ) ;
948
953
954
+ let message = TaggedBytes :: new ( INVOICE_SIGNATURE_TAG , & bytes) ;
949
955
let signature = merkle:: sign_message (
950
- recipient_sign, INVOICE_SIGNATURE_TAG , & bytes , recipient_pubkey ( )
956
+ recipient_sign, message , & metadata , recipient_pubkey ( )
951
957
) . unwrap ( ) ;
952
958
signature_tlv_stream. signature = Some ( & signature) ;
953
959
@@ -992,8 +998,9 @@ mod tests {
992
998
let mut bytes = Vec :: new ( ) ;
993
999
tlv_stream. write ( & mut bytes) . unwrap ( ) ;
994
1000
1001
+ let message = TaggedBytes :: new ( INVOICE_SIGNATURE_TAG , & bytes) ;
995
1002
let signature = merkle:: sign_message (
996
- recipient_sign, INVOICE_SIGNATURE_TAG , & bytes , recipient_pubkey ( )
1003
+ recipient_sign, message , invoice_request . metadata ( ) , recipient_pubkey ( )
997
1004
) . unwrap ( ) ;
998
1005
signature_tlv_stream. signature = Some ( & signature) ;
999
1006
@@ -1016,8 +1023,9 @@ mod tests {
1016
1023
let mut bytes = Vec :: new ( ) ;
1017
1024
tlv_stream. write ( & mut bytes) . unwrap ( ) ;
1018
1025
1026
+ let message = TaggedBytes :: new ( INVOICE_SIGNATURE_TAG , & bytes) ;
1019
1027
let signature = merkle:: sign_message (
1020
- recipient_sign, INVOICE_SIGNATURE_TAG , & bytes , recipient_pubkey ( )
1028
+ recipient_sign, message , invoice_request . metadata ( ) , recipient_pubkey ( )
1021
1029
) . unwrap ( ) ;
1022
1030
signature_tlv_stream. signature = Some ( & signature) ;
1023
1031
@@ -1357,7 +1365,7 @@ mod tests {
1357
1365
. build ( ) . unwrap ( )
1358
1366
. request_invoice ( vec ! [ 1 ; 32 ] , payer_pubkey ( ) ) . unwrap ( )
1359
1367
. build ( ) . unwrap ( )
1360
- . sign ( |_| Err ( ( ) ) )
1368
+ . sign ( |_, _ | Err ( ( ) ) )
1361
1369
{
1362
1370
Ok ( _) => panic ! ( "expected error" ) ,
1363
1371
Err ( e) => assert_eq ! ( e, SignError :: Signing ( ( ) ) ) ,
@@ -1771,7 +1779,9 @@ mod tests {
1771
1779
. build ( ) . unwrap ( )
1772
1780
. request_invoice ( vec ! [ 1 ; 32 ] , keys. public_key ( ) ) . unwrap ( )
1773
1781
. build ( ) . unwrap ( )
1774
- . sign :: < _ , Infallible > ( |digest| Ok ( secp_ctx. sign_schnorr_no_aux_rand ( digest, & keys) ) )
1782
+ . sign :: < _ , Infallible > (
1783
+ |message, _| Ok ( secp_ctx. sign_schnorr_no_aux_rand ( & message. digest ( ) , & keys) )
1784
+ )
1775
1785
. unwrap ( ) ;
1776
1786
1777
1787
let mut encoded_invoice_request = Vec :: new ( ) ;
0 commit comments