(prob) f use new simd impl wrappers
[rust-lightning] / lightning-invoice / src / lib.rs
index 42d0a337e4a842ce17230c5977552fb6fa477dc7..d87c6c89372080b5696fd754f35fb8eeddf1c75d 100644 (file)
@@ -46,7 +46,7 @@ use std::time::SystemTime;
 
 use bech32::u5;
 use bitcoin::{Address, Network, PubkeyHash, ScriptHash};
-use bitcoin::util::address::{Payload, WitnessVersion};
+use bitcoin::address::{Payload, WitnessProgram, WitnessVersion};
 use bitcoin_hashes::{Hash, sha256};
 use lightning::ln::features::Bolt11InvoiceFeatures;
 use lightning::util::invoice::construct_invoice_preimage;
@@ -83,9 +83,9 @@ mod prelude {
        #[cfg(feature = "hashbrown")]
        extern crate hashbrown;
 
-       pub use alloc::{vec, vec::Vec, string::String, collections::VecDeque, boxed::Box};
+       pub use alloc::{vec, vec::Vec, string::String};
        #[cfg(not(feature = "hashbrown"))]
-       pub use std::collections::{HashMap, HashSet, hash_map};
+       pub use std::collections::{HashMap, hash_map};
        #[cfg(feature = "hashbrown")]
        pub use self::hashbrown::{HashMap, HashSet, hash_map};
 
@@ -94,12 +94,6 @@ mod prelude {
 
 use crate::prelude::*;
 
-/// Sync compat for std/no_std
-#[cfg(feature = "std")]
-mod sync {
-       pub use ::std::sync::{Mutex, MutexGuard};
-}
-
 /// Sync compat for std/no_std
 #[cfg(not(feature = "std"))]
 mod sync;
@@ -413,6 +407,10 @@ impl From<Network> for Currency {
                        Network::Testnet => Currency::BitcoinTestnet,
                        Network::Regtest => Currency::Regtest,
                        Network::Signet => Currency::Signet,
+                       _ => {
+                               debug_assert!(false, "Need to handle new rust-bitcoin network type");
+                               Currency::Regtest
+                       },
                }
        }
 }
@@ -1429,10 +1427,13 @@ impl Bolt11Invoice {
 
        /// Returns a list of all fallback addresses as [`Address`]es
        pub fn fallback_addresses(&self) -> Vec<Address> {
-               self.fallbacks().iter().map(|fallback| {
+               self.fallbacks().iter().filter_map(|fallback| {
                        let payload = match fallback {
                                Fallback::SegWitProgram { version, program } => {
-                                       Payload::WitnessProgram { version: *version, program: program.to_vec() }
+                                       match WitnessProgram::new(*version, program.clone()) {
+                                               Ok(witness_program) => Payload::WitnessProgram(witness_program),
+                                               Err(_) => return None,
+                                       }
                                }
                                Fallback::PubKeyHash(pkh) => {
                                        Payload::PubkeyHash(*pkh)
@@ -1442,7 +1443,7 @@ impl Bolt11Invoice {
                                }
                        };
 
-                       Address { payload, network: self.network() }
+                       Some(Address::new(self.network(), payload))
                }).collect()
        }
 
@@ -1755,9 +1756,9 @@ impl<'de> Deserialize<'de> for Bolt11Invoice {
 
 #[cfg(test)]
 mod test {
-       use bitcoin::Script;
-       use bitcoin_hashes::hex::FromHex;
+       use bitcoin::ScriptBuf;
        use bitcoin_hashes::sha256;
+       use std::str::FromStr;
 
        #[test]
        fn test_system_time_bounds_assumptions() {
@@ -1781,7 +1782,7 @@ mod test {
                        data: RawDataPart {
                                timestamp: PositiveTimestamp::from_unix_timestamp(1496314658).unwrap(),
                                tagged_fields: vec![
-                                       PaymentHash(crate::Sha256(sha256::Hash::from_hex(
+                                       PaymentHash(crate::Sha256(sha256::Hash::from_str(
                                                "0001020304050607080900010203040506070809000102030405060708090102"
                                        ).unwrap())).into(),
                                        Description(crate::Description::new(
@@ -1819,7 +1820,7 @@ mod test {
                                data: RawDataPart {
                                        timestamp: PositiveTimestamp::from_unix_timestamp(1496314658).unwrap(),
                                        tagged_fields: vec ! [
-                                               PaymentHash(Sha256(sha256::Hash::from_hex(
+                                               PaymentHash(Sha256(sha256::Hash::from_str(
                                                        "0001020304050607080900010203040506070809000102030405060708090102"
                                                ).unwrap())).into(),
                                                Description(
@@ -1875,7 +1876,7 @@ mod test {
                use lightning::ln::features::Bolt11InvoiceFeatures;
                use secp256k1::Secp256k1;
                use secp256k1::SecretKey;
-               use crate::{Bolt11Invoice, RawBolt11Invoice, RawHrp, RawDataPart, Currency, Sha256, PositiveTimestamp, 
+               use crate::{Bolt11Invoice, RawBolt11Invoice, RawHrp, RawDataPart, Currency, Sha256, PositiveTimestamp,
                         Bolt11SemanticError};
 
                let private_key = SecretKey::from_slice(&[42; 32]).unwrap();
@@ -1889,7 +1890,7 @@ mod test {
                        data: RawDataPart {
                                timestamp: PositiveTimestamp::from_unix_timestamp(1496314658).unwrap(),
                                tagged_fields: vec ! [
-                                       PaymentHash(Sha256(sha256::Hash::from_hex(
+                                       PaymentHash(Sha256(sha256::Hash::from_str(
                                                "0001020304050607080900010203040506070809000102030405060708090102"
                                        ).unwrap())).into(),
                                        Description(
@@ -2146,7 +2147,7 @@ mod test {
                assert_eq!(invoice.expiry_time(), Duration::from_secs(54321));
                assert_eq!(invoice.min_final_cltv_expiry_delta(), 144);
                assert_eq!(invoice.fallbacks(), vec![&Fallback::PubKeyHash(PubkeyHash::from_slice(&[0;20]).unwrap())]);
-               let address = Address::from_script(&Script::new_p2pkh(&PubkeyHash::from_slice(&[0;20]).unwrap()), Network::Testnet).unwrap();
+               let address = Address::from_script(&ScriptBuf::new_p2pkh(&PubkeyHash::from_slice(&[0;20]).unwrap()), Network::Testnet).unwrap();
                assert_eq!(invoice.fallback_addresses(), vec![address]);
                assert_eq!(invoice.private_routes(), vec![&PrivateRoute(route_1), &PrivateRoute(route_2)]);
                assert_eq!(