X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning-invoice%2Fsrc%2Flib.rs;h=9695d79036ecc6a776e9ab10e340f0a94a7463d1;hb=0b4bb24af8fe8de2d4958e2a8ae7eebdac4dc0f6;hp=21db4960417461e023110f41259deec6f189ff62;hpb=62ca48f979010b28de23f0b060aa056d502a3436;p=rust-lightning diff --git a/lightning-invoice/src/lib.rs b/lightning-invoice/src/lib.rs index 21db4960..9695d790 100644 --- a/lightning-invoice/src/lib.rs +++ b/lightning-invoice/src/lib.rs @@ -30,8 +30,6 @@ compile_error!("at least one of the `std` or `no-std` features must be enabled") pub mod payment; pub mod utils; -pub(crate) mod time_utils; - extern crate bech32; extern crate bitcoin_hashes; #[macro_use] extern crate lightning; @@ -50,11 +48,7 @@ use bech32::u5; use bitcoin::{Address, Network, PubkeyHash, ScriptHash}; use bitcoin::util::address::{Payload, WitnessVersion}; use bitcoin_hashes::{Hash, sha256}; -use lightning::ln::PaymentSecret; -use lightning::ln::features::InvoiceFeatures; -#[cfg(any(doc, test))] -use lightning::routing::gossip::RoutingFees; -use lightning::routing::router::RouteHint; +use lightning::ln::features::Bolt11InvoiceFeatures; use lightning::util::invoice::construct_invoice_preimage; use secp256k1::PublicKey; @@ -73,6 +67,13 @@ use core::str; #[cfg(feature = "serde")] use serde::{Deserialize, Deserializer,Serialize, Serializer, de::Error}; +#[doc(no_inline)] +pub use lightning::ln::PaymentSecret; +#[doc(no_inline)] +pub use lightning::routing::router::{RouteHint, RouteHintHop}; +#[doc(no_inline)] +pub use lightning::routing::gossip::RoutingFees; + mod de; mod ser; mod tb; @@ -260,7 +261,7 @@ pub struct Bolt11Invoice { /// This is not exported to bindings users as we don't have a good way to map the reference lifetimes making this /// practically impossible to use safely in languages like C. #[derive(Eq, PartialEq, Debug, Clone, Ord, PartialOrd)] -pub enum InvoiceDescription<'f> { +pub enum Bolt11InvoiceDescription<'f> { /// Reference to the directly supplied description in the invoice Direct(&'f Description), @@ -288,7 +289,7 @@ pub struct SignedRawBolt11Invoice { hash: [u8; 32], /// signature of the payment request - signature: InvoiceSignature, + signature: Bolt11InvoiceSignature, } /// Represents an syntactically correct [`Bolt11Invoice`] for a payment on the lightning network, @@ -448,7 +449,7 @@ pub enum TaggedField { PrivateRoute(PrivateRoute), PaymentSecret(PaymentSecret), PaymentMetadata(Vec), - Features(InvoiceFeatures), + Features(Bolt11InvoiceFeatures), } /// SHA-256 hash @@ -499,15 +500,15 @@ pub enum Fallback { /// Recoverable signature #[derive(Clone, Debug, Hash, Eq, PartialEq)] -pub struct InvoiceSignature(pub RecoverableSignature); +pub struct Bolt11InvoiceSignature(pub RecoverableSignature); -impl PartialOrd for InvoiceSignature { +impl PartialOrd for Bolt11InvoiceSignature { fn partial_cmp(&self, other: &Self) -> Option { self.0.serialize_compact().1.partial_cmp(&other.0.serialize_compact().1) } } -impl Ord for InvoiceSignature { +impl Ord for Bolt11InvoiceSignature { fn cmp(&self, other: &Self) -> Ordering { self.0.serialize_compact().1.cmp(&other.0.serialize_compact().1) } @@ -671,12 +672,12 @@ impl InvoiceBui } /// Set the description or description hash. This function is only available if no description (hash) was set. - pub fn invoice_description(self, description: InvoiceDescription) -> InvoiceBuilder { + pub fn invoice_description(self, description: Bolt11InvoiceDescription) -> InvoiceBuilder { match description { - InvoiceDescription::Direct(desc) => { + Bolt11InvoiceDescription::Direct(desc) => { self.description(desc.clone().into_inner()) } - InvoiceDescription::Hash(hash) => { + Bolt11InvoiceDescription::Hash(hash) => { self.description_hash(hash.0) } } @@ -744,7 +745,7 @@ impl InvoiceBui } self.tagged_fields.push(TaggedField::PaymentSecret(payment_secret)); if !found_features { - let mut features = InvoiceFeatures::empty(); + let mut features = Bolt11InvoiceFeatures::empty(); features.set_variable_length_onion_required(); features.set_payment_secret_required(); self.tagged_fields.push(TaggedField::Features(features)); @@ -770,7 +771,7 @@ impl InvoiceBui } } if !found_features { - let mut features = InvoiceFeatures::empty(); + let mut features = Bolt11InvoiceFeatures::empty(); features.set_payment_metadata_optional(); self.tagged_fields.push(TaggedField::Features(features)); } @@ -855,7 +856,7 @@ impl SignedRawBolt11Invoice { /// 1. raw invoice /// 2. hash of the raw invoice /// 3. signature - pub fn into_parts(self) -> (RawBolt11Invoice, [u8; 32], InvoiceSignature) { + pub fn into_parts(self) -> (RawBolt11Invoice, [u8; 32], Bolt11InvoiceSignature) { (self.raw_invoice, self.hash, self.signature) } @@ -870,7 +871,7 @@ impl SignedRawBolt11Invoice { } /// Signature for the invoice. - pub fn signature(&self) -> &InvoiceSignature { + pub fn signature(&self) -> &Bolt11InvoiceSignature { &self.signature } @@ -1004,7 +1005,7 @@ impl RawBolt11Invoice { Ok(SignedRawBolt11Invoice { raw_invoice: self, hash: raw_hash, - signature: InvoiceSignature(signature), + signature: Bolt11InvoiceSignature(signature), }) } @@ -1059,7 +1060,7 @@ impl RawBolt11Invoice { find_extract!(self.known_tagged_fields(), TaggedField::PaymentMetadata(ref x), x) } - pub fn features(&self) -> Option<&InvoiceFeatures> { + pub fn features(&self) -> Option<&Bolt11InvoiceFeatures> { find_extract!(self.known_tagged_fields(), TaggedField::Features(ref x), x) } @@ -1310,12 +1311,12 @@ impl Bolt11Invoice { /// Return the description or a hash of it for longer ones /// - /// This is not exported to bindings users because we don't yet export InvoiceDescription - pub fn description(&self) -> InvoiceDescription { + /// This is not exported to bindings users because we don't yet export Bolt11InvoiceDescription + pub fn description(&self) -> Bolt11InvoiceDescription { if let Some(direct) = self.signed_invoice.description() { - return InvoiceDescription::Direct(direct); + return Bolt11InvoiceDescription::Direct(direct); } else if let Some(hash) = self.signed_invoice.description_hash() { - return InvoiceDescription::Hash(hash); + return Bolt11InvoiceDescription::Hash(hash); } unreachable!("ensured by constructor"); } @@ -1336,7 +1337,7 @@ impl Bolt11Invoice { } /// Get the invoice features if they were included in the invoice - pub fn features(&self) -> Option<&InvoiceFeatures> { + pub fn features(&self) -> Option<&Bolt11InvoiceFeatures> { self.signed_invoice.features() } @@ -1591,7 +1592,7 @@ impl Deref for PrivateRoute { } } -impl Deref for InvoiceSignature { +impl Deref for Bolt11InvoiceSignature { type Target = RecoverableSignature; fn deref(&self) -> &RecoverableSignature { @@ -1797,7 +1798,7 @@ mod test { use secp256k1::Secp256k1; use secp256k1::ecdsa::{RecoveryId, RecoverableSignature}; use secp256k1::{SecretKey, PublicKey}; - use crate::{SignedRawBolt11Invoice, InvoiceSignature, RawBolt11Invoice, RawHrp, RawDataPart, Currency, Sha256, + use crate::{SignedRawBolt11Invoice, Bolt11InvoiceSignature, RawBolt11Invoice, RawHrp, RawDataPart, Currency, Sha256, PositiveTimestamp}; let invoice = SignedRawBolt11Invoice { @@ -1826,7 +1827,7 @@ mod test { 0x7b, 0x1d, 0x85, 0x8d, 0xb1, 0xd1, 0xf7, 0xab, 0x71, 0x37, 0xdc, 0xb7, 0x83, 0x5d, 0xb2, 0xec, 0xd5, 0x18, 0xe1, 0xc9 ], - signature: InvoiceSignature(RecoverableSignature::from_compact( + signature: Bolt11InvoiceSignature(RecoverableSignature::from_compact( & [ 0x38u8, 0xec, 0x68, 0x91, 0x34, 0x5e, 0x20, 0x41, 0x45, 0xbe, 0x8a, 0x3a, 0x99, 0xde, 0x38, 0xe9, 0x8a, 0x39, 0xd6, 0xa5, 0x69, 0x43, @@ -1863,7 +1864,7 @@ mod test { #[test] fn test_check_feature_bits() { use crate::TaggedField::*; - use lightning::ln::features::InvoiceFeatures; + use lightning::ln::features::Bolt11InvoiceFeatures; use secp256k1::Secp256k1; use secp256k1::SecretKey; use crate::{Bolt11Invoice, RawBolt11Invoice, RawHrp, RawDataPart, Currency, Sha256, PositiveTimestamp, @@ -1904,12 +1905,12 @@ mod test { let invoice = { let mut invoice = invoice_template.clone(); invoice.data.tagged_fields.push(PaymentSecret(payment_secret).into()); - invoice.data.tagged_fields.push(Features(InvoiceFeatures::empty()).into()); + invoice.data.tagged_fields.push(Features(Bolt11InvoiceFeatures::empty()).into()); invoice.sign::<_, ()>(|hash| Ok(Secp256k1::new().sign_ecdsa_recoverable(hash, &private_key))) }.unwrap(); assert_eq!(Bolt11Invoice::from_signed(invoice), Err(Bolt11SemanticError::InvalidFeatures)); - let mut payment_secret_features = InvoiceFeatures::empty(); + let mut payment_secret_features = Bolt11InvoiceFeatures::empty(); payment_secret_features.set_payment_secret_required(); // Including payment secret and feature bits @@ -1931,7 +1932,7 @@ mod test { // No payment secret or feature bits let invoice = { let mut invoice = invoice_template.clone(); - invoice.data.tagged_fields.push(Features(InvoiceFeatures::empty()).into()); + invoice.data.tagged_fields.push(Features(Bolt11InvoiceFeatures::empty()).into()); invoice.sign::<_, ()>(|hash| Ok(Secp256k1::new().sign_ecdsa_recoverable(hash, &private_key))) }.unwrap(); assert_eq!(Bolt11Invoice::from_signed(invoice), Err(Bolt11SemanticError::NoPaymentSecret)); @@ -2142,12 +2143,12 @@ mod test { assert_eq!(invoice.private_routes(), vec![&PrivateRoute(route_1), &PrivateRoute(route_2)]); assert_eq!( invoice.description(), - InvoiceDescription::Hash(&Sha256(sha256::Hash::from_slice(&[3;32][..]).unwrap())) + Bolt11InvoiceDescription::Hash(&Sha256(sha256::Hash::from_slice(&[3;32][..]).unwrap())) ); assert_eq!(invoice.payment_hash(), &sha256::Hash::from_slice(&[21;32][..]).unwrap()); assert_eq!(invoice.payment_secret(), &PaymentSecret([42; 32])); - let mut expected_features = InvoiceFeatures::empty(); + let mut expected_features = Bolt11InvoiceFeatures::empty(); expected_features.set_variable_length_onion_required(); expected_features.set_payment_secret_required(); expected_features.set_basic_mpp_optional();