Skip to content

Commit 562c90d

Browse files
committed
f - allow user-defined signing error
1 parent 21451c5 commit 562c90d

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

lightning/src/offers/invoice_request.rs

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -459,14 +459,15 @@ mod tests {
459459

460460
use bitcoin::blockdata::constants::ChainHash;
461461
use bitcoin::network::constants::Network;
462-
use bitcoin::secp256k1::{KeyPair, Message, PublicKey, Secp256k1, SecretKey};
462+
use bitcoin::secp256k1::{KeyPair, Message, PublicKey, Secp256k1, SecretKey, self};
463463
use bitcoin::secp256k1::schnorr::Signature;
464464
use core::convert::{Infallible, TryFrom};
465465
use core::num::NonZeroU64;
466466
#[cfg(feature = "std")]
467467
use core::time::Duration;
468468
use crate::ln::features::InvoiceRequestFeatures;
469469
use crate::ln::msgs::{DecodeError, MAX_VALUE_MSAT};
470+
use crate::offers::merkle::SignError;
470471
use crate::offers::offer::{OfferBuilder, Quantity};
471472
use crate::offers::parse::{ParseError, SemanticError};
472473
use crate::util::ser::{BigSize, Writeable};
@@ -477,16 +478,22 @@ mod tests {
477478
KeyPair::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap())
478479
}
479480

480-
fn payer_sign(digest: &Message) -> Signature {
481+
fn payer_sign(digest: &Message) -> Result<Signature, Infallible> {
481482
let secp_ctx = Secp256k1::new();
482483
let keys = KeyPair::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
483-
secp_ctx.sign_schnorr_no_aux_rand(digest, &keys)
484+
Ok(secp_ctx.sign_schnorr_no_aux_rand(digest, &keys))
484485
}
485486

486487
fn payer_pubkey() -> PublicKey {
487488
payer_keys().public_key()
488489
}
489490

491+
fn recipient_sign(digest: &Message) -> Result<Signature, Infallible> {
492+
let secp_ctx = Secp256k1::new();
493+
let keys = KeyPair::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[43; 32]).unwrap());
494+
Ok(secp_ctx.sign_schnorr_no_aux_rand(digest, &keys))
495+
}
496+
490497
fn recipient_pubkey() -> PublicKey {
491498
let secp_ctx = Secp256k1::new();
492499
KeyPair::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[43; 32]).unwrap()).public_key()
@@ -840,6 +847,31 @@ mod tests {
840847
assert_eq!(tlv_stream.payer_note, Some(&String::from("baz")));
841848
}
842849

850+
#[test]
851+
fn fails_signing_invoice_request() {
852+
match OfferBuilder::new("foo".into(), recipient_pubkey())
853+
.amount_msats(1000)
854+
.build().unwrap()
855+
.request_invoice(vec![1; 32], payer_pubkey())
856+
.build().unwrap()
857+
.sign(|digest| Err(()))
858+
{
859+
Ok(_) => panic!("expected error"),
860+
Err(e) => assert_eq!(e, SignError::Signing(())),
861+
}
862+
863+
match OfferBuilder::new("foo".into(), recipient_pubkey())
864+
.amount_msats(1000)
865+
.build().unwrap()
866+
.request_invoice(vec![1; 32], payer_pubkey())
867+
.build().unwrap()
868+
.sign(recipient_sign)
869+
{
870+
Ok(_) => panic!("expected error"),
871+
Err(e) => assert_eq!(e, SignError::Verification(secp256k1::Error::InvalidSignature)),
872+
}
873+
}
874+
843875
#[test]
844876
fn fails_parsing_invoice_request_with_extra_tlv_records() {
845877
let secp_ctx = Secp256k1::new();

lightning/src/offers/merkle.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ tlv_stream!(SignatureTlvStream, SignatureTlvStreamRef, SIGNATURE_TYPES, {
2525
});
2626

2727
/// Error when signing messages using [`sign_message`].
28-
#[derive(Debug)]
28+
#[derive(Debug, PartialEq)]
2929
pub enum SignError<E> {
3030
/// User-defined error when signing the message.
3131
Signing(E),

0 commit comments

Comments
 (0)