From: Matt Corallo <649246+TheBlueMatt@users.noreply.github.com> Date: Sat, 9 Apr 2022 15:25:42 +0000 (+0000) Subject: Merge pull request #1307 from jkczyz/2022-02-block-source-self-ref X-Git-Tag: v0.0.107~67 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=711bcefbcc0999543d9622c030ff7dc8118fc26f;hp=3cdbbf56e42daf67b954cd983052b09a9a18b8cd;p=rust-lightning Merge pull request #1307 from jkczyz/2022-02-block-source-self-ref Immutable BlockSource interface --- diff --git a/lightning-invoice/src/de.rs b/lightning-invoice/src/de.rs index 9e96849a..5de2b038 100644 --- a/lightning-invoice/src/de.rs +++ b/lightning-invoice/src/de.rs @@ -23,8 +23,8 @@ use secp256k1::recovery::{RecoveryId, RecoverableSignature}; use secp256k1::key::PublicKey; use super::{Invoice, Sha256, TaggedField, ExpiryTime, MinFinalCltvExpiry, Fallback, PayeePubKey, InvoiceSignature, PositiveTimestamp, - SemanticError, PrivateRoute, Description, RawTaggedField, Currency, RawHrp, SiPrefix, RawInvoice, constants, SignedRawInvoice, - RawDataPart, InvoiceFeatures}; + SemanticError, PrivateRoute, ParseError, ParseOrSemanticError, Description, RawTaggedField, Currency, RawHrp, SiPrefix, RawInvoice, + constants, SignedRawInvoice, RawDataPart, InvoiceFeatures}; use self::hrp_sm::parse_hrp; @@ -619,46 +619,6 @@ impl FromBase32 for PrivateRoute { } } -/// Errors that indicate what is wrong with the invoice. They have some granularity for debug -/// reasons, but should generally result in an "invalid BOLT11 invoice" message for the user. -#[allow(missing_docs)] -#[derive(PartialEq, Debug, Clone)] -pub enum ParseError { - Bech32Error(bech32::Error), - ParseAmountError(ParseIntError), - MalformedSignature(secp256k1::Error), - BadPrefix, - UnknownCurrency, - UnknownSiPrefix, - MalformedHRP, - TooShortDataPart, - UnexpectedEndOfTaggedFields, - DescriptionDecodeError(str::Utf8Error), - PaddingError, - IntegerOverflowError, - InvalidSegWitProgramLength, - InvalidPubKeyHashLength, - InvalidScriptHashLength, - InvalidRecoveryId, - InvalidSliceLength(String), - - /// Not an error, but used internally to signal that a part of the invoice should be ignored - /// according to BOLT11 - Skip, -} - -/// Indicates that something went wrong while parsing or validating the invoice. Parsing errors -/// should be mostly seen as opaque and are only there for debugging reasons. Semantic errors -/// like wrong signatures, missing fields etc. could mean that someone tampered with the invoice. -#[derive(PartialEq, Debug, Clone)] -pub enum ParseOrSemanticError { - /// The invoice couldn't be decoded - ParseError(ParseError), - - /// The invoice could be decoded but violates the BOLT11 standard - SemanticError(::SemanticError), -} - impl Display for ParseError { fn fmt(&self, f: &mut Formatter) -> fmt::Result { match *self { diff --git a/lightning-invoice/src/lib.rs b/lightning-invoice/src/lib.rs index 1dd7123a..5784607d 100644 --- a/lightning-invoice/src/lib.rs +++ b/lightning-invoice/src/lib.rs @@ -53,9 +53,11 @@ use secp256k1::recovery::RecoverableSignature; use core::fmt::{Display, Formatter, self}; use core::iter::FilterMap; +use core::num::ParseIntError; use core::ops::Deref; use core::slice::Iter; use core::time::Duration; +use core::str; mod de; mod ser; @@ -86,7 +88,45 @@ mod sync { #[cfg(not(feature = "std"))] mod sync; -pub use de::{ParseError, ParseOrSemanticError}; +/// Errors that indicate what is wrong with the invoice. They have some granularity for debug +/// reasons, but should generally result in an "invalid BOLT11 invoice" message for the user. +#[allow(missing_docs)] +#[derive(PartialEq, Debug, Clone)] +pub enum ParseError { + Bech32Error(bech32::Error), + ParseAmountError(ParseIntError), + MalformedSignature(secp256k1::Error), + BadPrefix, + UnknownCurrency, + UnknownSiPrefix, + MalformedHRP, + TooShortDataPart, + UnexpectedEndOfTaggedFields, + DescriptionDecodeError(str::Utf8Error), + PaddingError, + IntegerOverflowError, + InvalidSegWitProgramLength, + InvalidPubKeyHashLength, + InvalidScriptHashLength, + InvalidRecoveryId, + InvalidSliceLength(String), + + /// Not an error, but used internally to signal that a part of the invoice should be ignored + /// according to BOLT11 + Skip, +} + +/// Indicates that something went wrong while parsing or validating the invoice. Parsing errors +/// should be mostly seen as opaque and are only there for debugging reasons. Semantic errors +/// like wrong signatures, missing fields etc. could mean that someone tampered with the invoice. +#[derive(PartialEq, Debug, Clone)] +pub enum ParseOrSemanticError { + /// The invoice couldn't be decoded + ParseError(ParseError), + + /// The invoice could be decoded but violates the BOLT11 standard + SemanticError(::SemanticError), +} /// The number of bits used to represent timestamps as defined in BOLT 11. const TIMESTAMP_BITS: usize = 35;