Remove secp256k1 dependency.

This commit is contained in:
Arik Sosman 2024-08-14 13:07:24 -07:00
parent 176d2ad599
commit 0cc9378afc
No known key found for this signature in database
GPG key ID: CFF795E7811C0093
5 changed files with 31 additions and 35 deletions

View file

@ -22,9 +22,8 @@ std = ["bech32/std"]
[dependencies]
bech32 = { version = "0.9.1", default-features = false }
lightning-types = { version = "0.1", path = "../lightning-types", default-features = false }
secp256k1 = { version = "0.29.0", default-features = false, features = ["recovery", "alloc"] }
serde = { version = "1.0.118", optional = true }
bitcoin = { version = "0.32.2", default-features = false }
bitcoin = { version = "0.32.2", default-features = false, features = ["secp-recovery"] }
[dev-dependencies]
serde_json = { version = "1"}

View file

@ -17,8 +17,8 @@ use crate::prelude::*;
use lightning_types::payment::PaymentSecret;
use lightning_types::routing::{RoutingFees, RouteHint, RouteHintHop};
use secp256k1::ecdsa::{RecoveryId, RecoverableSignature};
use secp256k1::PublicKey;
use bitcoin::secp256k1::ecdsa::{RecoveryId, RecoverableSignature};
use bitcoin::secp256k1::PublicKey;
use super::{Bolt11Invoice, Sha256, TaggedField, ExpiryTime, MinFinalCltvExpiryDelta, Fallback, PayeePubKey, Bolt11InvoiceSignature, PositiveTimestamp,
Bolt11SemanticError, PrivateRoute, Bolt11ParseError, ParseOrSemanticError, Description, RawTaggedField, Currency, RawHrp, SiPrefix, RawBolt11Invoice,
@ -698,7 +698,7 @@ macro_rules! from_error {
}
}
from_error!(Bolt11ParseError::MalformedSignature, secp256k1::Error);
from_error!(Bolt11ParseError::MalformedSignature, bitcoin::secp256k1::Error);
from_error!(Bolt11ParseError::ParseAmountError, ParseIntError);
from_error!(Bolt11ParseError::DescriptionDecodeError, str::Utf8Error);
@ -726,7 +726,7 @@ impl From<crate::Bolt11SemanticError> for ParseOrSemanticError {
#[cfg(test)]
mod test {
use crate::de::Bolt11ParseError;
use secp256k1::PublicKey;
use bitcoin::secp256k1::PublicKey;
use bech32::u5;
use bitcoin::hashes::sha256;
use std::str::FromStr;
@ -973,7 +973,7 @@ mod test {
#[test]
fn test_payment_secret_and_features_de_and_ser() {
use lightning_types::features::Bolt11InvoiceFeatures;
use secp256k1::ecdsa::{RecoveryId, RecoverableSignature};
use bitcoin::secp256k1::ecdsa::{RecoveryId, RecoverableSignature};
use crate::TaggedField::*;
use crate::{SiPrefix, SignedRawBolt11Invoice, Bolt11InvoiceSignature, RawBolt11Invoice, RawHrp, RawDataPart,
Currency, Sha256, PositiveTimestamp};
@ -1020,7 +1020,7 @@ mod test {
#[test]
fn test_raw_signed_invoice_deserialization() {
use crate::TaggedField::*;
use secp256k1::ecdsa::{RecoveryId, RecoverableSignature};
use bitcoin::secp256k1::ecdsa::{RecoveryId, RecoverableSignature};
use crate::{SignedRawBolt11Invoice, Bolt11InvoiceSignature, RawBolt11Invoice, RawHrp, RawDataPart, Currency, Sha256,
PositiveTimestamp};

View file

@ -27,7 +27,6 @@ compile_error!("at least one of the `std` or `no-std` features must be enabled")
extern crate bech32;
extern crate lightning_types;
extern crate secp256k1;
extern crate alloc;
#[cfg(any(test, feature = "std"))]
extern crate core;
@ -42,9 +41,9 @@ use bitcoin::{Address, Network, PubkeyHash, ScriptHash, WitnessProgram, WitnessV
use bitcoin::hashes::{Hash, sha256};
use lightning_types::features::Bolt11InvoiceFeatures;
use secp256k1::PublicKey;
use secp256k1::{Message, Secp256k1};
use secp256k1::ecdsa::RecoverableSignature;
use bitcoin::secp256k1::PublicKey;
use bitcoin::secp256k1::{Message, Secp256k1};
use bitcoin::secp256k1::ecdsa::RecoverableSignature;
use core::cmp::Ordering;
use core::fmt::{Display, Formatter, self};
@ -84,7 +83,7 @@ use crate::prelude::*;
pub enum Bolt11ParseError {
Bech32Error(bech32::Error),
ParseAmountError(ParseIntError),
MalformedSignature(secp256k1::Error),
MalformedSignature(bitcoin::secp256k1::Error),
BadPrefix,
UnknownCurrency,
UnknownSiPrefix,
@ -141,15 +140,14 @@ pub const DEFAULT_MIN_FINAL_CLTV_EXPIRY_DELTA: u64 = 18;
/// ensures that only a semantically and syntactically correct invoice can be built using it.
///
/// ```
/// extern crate secp256k1;
/// extern crate lightning_invoice;
/// extern crate bitcoin;
///
/// use bitcoin::hashes::Hash;
/// use bitcoin::hashes::sha256;
///
/// use secp256k1::Secp256k1;
/// use secp256k1::SecretKey;
/// use bitcoin::secp256k1::Secp256k1;
/// use bitcoin::secp256k1::SecretKey;
///
/// use lightning_types::payment::PaymentSecret;
///
@ -866,7 +864,7 @@ impl SignedRawBolt11Invoice {
}
/// Recovers the public key used for signing the invoice from the recoverable signature.
pub fn recover_payee_pub_key(&self) -> Result<PayeePubKey, secp256k1::Error> {
pub fn recover_payee_pub_key(&self) -> Result<PayeePubKey, bitcoin::secp256k1::Error> {
let hash = Message::from_digest(self.hash);
Ok(PayeePubKey(Secp256k1::new().recover_ecdsa(
@ -1248,9 +1246,9 @@ impl Bolt11Invoice {
/// Check that the invoice is signed correctly and that key recovery works
pub fn check_signature(&self) -> Result<(), Bolt11SemanticError> {
match self.signed_invoice.recover_payee_pub_key() {
Err(secp256k1::Error::InvalidRecoveryId) =>
Err(bitcoin::secp256k1::Error::InvalidRecoveryId) =>
return Err(Bolt11SemanticError::InvalidRecoveryId),
Err(secp256k1::Error::InvalidSignature) =>
Err(bitcoin::secp256k1::Error::InvalidSignature) =>
return Err(Bolt11SemanticError::InvalidSignature),
Err(e) => panic!("no other error may occur, got {:?}", e),
Ok(_) => {},
@ -1811,9 +1809,9 @@ mod test {
#[test]
fn test_check_signature() {
use crate::TaggedField::*;
use secp256k1::Secp256k1;
use secp256k1::ecdsa::{RecoveryId, RecoverableSignature};
use secp256k1::{SecretKey, PublicKey};
use bitcoin::secp256k1::Secp256k1;
use bitcoin::secp256k1::ecdsa::{RecoveryId, RecoverableSignature};
use bitcoin::secp256k1::{SecretKey, PublicKey};
use crate::{SignedRawBolt11Invoice, Bolt11InvoiceSignature, RawBolt11Invoice, RawHrp, RawDataPart, Currency, Sha256,
PositiveTimestamp};
@ -1881,8 +1879,8 @@ mod test {
fn test_check_feature_bits() {
use crate::TaggedField::*;
use lightning_types::features::Bolt11InvoiceFeatures;
use secp256k1::Secp256k1;
use secp256k1::SecretKey;
use bitcoin::secp256k1::Secp256k1;
use bitcoin::secp256k1::SecretKey;
use crate::{Bolt11Invoice, RawBolt11Invoice, RawHrp, RawDataPart, Currency, Sha256, PositiveTimestamp,
Bolt11SemanticError};
@ -2003,7 +2001,7 @@ mod test {
use crate::*;
use lightning_types::routing::RouteHintHop;
use std::iter::FromIterator;
use secp256k1::PublicKey;
use bitcoin::secp256k1::PublicKey;
let builder = InvoiceBuilder::new(Currency::Bitcoin)
.payment_hash(sha256::Hash::from_slice(&[0;32][..]).unwrap())
@ -2056,8 +2054,8 @@ mod test {
fn test_builder_ok() {
use crate::*;
use lightning_types::routing::RouteHintHop;
use secp256k1::Secp256k1;
use secp256k1::{SecretKey, PublicKey};
use bitcoin::secp256k1::Secp256k1;
use bitcoin::secp256k1::{SecretKey, PublicKey};
use std::time::Duration;
let secp_ctx = Secp256k1::new();
@ -2177,8 +2175,8 @@ mod test {
#[test]
fn test_default_values() {
use crate::*;
use secp256k1::Secp256k1;
use secp256k1::SecretKey;
use bitcoin::secp256k1::Secp256k1;
use bitcoin::secp256k1::SecretKey;
let signed_invoice = InvoiceBuilder::new(Currency::Bitcoin)
.description("Test".into())
@ -2203,8 +2201,8 @@ mod test {
#[test]
fn test_expiration() {
use crate::*;
use secp256k1::Secp256k1;
use secp256k1::SecretKey;
use bitcoin::secp256k1::Secp256k1;
use bitcoin::secp256k1::SecretKey;
let signed_invoice = InvoiceBuilder::new(Currency::Bitcoin)
.description("Test".into())

View file

@ -297,7 +297,7 @@ impl ToBase32 for PayeePubKey {
impl Base32Len for PayeePubKey {
fn base32_len(&self) -> usize {
bytes_size_to_base32_size(secp256k1::constants::PUBLIC_KEY_SIZE)
bytes_size_to_base32_size(bitcoin::secp256k1::constants::PUBLIC_KEY_SIZE)
}
}

View file

@ -1,13 +1,12 @@
extern crate bech32;
extern crate lightning_invoice;
extern crate secp256k1;
use bitcoin::{PubkeyHash, ScriptHash, WitnessVersion};
use bitcoin::hex::FromHex;
use bitcoin::hashes::{sha256, Hash};
use lightning_invoice::*;
use secp256k1::PublicKey;
use secp256k1::ecdsa::{RecoverableSignature, RecoveryId};
use bitcoin::secp256k1::PublicKey;
use bitcoin::secp256k1::ecdsa::{RecoverableSignature, RecoveryId};
use std::collections::HashSet;
use std::time::Duration;
use std::str::FromStr;