Skip to content

Commit 5cb3c44

Browse files
committed
Add offer_id
1 parent 217bbec commit 5cb3c44

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

lightning/src/offers/merkle.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use util::ser::{BigSize, Readable};
1414

1515
const SIGNATURE_TYPES: core::ops::RangeInclusive<u64> = 240..=1000;
1616

17-
pub(super) fn tagged_root_hash(tag: sha256::Hash, data: &[u8]) -> sha256::Hash {
17+
pub(super) fn root_hash(data: &[u8]) -> sha256::Hash {
1818
let mut engine = sha256::Hash::engine();
1919
engine.input("LnAll".as_bytes());
2020
for record in TlvStream::new(&data[..]) {
@@ -48,7 +48,15 @@ pub(super) fn tagged_root_hash(tag: sha256::Hash, data: &[u8]) -> sha256::Hash {
4848
}
4949

5050
// TODO: Can we ever have zero leaves?
51-
tagged_hash(tag, leaves.first().unwrap())
51+
*leaves.first().unwrap()
52+
}
53+
54+
pub(super) fn tagged_hash<T: AsRef<[u8]>>(tag: sha256::Hash, msg: T) -> sha256::Hash {
55+
let mut engine = sha256::Hash::engine();
56+
engine.input(tag.as_ref());
57+
engine.input(tag.as_ref());
58+
engine.input(msg.as_ref());
59+
sha256::Hash::from_engine(engine)
5260
}
5361

5462
fn tagged_branch_hash(tag: sha256::Hash, leaf1: sha256::Hash, leaf2: sha256::Hash) -> sha256::Hash {
@@ -65,14 +73,6 @@ fn tagged_branch_hash(tag: sha256::Hash, leaf1: sha256::Hash, leaf2: sha256::Has
6573
sha256::Hash::from_engine(engine)
6674
}
6775

68-
fn tagged_hash<T: AsRef<[u8]>>(tag: sha256::Hash, msg: T) -> sha256::Hash {
69-
let mut engine = sha256::Hash::engine();
70-
engine.input(tag.as_ref());
71-
engine.input(tag.as_ref());
72-
engine.input(msg.as_ref());
73-
sha256::Hash::from_engine(engine)
74-
}
75-
7676
struct TlvStream<'a> {
7777
data: ::io::Cursor<&'a [u8]>,
7878
}

lightning/src/offers/mod.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ mod merkle;
3636
///
3737
#[derive(Clone, Debug)]
3838
pub struct Offer {
39+
id: sha256::Hash,
3940
chains: Option<Vec<BlockHash>>,
4041
amount: Option<Amount>,
4142
description: String,
@@ -51,6 +52,11 @@ pub struct Offer {
5152
}
5253

5354
impl Offer {
55+
///
56+
pub fn id(&self) -> sha256::Hash {
57+
self.id
58+
}
59+
5460
///
5561
pub fn chain(&self) -> BlockHash {
5662
self.chains
@@ -417,15 +423,16 @@ impl TryFrom<ParsedOffer> for Offer {
417423
(Some(_), _) => Some(SendInvoice { refund_for }),
418424
};
419425

420-
426+
let id = merkle::root_hash(&data);
421427
if let Some(signature) = &signature {
422428
let tag = sha256::Hash::hash(concat!("lightning", "offer", "signature").as_bytes());
423-
let message = Message::from_slice(&merkle::tagged_root_hash(tag, &data)).unwrap();
429+
let message = Message::from_slice(&merkle::tagged_hash(tag, id)).unwrap();
424430
let secp_ctx = Secp256k1::verification_only();
425431
secp_ctx.verify_schnorr(signature, &message, &destination.node_id())?;
426432
}
427433

428434
Ok(Offer {
435+
id,
429436
chains,
430437
amount,
431438
description: description.unwrap().0,

0 commit comments

Comments
 (0)