projects
/
rust-lightning
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
DRY up InvoiceFields construction
[rust-lightning]
/
lightning
/
src
/
offers
/
offer.rs
diff --git
a/lightning/src/offers/offer.rs
b/lightning/src/offers/offer.rs
index 617496d4b5174f45e51b8c72b54309c96038fed6..d2918e809429d8f5db858b52930e8e19634e869e 100644
(file)
--- a/
lightning/src/offers/offer.rs
+++ b/
lightning/src/offers/offer.rs
@@
-68,7
+68,7
@@
use bitcoin::blockdata::constants::ChainHash;
use bitcoin::network::constants::Network;
use bitcoin::blockdata::constants::ChainHash;
use bitcoin::network::constants::Network;
-use bitcoin::secp256k1::{PublicKey, Secp256k1, self};
+use bitcoin::secp256k1::{
KeyPair,
PublicKey, Secp256k1, self};
use core::convert::TryFrom;
use core::num::NonZeroU64;
use core::ops::Deref;
use core::convert::TryFrom;
use core::num::NonZeroU64;
use core::ops::Deref;
@@
-92,7
+92,7
@@
use crate::prelude::*;
#[cfg(feature = "std")]
use std::time::SystemTime;
#[cfg(feature = "std")]
use std::time::SystemTime;
-const IV_BYTES: &[u8; IV_LEN] = b"LDK Offer ~~~~~~";
+
pub(super)
const IV_BYTES: &[u8; IV_LEN] = b"LDK Offer ~~~~~~";
/// Builds an [`Offer`] for the "offer to be paid" flow.
///
/// Builds an [`Offer`] for the "offer to be paid" flow.
///
@@
-443,8
+443,8
@@
impl Offer {
/// - derives the [`InvoiceRequest::payer_id`] such that a different key can be used for each
/// request, and
/// - sets the [`InvoiceRequest::metadata`] when [`InvoiceRequestBuilder::build`] is called such
/// - derives the [`InvoiceRequest::payer_id`] such that a different key can be used for each
/// request, and
/// - sets the [`InvoiceRequest::metadata`] when [`InvoiceRequestBuilder::build`] is called such
- /// that it can be used
to determine if the invoice was requested using a base [`ExpandedKey`]
- /// from which the payer id was derived.
+ /// that it can be used
by [`Invoice::verify`] to determine if the invoice was requested using
+ ///
a base [`ExpandedKey`]
from which the payer id was derived.
///
/// Useful to protect the sender's privacy.
///
///
/// Useful to protect the sender's privacy.
///
@@
-615,11
+615,11
@@
impl OfferContents {
/// Verifies that the offer metadata was produced from the offer in the TLV stream.
pub(super) fn verify<T: secp256k1::Signing>(
/// Verifies that the offer metadata was produced from the offer in the TLV stream.
pub(super) fn verify<T: secp256k1::Signing>(
- &self,
tlv_stream: TlvStream<'_>
, key: &ExpandedKey, secp_ctx: &Secp256k1<T>
- ) ->
bool
{
+ &self,
bytes: &[u8]
, key: &ExpandedKey, secp_ctx: &Secp256k1<T>
+ ) ->
Result<Option<KeyPair>, ()>
{
match self.metadata() {
Some(metadata) => {
match self.metadata() {
Some(metadata) => {
- let tlv_stream =
tlv_stream
.range(OFFER_TYPES).filter(|record| {
+ let tlv_stream =
TlvStream::new(bytes)
.range(OFFER_TYPES).filter(|record| {
match record.r#type {
OFFER_METADATA_TYPE => false,
OFFER_NODE_ID_TYPE => !self.metadata.as_ref().unwrap().derives_keys(),
match record.r#type {
OFFER_METADATA_TYPE => false,
OFFER_NODE_ID_TYPE => !self.metadata.as_ref().unwrap().derives_keys(),
@@
-630,7
+630,7
@@
impl OfferContents {
metadata, key, IV_BYTES, self.signing_pubkey(), tlv_stream, secp_ctx
)
},
metadata, key, IV_BYTES, self.signing_pubkey(), tlv_stream, secp_ctx
)
},
- None =>
false
,
+ None =>
Err(())
,
}
}
}
}
@@
-722,7
+722,7
@@
impl Quantity {
}
/// Valid type range for offer TLV records.
}
/// Valid type range for offer TLV records.
-const OFFER_TYPES: core::ops::Range<u64> = 1..80;
+
pub(super)
const OFFER_TYPES: core::ops::Range<u64> = 1..80;
/// TLV record type for [`Offer::metadata`].
const OFFER_METADATA_TYPE: u64 = 4;
/// TLV record type for [`Offer::metadata`].
const OFFER_METADATA_TYPE: u64 = 4;
@@
-962,7
+962,7
@@
mod tests {
let invoice_request = offer.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
let invoice_request = offer.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
- assert!(invoice_request.verify(&expanded_key, &secp_ctx));
+ assert!(invoice_request.verify(&expanded_key, &secp_ctx)
.is_ok()
);
// Fails verification with altered offer field
let mut tlv_stream = offer.as_tlv_stream();
// Fails verification with altered offer field
let mut tlv_stream = offer.as_tlv_stream();
@@
-975,7
+975,7
@@
mod tests {
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
- assert!(
!invoice_request.verify(&expanded_key, &secp_ctx
));
+ assert!(
invoice_request.verify(&expanded_key, &secp_ctx).is_err(
));
// Fails verification with altered metadata
let mut tlv_stream = offer.as_tlv_stream();
// Fails verification with altered metadata
let mut tlv_stream = offer.as_tlv_stream();
@@
-989,7
+989,7
@@
mod tests {
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
- assert!(
!invoice_request.verify(&expanded_key, &secp_ctx
));
+ assert!(
invoice_request.verify(&expanded_key, &secp_ctx).is_err(
));
}
#[test]
}
#[test]
@@
-1019,7
+1019,7
@@
mod tests {
let invoice_request = offer.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
let invoice_request = offer.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
- assert!(invoice_request.verify(&expanded_key, &secp_ctx));
+ assert!(invoice_request.verify(&expanded_key, &secp_ctx)
.is_ok()
);
// Fails verification with altered offer field
let mut tlv_stream = offer.as_tlv_stream();
// Fails verification with altered offer field
let mut tlv_stream = offer.as_tlv_stream();
@@
-1032,7
+1032,7
@@
mod tests {
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
- assert!(
!invoice_request.verify(&expanded_key, &secp_ctx
));
+ assert!(
invoice_request.verify(&expanded_key, &secp_ctx).is_err(
));
// Fails verification with altered signing pubkey
let mut tlv_stream = offer.as_tlv_stream();
// Fails verification with altered signing pubkey
let mut tlv_stream = offer.as_tlv_stream();
@@
-1046,7
+1046,7
@@
mod tests {
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
.build().unwrap()
.sign(payer_sign).unwrap();
- assert!(
!invoice_request.verify(&expanded_key, &secp_ctx
));
+ assert!(
invoice_request.verify(&expanded_key, &secp_ctx).is_err(
));
}
#[test]
}
#[test]