diff --git a/Cargo.lock b/Cargo.lock index 938b75244..619f32a83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -144,12 +144,6 @@ version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "arrayvec" version = "0.7.6" @@ -198,29 +192,13 @@ dependencies = [ "winnow", ] -[[package]] -name = "asn1-rs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" -dependencies = [ - "asn1-rs-derive 0.5.1", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror 1.0.69", - "time", -] - [[package]] name = "asn1-rs" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" dependencies = [ - "asn1-rs-derive 0.6.0", + "asn1-rs-derive", "asn1-rs-impl", "displaydoc", "nom", @@ -230,18 +208,6 @@ dependencies = [ "time", ] -[[package]] -name = "asn1-rs-derive" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" -dependencies = [ - "proc-macro2", - "quote 1.0.40", - "syn 2.0.105", - "synstructure", -] - [[package]] name = "asn1-rs-derive" version = "0.6.0" @@ -334,7 +300,7 @@ dependencies = [ "futures-util", "js-sys", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls", "tokio-socks", "tokio-tungstenite 0.26.2", "url", @@ -447,12 +413,6 @@ dependencies = [ "bitcoin_hashes 0.14.0", ] -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -584,15 +544,14 @@ checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitreq" version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08221cf31c5f00fb6fc8fa697cea54176b06801a518bd9d3482aa27099827a3a" +source = "git+https://github.com/breez/corepc?branch=yse-bitreq-rustls#d052f8f0efd05459dd4ae157a2d68d2044ac824c" dependencies = [ - "rustls 0.21.12", + "rustls", "rustls-webpki 0.101.7", "serde", "serde_json", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "webpki-roots 0.25.4", ] @@ -642,7 +601,7 @@ dependencies = [ "hyperlocal", "log", "pin-project-lite", - "rustls 0.23.31", + "rustls", "rustls-native-certs", "rustls-pemfile", "rustls-pki-types", @@ -720,13 +679,12 @@ dependencies = [ "platform-utils", "prost", "rand 0.8.5", - "regex", + "regex-lite", "reqwest", "serde", "serde_json", "spark", "spark-wallet", - "strum", "thiserror 2.0.14", "tokio", "tonic", @@ -785,7 +743,6 @@ dependencies = [ "breez-sdk-spark", "built", "chrono", - "ecies", "flashnet", "frost-secp256k1-tr-unofficial", "hex", @@ -794,7 +751,6 @@ dependencies = [ "macros", "nostr", "nostr-sdk", - "openssl", "platform-utils", "rcgen", "rusqlite", @@ -810,9 +766,10 @@ dependencies = [ "tracing", "tracing-subscriber", "uniffi", + "utils", "uuid", "wasm-bindgen-test", - "x509-parser 0.16.0", + "x509-cert", ] [[package]] @@ -1199,31 +1156,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - [[package]] name = "crunchy" version = "0.2.4" @@ -1273,7 +1205,7 @@ dependencies = [ "ring", "strum", "strum_macros", - "x509-parser 0.17.0", + "x509-parser", ] [[package]] @@ -1379,27 +1311,13 @@ dependencies = [ "zeroize", ] -[[package]] -name = "der-parser" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" -dependencies = [ - "asn1-rs 0.6.2", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - [[package]] name = "der-parser" version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" dependencies = [ - "asn1-rs 0.7.1", + "asn1-rs", "displaydoc", "nom", "num-bigint", @@ -1439,15 +1357,6 @@ dependencies = [ "syn 2.0.105", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - [[package]] name = "digest" version = "0.10.7" @@ -1547,31 +1456,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest 0.10.7", + "digest", "elliptic-curve", "rfc6979", "signature", "spki", ] -[[package]] -name = "ecies" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "011318cc6f4f1906c1dae015013fd381e92deac290a29ddcd9f2e0dd14786037" -dependencies = [ - "aes-gcm", - "getrandom 0.2.16", - "hkdf", - "libsecp256k1", - "once_cell", - "parking_lot", - "rand_core 0.6.4", - "sha2", - "typenum", - "wasm-bindgen", -] - [[package]] name = "either" version = "1.15.0" @@ -1586,7 +1477,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "digest", "ff", "generic-array", "group", @@ -1624,26 +1515,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" -[[package]] -name = "enum_to_enum" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a98f748df7c1570c9c6bfbd3b422adeee429fd778538c66b79cccbb051b0d02" -dependencies = [ - "enum_to_enum_derive", -] - -[[package]] -name = "enum_to_enum_derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51953530e29a0e9abfb23af10748b0328cabf3d0d0e1ffd34b61144c0e0440b1" -dependencies = [ - "proc-macro2", - "quote 1.0.40", - "syn 1.0.109", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -1657,7 +1528,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.60.2", ] [[package]] @@ -1709,7 +1580,7 @@ checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ "cfg-if", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1750,16 +1621,16 @@ checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" name = "flashnet" version = "0.1.0" dependencies = [ + "base64 0.22.1", "bitcoin", "getrandom 0.2.16", "hex", - "jwt", "macros", "platform-utils", "rand 0.8.5", "serde", "serde_json", - "serde_qs", + "serde_urlencoded", "serde_with", "spark", "spark-wallet", @@ -1775,21 +1646,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.1" @@ -2333,7 +2189,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -2482,10 +2338,10 @@ dependencies = [ "http 1.3.1", "hyper 1.6.0", "hyper-util", - "rustls 0.23.31", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls", "tower-service", ] @@ -2520,7 +2376,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.0", "system-configuration", "tokio", "tower-service", @@ -2792,21 +2648,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jwt" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6204285f77fe7d9784db3fdc449ecce1a0114927a51d5a41c4c7a292011c015f" -dependencies = [ - "base64 0.13.1", - "crypto-common", - "digest 0.10.7", - "hmac", - "serde", - "serde_json", - "sha2", -] - [[package]] name = "k256" version = "0.13.4" @@ -2862,51 +2703,6 @@ dependencies = [ "redox_syscall 0.5.17", ] -[[package]] -name = "libsecp256k1" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" -dependencies = [ - "arrayref", - "base64 0.22.1", - "digest 0.9.0", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.5", - "serde", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - [[package]] name = "libsqlite3-sys" version = "0.30.1" @@ -3063,7 +2859,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] @@ -3409,22 +3205,13 @@ dependencies = [ "memchr", ] -[[package]] -name = "oid-registry" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" -dependencies = [ - "asn1-rs 0.6.2", -] - [[package]] name = "oid-registry" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" dependencies = [ - "asn1-rs 0.7.1", + "asn1-rs", ] [[package]] @@ -3432,10 +3219,6 @@ name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] [[package]] name = "once_cell_polyfill" @@ -3449,60 +3232,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" -[[package]] -name = "openssl" -version = "0.10.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote 1.0.40", - "syn 2.0.105", -] - [[package]] name = "openssl-probe" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" -[[package]] -name = "openssl-src" -version = "300.5.2+3.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d270b79e2926f5150189d475bc7e9d2c69f9c4697b185fa917d5a32b792d21b4" -dependencies = [ - "cc", -] - -[[package]] -name = "openssl-sys" -version = "0.9.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" -dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", -] - [[package]] name = "option-ext" version = "0.2.0" @@ -3589,7 +3324,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest 0.10.7", + "digest", "hmac", ] @@ -3732,12 +3467,6 @@ dependencies = [ "universal-hash", ] -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - [[package]] name = "possiblyrandom" version = "0.2.0" @@ -3901,7 +3630,7 @@ version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "itertools", "log", "multimap", @@ -4061,26 +3790,6 @@ dependencies = [ "getrandom 0.3.3", ] -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "rcgen" version = "0.14.5" @@ -4184,6 +3893,12 @@ dependencies = [ "regex-syntax 0.8.5", ] +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + [[package]] name = "regex-syntax" version = "0.6.29" @@ -4406,31 +4121,20 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "ring", - "rustls-webpki 0.101.7", - "sct", + "windows-sys 0.60.2", ] [[package]] name = "rustls" -version = "0.23.31" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.10", "subtle", "zeroize", ] @@ -4477,9 +4181,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" dependencies = [ "ring", "rustls-pki-types", @@ -4627,16 +4331,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sec1" version = "0.7.3" @@ -4769,19 +4463,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_qs" -version = "1.0.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cb0b9062a400c31442e67d1f2b1e7746bebd691110ebee1b7d0c7293b04fab1" -dependencies = [ - "itoa", - "percent-encoding", - "ryu", - "serde", - "thiserror 2.0.14", -] - [[package]] name = "serde_repr" version = "0.1.20" @@ -4855,7 +4536,7 @@ checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -4866,7 +4547,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -4883,7 +4564,7 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -4926,7 +4607,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", + "digest", "rand_core 0.6.4", ] @@ -4990,8 +4671,6 @@ dependencies = [ "built", "bytes", "chrono", - "ecies", - "enum_to_enum", "frost-core-unofficial", "frost-secp256k1-tr-unofficial", "futures", @@ -5007,7 +4686,7 @@ dependencies = [ "prost", "prost-types", "rand 0.8.5", - "rustls 0.23.31", + "rustls", "serde", "serde_json", "serde_with", @@ -5019,6 +4698,7 @@ dependencies = [ "tower-service", "tracing", "unicode-normalization", + "utils", "uuid", "wasm-bindgen-test", ] @@ -5086,7 +4766,7 @@ dependencies = [ "macros", "platform-utils", "rcgen", - "rustls 0.23.31", + "rustls", "serde", "serde_json", "spark-postgres", @@ -5217,9 +4897,6 @@ name = "strum" version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros", -] [[package]] name = "strum_macros" @@ -5336,7 +5013,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5639,30 +5316,20 @@ checksum = "27d684bad428a0f2481f42241f821db42c54e2dc81d8c00db8536c506b0a0144" dependencies = [ "const-oid", "ring", - "rustls 0.23.31", + "rustls", "tokio", "tokio-postgres", - "tokio-rustls 0.26.2", + "tokio-rustls", "x509-cert", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.31", + "rustls", "tokio", ] @@ -5737,10 +5404,10 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.31", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls", "tungstenite 0.26.2", "webpki-roots 0.26.11", ] @@ -5833,7 +5500,7 @@ dependencies = [ "rustls-pemfile", "socket2 0.5.10", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls", "tokio-stream", "tower 0.4.13", "tower-layer", @@ -6069,7 +5736,7 @@ dependencies = [ "httparse", "log", "rand 0.9.2", - "rustls 0.23.31", + "rustls", "rustls-pki-types", "sha1", "thiserror 2.0.14", @@ -6317,6 +5984,20 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "utils" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "getrandom 0.2.16", + "hex", + "hkdf", + "rand 0.8.5", + "secp256k1", + "sha2", + "thiserror 2.0.14", +] + [[package]] name = "uuid" version = "1.18.0" @@ -6621,7 +6302,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6958,35 +6639,18 @@ dependencies = [ "tls_codec", ] -[[package]] -name = "x509-parser" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" -dependencies = [ - "asn1-rs 0.6.2", - "data-encoding", - "der-parser 9.0.0", - "lazy_static", - "nom", - "oid-registry 0.7.1", - "rusticata-macros", - "thiserror 1.0.69", - "time", -] - [[package]] name = "x509-parser" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" dependencies = [ - "asn1-rs 0.7.1", + "asn1-rs", "data-encoding", - "der-parser 10.0.0", + "der-parser", "lazy_static", "nom", - "oid-registry 0.8.1", + "oid-registry", "rusticata-macros", "thiserror 2.0.14", "time", @@ -7024,7 +6688,6 @@ dependencies = [ "anyhow", "cargo_metadata 0.18.1", "clap", - "rayon", "serde_json", "xshell", ] diff --git a/Cargo.toml b/Cargo.toml index d9910b63c..8cd272795 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ members = [ "crates/macros", "crates/macro_test", "crates/platform-utils", + "crates/utils", "crates/spark", "crates/spark-itest", "crates/spark-postgres", @@ -54,7 +55,8 @@ bech32 = "0.11.0" bip39 = "2.2.0" bitcoin = { version = "0.32.6", features = ["serde"] } bitflags = "2.10.0" -bitreq = { version = "0.3.4" } +# bitreq = { version = "0.3.4" } +bitreq = { git = "https://github.com/breez/corepc", branch = "yse-bitreq-rustls" } breez-sdk-common = { path = "crates/breez-sdk/common", default-features = false } breez-sdk-spark = { path = "crates/breez-sdk/core" } built = { version = "0.8.0", features = ["git2"] } @@ -64,8 +66,9 @@ cbc = "0.1.2" chrono = { version = "0.4.37", features = ["serde"] } clap = "4.5.40" dirs = "6.0.0" -ecies = { version = "0.2.7", default-features = false, features = ["pure"] } -enum_to_enum = "0.1.0" +aes-gcm = "0.10" +hkdf = "0.12" +sha2 = "0.10" figment = "0.10.19" flashnet = { path = "crates/flashnet", default-features = false } # frost-core = "2.1.0" @@ -81,30 +84,30 @@ http = "1.3.1" http-body = "1.0.1" http-body-util = "0.1.3" js-sys = "0.3.77" -k256 = { version = "0.13.0", features = ["arithmetic", "schnorr", "ecdsa"] } +k256 = { version = "0.13.0", features = ["arithmetic"] } lightning = "0.1.3" lightning-invoice = "0.33.1" lnurl-models = { path = "crates/breez-sdk/lnurl-models" } macros = { path = "crates/macros" } nostr = { version = "0.43.1", default-features = false, features = ["std"] } nostr-sdk = { version = "0.43.0", default-features = false } -openssl = { version = "0.10.70", default-features = false, features = ["vendored"] } platform-utils = { path = "crates/platform-utils" } +utils = { path = "crates/utils" } proc-macro2 = "1.0.97" prost = "0.13.4" prost-types = "0.13.4" quote = "1.0.40" rand = "0.8" -rayon = "1.10" rcgen = "0.14.5" -regex = "1.11.2" +secp256k1 = { version = "0.29", features = ["rand"] } +regex-lite = "0.1.6" reqwest = { version = "0.12.23", default-features = false, features = ["json", "http2", "charset", "system-proxy"] } rstest = "0.26.1" rstest_reuse = "0.7.0" # We want to match the rusqlite version used by ldk-node and the rest of the ecosystem rusqlite = { version = "0.32.1", features = ["backup", "bundled"] } rusqlite_migration = { version = "1.3.1" } -rustls = { version = "0.23.28", default-features = false, features = ["ring"] } +rustls = { version = "0.23.37", default-features = false, features = ["ring"] } rustyline = "16.0.0" serde = "1.0.219" serde_json = "1.0.140" @@ -114,8 +117,6 @@ shlex = "1.3.0" spark = { path = "crates/spark", default-features = false } spark-postgres = { path = "crates/spark-postgres" } spark-wallet = { path = "crates/spark-wallet", default-features = false } -strum = "0.27.1" -strum_macros = "0.27.1" syn = "2.0.105" test-log = { version = "0.2.18", default-features = false } testcontainers = "0.24.0" diff --git a/Makefile b/Makefile index d157c2657..59d604543 100644 --- a/Makefile +++ b/Makefile @@ -70,4 +70,7 @@ claude-check: make fmt-check clippy-check cargo-test open-core-rustdocs: - cd crates/breez-sdk/core && cargo doc --no-deps --open \ No newline at end of file + cd crates/breez-sdk/core && cargo doc --no-deps --open + +update-lockfiles: + ./scripts/update-lock-files.sh diff --git a/crates/breez-sdk/common/Cargo.toml b/crates/breez-sdk/common/Cargo.toml index 708ae0fba..f0e723f3c 100644 --- a/crates/breez-sdk/common/Cargo.toml +++ b/crates/breez-sdk/common/Cargo.toml @@ -29,10 +29,9 @@ lightning.workspace = true macros.workspace = true platform-utils.workspace = true prost.workspace = true -regex.workspace = true +regex-lite.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true -strum = { workspace = true, features = ["derive"] } thiserror.workspace = true tokio.workspace = true tracing.workspace = true diff --git a/crates/breez-sdk/common/src/input/error.rs b/crates/breez-sdk/common/src/input/error.rs index dfd91cf1f..ad63b616f 100644 --- a/crates/breez-sdk/common/src/input/error.rs +++ b/crates/breez-sdk/common/src/input/error.rs @@ -66,8 +66,8 @@ impl From for ParseError { } } -impl From for ParseError { - fn from(value: regex::Error) -> Self { +impl From for ParseError { + fn from(value: regex_lite::Error) -> Self { Self::InvalidExternalInputParser(format!("Couldn't parse regex: {value}")) } } diff --git a/crates/breez-sdk/common/src/input/parser/mod.rs b/crates/breez-sdk/common/src/input/parser/mod.rs index dfe2b67ac..222da371f 100644 --- a/crates/breez-sdk/common/src/input/parser/mod.rs +++ b/crates/breez-sdk/common/src/input/parser/mod.rs @@ -3,7 +3,7 @@ use std::ops::Not; use bitcoin::{Address, Denomination, address::NetworkUnchecked}; use lightning::bolt11_invoice::Bolt11InvoiceDescriptionRef; use platform_utils::time::UNIX_EPOCH; -use regex::Regex; +use regex_lite::Regex; use spark_wallet::{SparkAddress, SparkAddressPaymentType}; use tracing::{debug, error, warn}; diff --git a/crates/breez-sdk/common/src/network.rs b/crates/breez-sdk/common/src/network.rs index 813d70e9a..ffa7ea115 100644 --- a/crates/breez-sdk/common/src/network.rs +++ b/crates/breez-sdk/common/src/network.rs @@ -1,8 +1,9 @@ +use std::fmt; + use serde::{Deserialize, Serialize}; use spark::Network; -use strum::Display; -#[derive(Clone, Copy, Debug, Display, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)] pub enum BitcoinNetwork { /// Mainnet Bitcoin, @@ -12,6 +13,18 @@ pub enum BitcoinNetwork { Regtest, } +impl fmt::Display for BitcoinNetwork { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Bitcoin => write!(f, "Bitcoin"), + Self::Testnet3 => write!(f, "Testnet3"), + Self::Testnet4 => write!(f, "Testnet4"), + Self::Signet => write!(f, "Signet"), + Self::Regtest => write!(f, "Regtest"), + } + } +} + impl From for BitcoinNetwork { fn from(network: bitcoin::Network) -> Self { match network { diff --git a/crates/breez-sdk/core/Cargo.toml b/crates/breez-sdk/core/Cargo.toml index 5d6f5c3fc..0393fd1c8 100644 --- a/crates/breez-sdk/core/Cargo.toml +++ b/crates/breez-sdk/core/Cargo.toml @@ -5,8 +5,7 @@ version.workspace = true [features] browser-tests = ["passkey"] # Enable browser wasm-pack tests -uniffi = ["dep:uniffi", "openssl-vendored"] -openssl-vendored = ["openssl"] +uniffi = ["dep:uniffi"] test-utils = ["spark-wallet/test-utils"] # Passkey functionality passkey = ["dep:nostr", "dep:nostr-sdk"] @@ -31,14 +30,13 @@ bitflags.workspace = true breez-sdk-common.workspace = true platform-utils.workspace = true chrono.workspace = true -ecies.workspace = true +utils.workspace = true flashnet.workspace = true hex.workspace = true lnurl-models.workspace = true macros.workspace = true nostr = { workspace = true, optional = true } nostr-sdk = { workspace = true, optional = true } -openssl = { workspace = true, optional = true } serde = { workspace = true, features = ["derive"] } serde_json.workspace = true spark-postgres = { workspace = true, optional = true } @@ -48,7 +46,7 @@ tracing.workspace = true tracing-subscriber = { workspace = true, features = ["env-filter"] } uuid.workspace = true uniffi = { workspace = true, optional = true } -x509-parser = { version = "0.16.0" } +x509-cert = { version = "0.2", default-features = false } anyhow.workspace = true frost-secp256k1-tr = { workspace = true } k256 = { workspace = true, features = ["arithmetic"] } diff --git a/crates/breez-sdk/core/src/sdk/helpers.rs b/crates/breez-sdk/core/src/sdk/helpers.rs index 76d958875..62316ed6e 100644 --- a/crates/breez-sdk/core/src/sdk/helpers.rs +++ b/crates/breez-sdk/core/src/sdk/helpers.rs @@ -8,7 +8,8 @@ use spark_wallet::SparkWallet; use std::{str::FromStr, sync::Arc}; use tokio::sync::mpsc; use tracing::{debug, error, info}; -use x509_parser::parse_x509_certificate; +use x509_cert::Certificate; +use x509_cert::der::{Decode, asn1::ObjectIdentifier}; use crate::{ PaymentDetails, WaitForPaymentIdentifier, @@ -167,6 +168,9 @@ pub(crate) fn process_success_action( Ok(Some(SuccessActionProcessed::Aes { result })) } +// OID 2.5.4.3 = commonName +const OID_COMMON_NAME: ObjectIdentifier = ObjectIdentifier::new_unwrap("2.5.4.3"); + pub(crate) fn validate_breez_api_key(api_key: &str) -> Result<(), SdkError> { let api_key_decoded = base64::engine::general_purpose::STANDARD .decode(api_key.as_bytes()) @@ -175,15 +179,18 @@ pub(crate) fn validate_breez_api_key(api_key: &str) -> Result<(), SdkError> { "Could not base64 decode the Breez API key: {err:?}" )) })?; - let (_rem, cert) = parse_x509_certificate(&api_key_decoded).map_err(|err| { + let cert = Certificate::from_der(&api_key_decoded).map_err(|err| { SdkError::Generic(format!("Invalid certificate for Breez API key: {err:?}")) })?; let issuer = cert - .issuer() - .iter_common_name() - .next() - .and_then(|cn| cn.as_str().ok()); + .tbs_certificate + .issuer + .0 + .iter() + .flat_map(|rdn| rdn.0.iter()) + .find(|atv| atv.oid == OID_COMMON_NAME) + .and_then(|atv| str::from_utf8(atv.value.value()).ok()); match issuer { Some(common_name) => { if !common_name.starts_with("Breez") { diff --git a/crates/breez-sdk/core/src/signer/breez.rs b/crates/breez-sdk/core/src/signer/breez.rs index 8a1c35cd6..f7b589bad 100644 --- a/crates/breez-sdk/core/src/signer/breez.rs +++ b/crates/breez-sdk/core/src/signer/breez.rs @@ -95,7 +95,7 @@ impl BreezSigner for BreezSignerImpl { .derive_priv(&self.secp, path) .map_err(|e| SdkError::Generic(e.to_string()))?; let rc_pub = derived.private_key.public_key(&self.secp).serialize(); - ecies::encrypt(&rc_pub, message) + utils::ecies::encrypt(&rc_pub, message) .map_err(|err| SdkError::Generic(format!("Could not encrypt data: {err}"))) } @@ -110,7 +110,7 @@ impl BreezSigner for BreezSignerImpl { .derive_priv(&self.secp, path) .map_err(|e| SdkError::Generic(e.to_string()))?; let rc_prv = derived.private_key.secret_bytes(); - ecies::decrypt(&rc_prv, message) + utils::ecies::decrypt(&rc_prv, message) .map_err(|err| SdkError::Generic(format!("Could not decrypt data: {err}"))) } diff --git a/crates/breez-sdk/lnurl/Cargo.lock b/crates/breez-sdk/lnurl/Cargo.lock index f5450ccdb..3d8899666 100644 --- a/crates/breez-sdk/lnurl/Cargo.lock +++ b/crates/breez-sdk/lnurl/Cargo.lock @@ -132,12 +132,6 @@ version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "arrayvec" version = "0.7.6" @@ -239,7 +233,7 @@ dependencies = [ "futures-util", "js-sys", "tokio", - "tokio-rustls 0.26.3", + "tokio-rustls", "tokio-socks", "tokio-tungstenite", "url", @@ -569,15 +563,14 @@ dependencies = [ [[package]] name = "bitreq" version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08221cf31c5f00fb6fc8fa697cea54176b06801a518bd9d3482aa27099827a3a" +source = "git+https://github.com/breez/corepc?branch=yse-bitreq-rustls#d052f8f0efd05459dd4ae157a2d68d2044ac824c" dependencies = [ - "rustls 0.21.12", + "rustls", "rustls-webpki 0.101.7", "serde", "serde_json", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "webpki-roots 0.25.4", ] @@ -865,12 +858,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - [[package]] name = "crypto-bigint" version = "0.5.5" @@ -996,15 +983,6 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - [[package]] name = "digest" version = "0.10.7" @@ -1056,31 +1034,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest 0.10.7", + "digest", "elliptic-curve", "rfc6979", "signature", "spki", ] -[[package]] -name = "ecies" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd378cd438dcec2698ce6fd6cdbb323c671552d8be5af853690dc8320bc676d" -dependencies = [ - "aes-gcm", - "getrandom 0.2.16", - "hkdf", - "libsecp256k1", - "lock_api", - "once_cell", - "rand_core 0.6.4", - "sha2", - "typenum", - "wasm-bindgen", -] - [[package]] name = "either" version = "1.15.0" @@ -1098,7 +1058,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "digest", "ff", "generic-array", "group", @@ -1130,26 +1090,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum_to_enum" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a98f748df7c1570c9c6bfbd3b422adeee429fd778538c66b79cccbb051b0d02" -dependencies = [ - "enum_to_enum_derive", -] - -[[package]] -name = "enum_to_enum_derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51953530e29a0e9abfb23af10748b0328cabf3d0d0e1ffd34b61144c0e0440b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -1253,21 +1193,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1700,7 +1625,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -1790,10 +1715,10 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.31", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.3", + "tokio-rustls", "tower-service", ] @@ -2150,51 +2075,6 @@ dependencies = [ "redox_syscall", ] -[[package]] -name = "libsecp256k1" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" -dependencies = [ - "arrayref", - "base64", - "digest 0.9.0", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.5", - "serde", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - [[package]] name = "libsqlite3-sys" version = "0.30.1" @@ -2356,7 +2236,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] @@ -2403,23 +2283,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework 2.11.1", - "security-framework-sys", - "tempfile", -] - [[package]] name = "negentropy" version = "0.5.0" @@ -2596,10 +2459,6 @@ name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] [[package]] name = "once_cell_polyfill" @@ -2613,50 +2472,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" -[[package]] -name = "openssl" -version = "0.10.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "openssl-probe" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" -[[package]] -name = "openssl-sys" -version = "0.9.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "parking" version = "2.2.1" @@ -2703,7 +2524,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest 0.10.7", + "digest", "hmac", ] @@ -2855,12 +2676,6 @@ dependencies = [ "universal-hash", ] -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - [[package]] name = "postcard" version = "1.1.3" @@ -3181,7 +2996,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" dependencies = [ "const-oid", - "digest 0.10.7", + "digest", "num-bigint-dig", "num-integer", "num-traits", @@ -3233,20 +3048,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.23.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "log", "once_cell", @@ -3266,7 +3070,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.4.0", + "security-framework", ] [[package]] @@ -3380,16 +3184,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sec1" version = "0.7.3" @@ -3425,19 +3219,6 @@ dependencies = [ "cc", ] -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - [[package]] name = "security-framework" version = "3.4.0" @@ -3592,7 +3373,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -3609,7 +3390,7 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -3642,7 +3423,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", + "digest", "rand_core 0.6.4", ] @@ -3691,8 +3472,6 @@ dependencies = [ "built", "bytes", "chrono", - "ecies", - "enum_to_enum", "frost-core-unofficial", "frost-secp256k1-tr-unofficial", "futures", @@ -3708,7 +3487,7 @@ dependencies = [ "prost", "prost-types", "rand 0.8.5", - "rustls 0.23.31", + "rustls", "serde", "serde_json", "serde_with", @@ -3720,6 +3499,7 @@ dependencies = [ "tower-service", "tracing", "unicode-normalization", + "utils", "uuid", ] @@ -3794,9 +3574,9 @@ dependencies = [ "indexmap 2.11.4", "log", "memchr", - "native-tls", "once_cell", "percent-encoding", + "rustls", "serde", "serde_json", "sha2", @@ -3806,6 +3586,7 @@ dependencies = [ "tokio-stream", "tracing", "url", + "webpki-roots 0.26.11", ] [[package]] @@ -3858,7 +3639,7 @@ dependencies = [ "byteorder", "bytes", "crc", - "digest 0.10.7", + "digest", "dotenvy", "either", "futures-channel", @@ -4209,23 +3990,13 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" dependencies = [ - "rustls 0.23.31", + "rustls", "tokio", ] @@ -4260,10 +4031,10 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.31", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.3", + "tokio-rustls", "tungstenite", "webpki-roots 0.26.11", ] @@ -4371,7 +4142,7 @@ dependencies = [ "rustls-pemfile", "socket2 0.5.10", "tokio", - "tokio-rustls 0.26.3", + "tokio-rustls", "tokio-stream", "tower 0.4.13", "tower-layer", @@ -4565,7 +4336,7 @@ dependencies = [ "httparse", "log", "rand 0.9.2", - "rustls 0.23.31", + "rustls", "rustls-pki-types", "sha1", "thiserror 2.0.16", @@ -4660,6 +4431,19 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "utils" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "getrandom 0.2.16", + "hkdf", + "rand 0.8.5", + "secp256k1", + "sha2", + "thiserror 2.0.16", +] + [[package]] name = "uuid" version = "1.18.1" diff --git a/crates/breez-sdk/lnurl/Cargo.toml b/crates/breez-sdk/lnurl/Cargo.toml index 9831a1abc..518f0857c 100644 --- a/crates/breez-sdk/lnurl/Cargo.toml +++ b/crates/breez-sdk/lnurl/Cargo.toml @@ -26,7 +26,7 @@ serde_json = "1.0.140" serde_with = "3.13.0" spark = { path = "../../spark" } spark-wallet = { path = "../../spark-wallet" } -sqlx = { version = "0.8.6", features = ["postgres", "runtime-tokio", "sqlite", "tls-native-tls"] } +sqlx = { version = "0.8.6", features = ["postgres", "runtime-tokio", "sqlite", "tls-rustls"] } thiserror = "2.0.12" tokio = { version = "1.45.1", features = ["rt-multi-thread", "macros", "signal"] } tonic = "0.12.3" diff --git a/crates/flashnet/Cargo.toml b/crates/flashnet/Cargo.toml index 33935dd19..4a127ee84 100644 --- a/crates/flashnet/Cargo.toml +++ b/crates/flashnet/Cargo.toml @@ -13,15 +13,15 @@ default = [] browser-tests = [] [dependencies] +base64.workspace = true bitcoin.workspace = true hex.workspace = true -jwt = "0.16.0" macros.workspace = true platform-utils.workspace = true rand.workspace = true serde = { workspace = true, features = ["derive"] } serde_json.workspace = true -serde_qs = "1.0.0-rc.3" +serde_urlencoded = "0.7" serde_with.workspace = true spark.workspace = true spark-wallet.workspace = true diff --git a/crates/flashnet/src/auth.rs b/crates/flashnet/src/auth.rs index 0c05ac51a..f873ec034 100644 --- a/crates/flashnet/src/auth.rs +++ b/crates/flashnet/src/auth.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use std::time::Duration; -use jwt::{Claims, Header, Token}; +use base64::Engine; use platform_utils::time::{SystemTime, UNIX_EPOCH}; use tracing::{debug, trace}; @@ -69,11 +69,18 @@ impl FlashnetClient { let verify_response = self.auth_verify(verify_request).await?; trace!("Received verify from flashnet",); - let token: Token = - Token::parse_unverified(&verify_response.access_token).map_err(|e| { - FlashnetError::Generic(format!("Failed to parse access token: {e:?}")) - })?; - let ttl_ms = match token.claims().registered.expiration { + let exp = verify_response + .access_token + .split('.') + .nth(1) + .and_then(|payload| { + base64::engine::general_purpose::URL_SAFE_NO_PAD + .decode(payload) + .ok() + }) + .and_then(|bytes| serde_json::from_slice::(&bytes).ok()) + .and_then(|json| json.get("exp").and_then(serde_json::Value::as_u64)); + let ttl_ms = match exp { Some(exp) => { let expires = Duration::from_secs(exp); let now = SystemTime::now().duration_since(UNIX_EPOCH).map_err(|_| { @@ -138,9 +145,7 @@ impl FlashnetClient { { let query_string = match query { Some(q) => { - let qs_config = - serde_qs::Config::new().array_format(serde_qs::ArrayFormat::Unindexed); - let qs = qs_config.serialize_string(&q).map_err(|e| { + let qs = serde_urlencoded::to_string(&q).map_err(|e| { FlashnetError::Generic(format!("Failed to serialize query parameters: {e}")) })?; format!("?{qs}") diff --git a/crates/spark/Cargo.toml b/crates/spark/Cargo.toml index 0bbe38a08..f008bffe6 100644 --- a/crates/spark/Cargo.toml +++ b/crates/spark/Cargo.toml @@ -14,8 +14,7 @@ base64.workspace = true bitcoin = { workspace = true, features = ["rand"] } bytes.workspace = true chrono = { workspace = true, features = ["serde"] } -ecies.workspace = true -enum_to_enum.workspace = true +utils.workspace = true frost-core.workspace = true frost-secp256k1-tr.workspace = true futures.workspace = true diff --git a/crates/spark/src/services/lightning.rs b/crates/spark/src/services/lightning.rs index aeb117c10..d7cfe1fda 100644 --- a/crates/spark/src/services/lightning.rs +++ b/crates/spark/src/services/lightning.rs @@ -387,7 +387,7 @@ impl LightningService { // Encrypt using ECIES with the operator's identity public key let public_key_bytes = operator.identity_public_key.serialize_uncompressed(); - let encrypted = ecies::encrypt(&public_key_bytes, &proto_bytes) + let encrypted = utils::ecies::encrypt(&public_key_bytes, &proto_bytes) .map_err(|e| ServiceError::Generic(format!("ECIES encryption failed: {e}")))?; let operator_identifier = hex::encode(operator.identifier.serialize()); diff --git a/crates/spark/src/services/transfer.rs b/crates/spark/src/services/transfer.rs index a372425bd..2ce569bb8 100644 --- a/crates/spark/src/services/transfer.rs +++ b/crates/spark/src/services/transfer.rs @@ -620,7 +620,7 @@ impl TransferService { let public_key_bytes = public_key.serialize_uncompressed(); // Use ECIES to encrypt the data - ecies::encrypt(&public_key_bytes, data) + utils::ecies::encrypt(&public_key_bytes, data) .map_err(|e| ServiceError::Generic(format!("ECIES encryption failed: {e}"))) } diff --git a/crates/spark/src/signer/default_signer.rs b/crates/spark/src/signer/default_signer.rs index e1475fe89..7043cea9f 100644 --- a/crates/spark/src/signer/default_signer.rs +++ b/crates/spark/src/signer/default_signer.rs @@ -337,12 +337,12 @@ impl DefaultSigner { message: &[u8], receiver_public_key: &PublicKey, ) -> Result, SignerError> { - ecies::encrypt(&receiver_public_key.serialize(), message) + utils::ecies::encrypt(&receiver_public_key.serialize(), message) .map_err(|e| SignerError::Generic(format!("failed to encrypt: {e}"))) } fn decrypt_message_ecies(&self, ciphertext: &[u8]) -> Result, SignerError> { - ecies::decrypt(&self.key_set.identity_key_pair.secret_bytes(), ciphertext) + utils::ecies::decrypt(&self.key_set.identity_key_pair.secret_bytes(), ciphertext) .map_err(|e| SignerError::Generic(format!("failed to decrypt: {e}"))) } @@ -972,7 +972,7 @@ pub(crate) mod tests { assert!(!result.is_empty()); // Verify receiver can decrypt it - let decrypted = ecies::decrypt(&receiver_private_key.secret_bytes(), &result) + let decrypted = utils::ecies::decrypt(&receiver_private_key.secret_bytes(), &result) .expect("Failed to decrypt with receiver key"); let decrypted_key = SecretKey::from_slice(&decrypted).expect("Failed to parse decrypted key"); diff --git a/crates/spark/src/ssp/graphql/models.rs b/crates/spark/src/ssp/graphql/models.rs index 250b58b85..41145d21b 100644 --- a/crates/spark/src/ssp/graphql/models.rs +++ b/crates/spark/src/ssp/graphql/models.rs @@ -71,7 +71,6 @@ use crate::ssp::graphql::queries::user_request::{ }; use bitcoin::secp256k1::PublicKey; use chrono::{DateTime, Utc}; -use enum_to_enum::FromEnum; use serde::{Deserialize, Serialize}; pub use crate::ssp::graphql::queries::claim_static_deposit::ClaimStaticDepositInput; @@ -371,14 +370,7 @@ pub struct UserRequest { pub on: TransferFragmentUserRequestOn, } -#[derive(FromEnum, Debug, Clone, Copy, Deserialize, Serialize, PartialEq)] -#[from_enum(RequestCoopExitUserRequestFragmentOn)] -#[from_enum(RequestSwapUserRequestFragmentOn)] -#[from_enum(RequestLightningReceiveUserRequestFragmentOn)] -#[from_enum(RequestLightningSendUserRequestFragmentOn)] -#[from_enum(UserRequestTransferFragmentUserRequestOn)] -#[from_enum(CompleteCoopExitUserRequestFragmentOn)] -#[from_enum(TransfersTransferFragmentUserRequestOn)] +#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq)] pub enum TransferFragmentUserRequestOn { ClaimStaticDeposit, CoopExitRequest, @@ -387,6 +379,30 @@ pub enum TransferFragmentUserRequestOn { LightningSendRequest, } +macro_rules! impl_from_user_request_on { + ($source:ty) => { + impl From<$source> for TransferFragmentUserRequestOn { + fn from(src: $source) -> Self { + match src { + <$source>::ClaimStaticDeposit => Self::ClaimStaticDeposit, + <$source>::CoopExitRequest => Self::CoopExitRequest, + <$source>::LeavesSwapRequest => Self::LeavesSwapRequest, + <$source>::LightningReceiveRequest => Self::LightningReceiveRequest, + <$source>::LightningSendRequest => Self::LightningSendRequest, + } + } + } + }; +} + +impl_from_user_request_on!(RequestCoopExitUserRequestFragmentOn); +impl_from_user_request_on!(RequestSwapUserRequestFragmentOn); +impl_from_user_request_on!(RequestLightningReceiveUserRequestFragmentOn); +impl_from_user_request_on!(RequestLightningSendUserRequestFragmentOn); +impl_from_user_request_on!(UserRequestTransferFragmentUserRequestOn); +impl_from_user_request_on!(CompleteCoopExitUserRequestFragmentOn); +impl_from_user_request_on!(TransfersTransferFragmentUserRequestOn); + //#[macros::derive_from(TransferTransferFragment)] #[macros::derive_from(FullTransferFragment)] #[derive(Debug, Clone, Deserialize, Serialize)] @@ -396,8 +412,7 @@ pub struct SspTransfer { pub user_request: Option, } -#[derive(FromEnum, Debug, Clone, Deserialize, Serialize, PartialEq)] -#[from_enum(TransferUserRequestFragment)] +#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] pub enum SspUserRequest { ClaimStaticDeposit(ClaimStaticDepositInfo), CoopExitRequest(CoopExitRequest), @@ -406,6 +421,28 @@ pub enum SspUserRequest { LightningSendRequest(LightningSendRequest), } +impl From for SspUserRequest { + fn from(src: TransferUserRequestFragment) -> Self { + match src { + TransferUserRequestFragment::ClaimStaticDeposit(inner) => { + Self::ClaimStaticDeposit(inner.into()) + } + TransferUserRequestFragment::CoopExitRequest(inner) => { + Self::CoopExitRequest(inner.into()) + } + TransferUserRequestFragment::LeavesSwapRequest(inner) => { + Self::LeavesSwapRequest(inner.into()) + } + TransferUserRequestFragment::LightningReceiveRequest(inner) => { + Self::LightningReceiveRequest(inner.into()) + } + TransferUserRequestFragment::LightningSendRequest(inner) => { + Self::LightningSendRequest(inner.into()) + } + } + } +} + impl SspUserRequest { pub fn get_lightning_invoice(&self) -> Option { let invoice = match self { diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml new file mode 100644 index 000000000..21010156a --- /dev/null +++ b/crates/utils/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "utils" +edition = "2024" +version.workspace = true + +[lints] +workspace = true + +[dev-dependencies] +hex.workspace = true + +[dependencies] +aes-gcm.workspace = true +hkdf.workspace = true +rand.workspace = true +secp256k1.workspace = true +sha2.workspace = true +thiserror.workspace = true + +# Wasm dependencies +[target.'cfg(all(target_family = "wasm", target_os = "unknown"))'.dependencies] +getrandom = { version = "0.2", features = ["js"] } diff --git a/crates/utils/src/ecies.rs b/crates/utils/src/ecies.rs new file mode 100644 index 000000000..9ccb4911c --- /dev/null +++ b/crates/utils/src/ecies.rs @@ -0,0 +1,207 @@ +/// Inline ECIES implementation compatible with the `ecies` 0.2.x crate (pure / aes-rust feature, +/// default configuration: uncompressed ephemeral key, uncompressed HKDF points, 16-byte nonce). +/// +/// Wire format: +/// `ephemeral_pk` (65 B, uncompressed) || nonce (16 B) || GCM-tag (16 B) || ciphertext +/// +/// KDF: HKDF-SHA256, IKM = `sender_pk_uncompressed` (65 B) || `ecdh_point_uncompressed` (65 B), +/// salt = none, info = empty → 32-byte AES-256 key. +use aes_gcm::{ + AesGcm, Key, KeyInit, + aead::{AeadInPlace, consts::U16, generic_array::GenericArray}, + aes::Aes256, +}; +use hkdf::Hkdf; +use rand::{RngCore, rngs::OsRng}; +use secp256k1::{PublicKey, Secp256k1, SecretKey, ecdh::shared_secret_point}; +use sha2::Sha256; +use thiserror::Error; + +/// AES-256-GCM with 16-byte nonce (matches ecies default, distinct from the standard 12-byte one). +type Cipher = AesGcm; +type Nonce = GenericArray; + +const UNCOMPRESSED_PK_SIZE: usize = 65; +const NONCE_SIZE: usize = 16; +const TAG_SIZE: usize = 16; +const OVERHEAD: usize = UNCOMPRESSED_PK_SIZE + NONCE_SIZE + TAG_SIZE; + +#[derive(Debug, Error)] +pub enum Error { + #[error("invalid public key")] + InvalidPublicKey, + #[error("invalid message")] + InvalidMessage, + #[error("HKDF key derivation failed")] + KdfFailed, +} + +/// Encrypt `msg` for `receiver_pub_bytes` (compressed 33 B or uncompressed 65 B SEC1 pubkey). +pub fn encrypt(receiver_pub_bytes: &[u8], msg: &[u8]) -> Result, Error> { + let secp = Secp256k1::new(); + let receiver_pubkey = + PublicKey::from_slice(receiver_pub_bytes).map_err(|_| Error::InvalidPublicKey)?; + + let ephemeral_seckey = SecretKey::new(&mut OsRng); + let ephemeral_pubkey = PublicKey::from_secret_key(&secp, &ephemeral_seckey); + + let sym_key = derive_sym_key(&ephemeral_pubkey, &ephemeral_seckey, &receiver_pubkey)?; + + let mut nonce_bytes = [0u8; NONCE_SIZE]; + OsRng.fill_bytes(&mut nonce_bytes); + + let cipher = Cipher::new(Key::::from_slice(&sym_key)); + let mut ciphertext = msg.to_vec(); + let tag = cipher + .encrypt_in_place_detached(Nonce::from_slice(&nonce_bytes), b"", &mut ciphertext) + .map_err(|_| Error::InvalidMessage)?; + + let mut out = Vec::with_capacity(OVERHEAD.saturating_add(msg.len())); + out.extend_from_slice(&ephemeral_pubkey.serialize_uncompressed()); + out.extend_from_slice(&nonce_bytes); + out.extend_from_slice(tag.as_slice()); + out.extend_from_slice(&ciphertext); + + Ok(out) +} + +/// Decrypt `msg` using the 32-byte raw secret key `receiver_sec_bytes`. +pub fn decrypt(receiver_sec_bytes: &[u8], msg: &[u8]) -> Result, Error> { + if msg.len() < OVERHEAD { + return Err(Error::InvalidMessage); + } + + let receiver_sk = + SecretKey::from_slice(receiver_sec_bytes).map_err(|_| Error::InvalidMessage)?; + let ephemeral_pk = + PublicKey::from_slice(&msg[..UNCOMPRESSED_PK_SIZE]).map_err(|_| Error::InvalidPublicKey)?; + + let sym_key = derive_sym_key(&ephemeral_pk, &receiver_sk, &ephemeral_pk)?; + + let nonce = Nonce::from_slice(&msg[UNCOMPRESSED_PK_SIZE..UNCOMPRESSED_PK_SIZE + NONCE_SIZE]); + let tag = + GenericArray::::from_slice(&msg[UNCOMPRESSED_PK_SIZE + NONCE_SIZE..OVERHEAD]); + let mut plaintext = msg[OVERHEAD..].to_vec(); + + let cipher = Cipher::new(Key::::from_slice(&sym_key)); + cipher + .decrypt_in_place_detached(nonce, b"", &mut plaintext, tag) + .map_err(|_| Error::InvalidMessage)?; + + Ok(plaintext) +} + +/// ECDH + HKDF-SHA256 key derivation. +/// +/// `shared_secret_point` returns the raw (x, y) coordinates of the Diffie-Hellman point as +/// `[u8; 64]`. We prepend `0x04` to form the standard 65-byte uncompressed SEC1 encoding before +/// feeding it into the KDF, matching the wire format produced by the `ecies` 0.2.x crate. +/// +/// - `sender_pk`: the ephemeral public key (always) +/// - `scalar_sk`: the private key performing the ECDH multiply +/// - `ecdh_pk`: the public key being multiplied (receiver pk on encrypt, ephemeral pk on decrypt) +fn derive_sym_key( + sender_pk: &PublicKey, + scalar_sk: &SecretKey, + ecdh_pk: &PublicKey, +) -> Result<[u8; 32], Error> { + // Returns raw x || y (64 bytes) with no hashing — identity callback inside the C library. + let xy = shared_secret_point(ecdh_pk, scalar_sk); + + let sender_bytes = sender_pk.serialize_uncompressed(); // 65 B: 0x04 || x || y + + let mut ikm = [0u8; 130]; // 65 + 65 + ikm[..65].copy_from_slice(&sender_bytes); + ikm[65] = 0x04; // uncompressed point prefix for the shared point + ikm[66..].copy_from_slice(&xy); + + let h = Hkdf::::new(None, &ikm); + let mut out = [0u8; 32]; + h.expand(&[], &mut out).map_err(|_| Error::KdfFailed)?; + Ok(out) +} + +#[cfg(test)] +mod tests { + use secp256k1::{Secp256k1, SecretKey}; + + use super::*; + + /// Round-trip: anything encrypted with a pubkey decrypts with the matching privkey. + #[test] + fn test_round_trip() { + let secp = Secp256k1::new(); + let sk = SecretKey::new(&mut OsRng); + let pk = PublicKey::from_secret_key(&secp, &sk); + + let msg = b"hello world"; + let ct = encrypt(&pk.serialize_uncompressed(), msg).unwrap(); + let pt = decrypt(&sk.secret_bytes(), &ct).unwrap(); + + assert_eq!(pt, msg); + } + + /// Both compressed (33 B) and uncompressed (65 B) receiver pubkey encodings are accepted. + #[test] + fn test_compressed_and_uncompressed_pubkey() { + let secp = Secp256k1::new(); + let sk = SecretKey::new(&mut OsRng); + let pk = PublicKey::from_secret_key(&secp, &sk); + let sk_bytes = sk.secret_bytes(); + + let msg = b"key encoding test"; + + let ct_uncompressed = encrypt(&pk.serialize_uncompressed(), msg).unwrap(); + assert_eq!(decrypt(&sk_bytes, &ct_uncompressed).unwrap(), msg); + + let ct_compressed = encrypt(&pk.serialize(), msg).unwrap(); + assert_eq!(decrypt(&sk_bytes, &ct_compressed).unwrap(), msg); + } + + /// Known-vector from the ecies 0.2.x crate test suite (secp256k1, pure/aes-rust feature, + /// default config: uncompressed ephemeral key, 16-byte nonce, no short-nonce, no xchacha20). + /// Source: + #[test] + fn test_known_vector_compatibility() { + let sk_hex = "e520872701d9ec44dbac2eab85512ad14ad0c42e01de56d7b528abd8524fcb47"; + let ct_hex = concat!( + "047be1885aeb48d4d4db0c992996725d3264784fef88c5b60782f8d0f940c21", + "3227fc3f904f846d5ec3d0fba6653754501e8ebadc421aa3892a20fef33cff0", + "206047058a4cfb4efbeae96b2d019b4ab2edce33328748a0d008a69c8f5816b", + "72d45bd9b5a41bb6ea0127ab23057ec6fcd" + ); + + let sk = hex::decode(sk_hex).unwrap(); + let ct = hex::decode(ct_hex).unwrap(); + + let plaintext = decrypt(&sk, &ct).unwrap(); + assert_eq!(plaintext, "hello world🌍".as_bytes()); + } + + /// Decryption with the wrong private key must fail (GCM tag rejects it). + #[test] + fn test_wrong_key_fails() { + let secp = Secp256k1::new(); + let sk = SecretKey::new(&mut OsRng); + let pk = PublicKey::from_secret_key(&secp, &sk); + let other_sk = SecretKey::new(&mut OsRng); + + let ct = encrypt(&pk.serialize_uncompressed(), b"secret").unwrap(); + let result = decrypt(&other_sk.secret_bytes(), &ct); + + assert!(matches!(result, Err(Error::InvalidMessage))); + } + + /// Ciphertexts shorter than OVERHEAD bytes must be rejected immediately. + #[test] + fn test_truncated_ciphertext_fails() { + assert!(matches!( + decrypt(&[1u8; 32], &[]), + Err(Error::InvalidMessage) + )); + assert!(matches!( + decrypt(&[1u8; 32], &[0u8; OVERHEAD - 1]), + Err(Error::InvalidMessage) + )); + } +} diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs new file mode 100644 index 000000000..16b09b02c --- /dev/null +++ b/crates/utils/src/lib.rs @@ -0,0 +1 @@ +pub mod ecies; diff --git a/crates/xtask/Cargo.toml b/crates/xtask/Cargo.toml index bfc674a93..5dfd5c3fa 100644 --- a/crates/xtask/Cargo.toml +++ b/crates/xtask/Cargo.toml @@ -8,6 +8,5 @@ publish = false anyhow.workspace = true cargo_metadata.workspace = true clap = { workspace = true, features = ["derive"] } -rayon.workspace = true serde_json.workspace = true xshell.workspace = true diff --git a/docs/breez-sdk/snippets/rust/Cargo.lock b/docs/breez-sdk/snippets/rust/Cargo.lock index 16d4ae998..b752c8ac5 100644 --- a/docs/breez-sdk/snippets/rust/Cargo.lock +++ b/docs/breez-sdk/snippets/rust/Cargo.lock @@ -73,57 +73,12 @@ version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "asn1-rs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" -dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror 1.0.69", - "time", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", - "synstructure", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "async-stream" version = "0.3.6" @@ -180,7 +135,7 @@ dependencies = [ "futures-util", "js-sys", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-socks", "tokio-tungstenite", "url", @@ -278,12 +233,6 @@ dependencies = [ "bitcoin_hashes", ] -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.22.1" @@ -376,15 +325,14 @@ checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitreq" version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08221cf31c5f00fb6fc8fa697cea54176b06801a518bd9d3482aa27099827a3a" +source = "git+https://github.com/breez/corepc?branch=yse-bitreq-rustls#d052f8f0efd05459dd4ae157a2d68d2044ac824c" dependencies = [ - "rustls 0.21.12", + "rustls", "rustls-webpki 0.101.7", "serde", "serde_json", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "webpki-roots 0.25.4", ] @@ -413,7 +361,7 @@ dependencies = [ "aes", "anyhow", "async-trait", - "base64 0.22.1", + "base64", "bech32", "bitcoin", "bitreq", @@ -425,13 +373,12 @@ dependencies = [ "macros", "platform-utils", "prost", - "regex", + "regex-lite", "reqwest", "serde", "serde_json", "spark", "spark-wallet", - "strum", "thiserror 2.0.17", "tokio", "tonic", @@ -446,16 +393,13 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "base64 0.22.1", + "base64", "bip39", "bitcoin", "bitflags", "breez-sdk-common", "built", "chrono", - "deadpool", - "deadpool-postgres", - "ecies", "flashnet", "frost-secp256k1-tr-unofficial", "hex", @@ -467,19 +411,17 @@ dependencies = [ "platform-utils", "rusqlite", "rusqlite_migration", - "rustls 0.23.36", "serde", "serde_json", + "spark-postgres", "spark-wallet", "thiserror 2.0.17", "tokio", - "tokio-postgres", - "tokio-postgres-rustls", "tracing", "tracing-subscriber", + "utils", "uuid", - "webpki-roots 1.0.5", - "x509-parser", + "x509-cert", ] [[package]] @@ -670,12 +612,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - [[package]] name = "crypto-bigint" version = "0.5.5" @@ -802,20 +738,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "der-parser" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" -dependencies = [ - "asn1-rs", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - [[package]] name = "der_derive" version = "0.7.3" @@ -848,15 +770,6 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - [[package]] name = "digest" version = "0.10.7" @@ -912,31 +825,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest 0.10.7", + "digest", "elliptic-curve", "rfc6979", "signature", "spki", ] -[[package]] -name = "ecies" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd378cd438dcec2698ce6fd6cdbb323c671552d8be5af853690dc8320bc676d" -dependencies = [ - "aes-gcm", - "getrandom 0.2.16", - "hkdf", - "libsecp256k1", - "lock_api", - "once_cell", - "rand_core 0.6.4", - "sha2", - "typenum", - "wasm-bindgen", -] - [[package]] name = "either" version = "1.15.0" @@ -951,7 +846,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "digest", "ff", "generic-array", "group", @@ -983,26 +878,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum_to_enum" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a98f748df7c1570c9c6bfbd3b422adeee429fd778538c66b79cccbb051b0d02" -dependencies = [ - "enum_to_enum_derive", -] - -[[package]] -name = "enum_to_enum_derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51953530e29a0e9abfb23af10748b0328cabf3d0d0e1ffd34b61144c0e0440b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -1075,16 +950,16 @@ checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" name = "flashnet" version = "0.1.0" dependencies = [ + "base64", "bitcoin", "getrandom 0.2.16", "hex", - "jwt", "macros", "platform-utils", "rand 0.8.5", "serde", "serde_json", - "serde_qs", + "serde_urlencoded", "serde_with", "spark", "spark-wallet", @@ -1507,7 +1382,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -1587,10 +1462,10 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.36", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower-service", ] @@ -1613,7 +1488,7 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-core", @@ -1861,21 +1736,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jwt" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6204285f77fe7d9784db3fdc449ecce1a0114927a51d5a41c4c7a292011c015f" -dependencies = [ - "base64 0.13.1", - "crypto-common", - "digest 0.10.7", - "hmac", - "serde", - "serde_json", - "sha2", -] - [[package]] name = "k256" version = "0.13.4" @@ -1930,51 +1790,6 @@ dependencies = [ "libc", ] -[[package]] -name = "libsecp256k1" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" -dependencies = [ - "arrayref", - "base64 0.22.1", - "digest 0.9.0", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.5", - "serde", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - [[package]] name = "libsqlite3-sys" version = "0.30.1" @@ -2112,7 +1927,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] @@ -2127,12 +1942,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "mio" version = "1.1.1" @@ -2156,23 +1965,13 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0efe882e02d206d8d279c20eb40e03baf7cb5136a1476dc084a324fbc3ec42d" -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nostr" version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62a97d745f1bd8d5e05a978632bbb87b0614567d5142906fe7c86fb2440faac6" dependencies = [ - "base64 0.22.1", + "base64", "bech32", "bip39", "bitcoin_hashes", @@ -2239,31 +2038,12 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -2283,24 +2063,11 @@ dependencies = [ "libc", ] -[[package]] -name = "oid-registry" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" -dependencies = [ - "asn1-rs", -] - [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] [[package]] name = "opaque-debug" @@ -2354,7 +2121,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest 0.10.7", + "digest", "hmac", ] @@ -2446,7 +2213,7 @@ name = "platform-utils" version = "0.1.0" dependencies = [ "async-trait", - "base64 0.22.1", + "base64", "bitreq", "macros", "reqwest", @@ -2482,12 +2249,6 @@ dependencies = [ "universal-hash", ] -[[package]] -name = "portable-atomic" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" - [[package]] name = "possiblyrandom" version = "0.2.0" @@ -2516,7 +2277,7 @@ version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ee9dd5fe15055d2b6806f4736aa0c9637217074e224bbec46d4041b91bb9491" dependencies = [ - "base64 0.22.1", + "base64", "byteorder", "bytes", "fallible-iterator 0.2.0", @@ -2763,6 +2524,12 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + [[package]] name = "regex-syntax" version = "0.8.8" @@ -2775,7 +2542,7 @@ version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-core", @@ -2862,15 +2629,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom", -] - [[package]] name = "rustix" version = "1.1.3" @@ -2886,20 +2644,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.23.36" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "log", "once_cell", @@ -3033,16 +2780,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sec1" version = "0.7.3" @@ -3150,19 +2887,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_qs" -version = "1.0.0-rc.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18c21dc864770a74dc4d61d6454bf3b5eb7bc7014d0cead189aa909472a70c9c" -dependencies = [ - "itoa", - "percent-encoding", - "ryu", - "serde", - "thiserror 2.0.17", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3181,7 +2905,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" dependencies = [ - "base64 0.22.1", + "base64", "chrono", "hex", "indexmap 1.9.3", @@ -3224,7 +2948,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -3241,7 +2965,7 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -3278,7 +3002,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", + "digest", "rand_core 0.6.4", ] @@ -3325,13 +3049,11 @@ name = "spark" version = "0.1.0" dependencies = [ "async-trait", - "base64 0.22.1", + "base64", "bitcoin", "built", "bytes", "chrono", - "ecies", - "enum_to_enum", "frost-core-unofficial", "frost-secp256k1-tr-unofficial", "futures", @@ -3347,7 +3069,7 @@ dependencies = [ "prost", "prost-types", "rand 0.8.5", - "rustls 0.23.36", + "rustls", "serde", "serde_json", "serde_with", @@ -3359,9 +3081,33 @@ dependencies = [ "tower-service", "tracing", "unicode-normalization", + "utils", "uuid", ] +[[package]] +name = "spark-postgres" +version = "0.1.0" +dependencies = [ + "async-trait", + "chrono", + "deadpool", + "deadpool-postgres", + "macros", + "platform-utils", + "rustls", + "serde", + "serde_json", + "spark-wallet", + "thiserror 2.0.17", + "tokio", + "tokio-postgres", + "tokio-postgres-rustls", + "tracing", + "uuid", + "webpki-roots 1.0.5", +] + [[package]] name = "spark-wallet" version = "0.1.0" @@ -3422,27 +3168,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "subtle" version = "2.6.1" @@ -3731,30 +3456,20 @@ checksum = "27d684bad428a0f2481f42241f821db42c54e2dc81d8c00db8536c506b0a0144" dependencies = [ "const-oid", "ring", - "rustls 0.23.36", + "rustls", "tokio", "tokio-postgres", - "tokio-rustls 0.26.4", + "tokio-rustls", "x509-cert", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.36", + "rustls", "tokio", ] @@ -3789,10 +3504,10 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.36", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tungstenite", "webpki-roots 0.26.11", ] @@ -3843,7 +3558,7 @@ dependencies = [ "async-stream", "async-trait", "axum", - "base64 0.22.1", + "base64", "bytes", "h2", "http", @@ -3859,7 +3574,7 @@ dependencies = [ "rustls-pemfile", "socket2 0.5.10", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-stream", "tower 0.4.13", "tower-layer", @@ -3888,7 +3603,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8957be1a1c7aa12d4c9d67882060dd57aed816bbc553fa60949312e839f4a8ea" dependencies = [ - "base64 0.22.1", + "base64", "byteorder", "bytes", "futures-util", @@ -4051,7 +3766,7 @@ dependencies = [ "httparse", "log", "rand 0.9.2", - "rustls 0.23.36", + "rustls", "rustls-pki-types", "sha1", "thiserror 2.0.17", @@ -4132,6 +3847,19 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utils" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "getrandom 0.2.16", + "hkdf", + "rand 0.8.5", + "secp256k1", + "sha2", + "thiserror 2.0.17", +] + [[package]] name = "uuid" version = "1.19.0" @@ -4592,23 +4320,6 @@ dependencies = [ "tls_codec", ] -[[package]] -name = "x509-parser" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" -dependencies = [ - "asn1-rs", - "data-encoding", - "der-parser", - "lazy_static", - "nom", - "oid-registry", - "rusticata-macros", - "thiserror 1.0.69", - "time", -] - [[package]] name = "yoke" version = "0.8.1" diff --git a/packages/flutter/rust/Cargo.lock b/packages/flutter/rust/Cargo.lock index 81d601897..37229e6a1 100644 --- a/packages/flutter/rust/Cargo.lock +++ b/packages/flutter/rust/Cargo.lock @@ -116,57 +116,12 @@ version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "asn1-rs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" -dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror 1.0.69", - "time", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", - "synstructure", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "async-stream" version = "0.3.6" @@ -223,7 +178,7 @@ dependencies = [ "futures-util", "js-sys", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-socks", "tokio-tungstenite", "url", @@ -342,12 +297,6 @@ dependencies = [ "bitcoin_hashes", ] -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.22.1" @@ -440,15 +389,14 @@ checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitreq" version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08221cf31c5f00fb6fc8fa697cea54176b06801a518bd9d3482aa27099827a3a" +source = "git+https://github.com/breez/corepc?branch=yse-bitreq-rustls#d052f8f0efd05459dd4ae157a2d68d2044ac824c" dependencies = [ - "rustls 0.21.12", + "rustls", "rustls-webpki 0.101.7", "serde", "serde_json", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "webpki-roots 0.25.4", ] @@ -477,7 +425,7 @@ dependencies = [ "aes", "anyhow", "async-trait", - "base64 0.22.1", + "base64", "bech32", "bitcoin", "bitreq", @@ -489,13 +437,12 @@ dependencies = [ "macros", "platform-utils", "prost", - "regex", + "regex-lite", "reqwest", "serde", "serde_json", "spark", "spark-wallet", - "strum", "thiserror 2.0.17", "tokio", "tonic", @@ -510,14 +457,13 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "base64 0.22.1", + "base64", "bip39", "bitcoin", "bitflags", "breez-sdk-common", "built", "chrono", - "ecies", "flashnet", "frost-secp256k1-tr-unofficial", "hex", @@ -526,7 +472,6 @@ dependencies = [ "macros", "nostr", "nostr-sdk", - "openssl", "platform-utils", "rusqlite", "rusqlite_migration", @@ -537,8 +482,9 @@ dependencies = [ "tokio", "tracing", "tracing-subscriber", + "utils", "uuid", - "x509-parser", + "x509-cert", ] [[package]] @@ -750,12 +696,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - [[package]] name = "crypto-bigint" version = "0.5.5" @@ -875,21 +815,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", + "der_derive", + "flagset", "zeroize", ] [[package]] -name = "der-parser" -version = "9.0.0" +name = "der_derive" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ - "asn1-rs", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", + "proc-macro2", + "quote", + "syn 2.0.114", ] [[package]] @@ -913,15 +852,6 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - [[package]] name = "digest" version = "0.10.7" @@ -977,31 +907,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest 0.10.7", + "digest", "elliptic-curve", "rfc6979", "signature", "spki", ] -[[package]] -name = "ecies" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd378cd438dcec2698ce6fd6cdbb323c671552d8be5af853690dc8320bc676d" -dependencies = [ - "aes-gcm", - "getrandom 0.2.16", - "hkdf", - "libsecp256k1", - "lock_api", - "once_cell", - "rand_core 0.6.4", - "sha2", - "typenum", - "wasm-bindgen", -] - [[package]] name = "either" version = "1.15.0" @@ -1016,7 +928,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", + "digest", "ff", "generic-array", "group", @@ -1048,26 +960,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum_to_enum" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a98f748df7c1570c9c6bfbd3b422adeee429fd778538c66b79cccbb051b0d02" -dependencies = [ - "enum_to_enum_derive", -] - -[[package]] -name = "enum_to_enum_derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51953530e29a0e9abfb23af10748b0328cabf3d0d0e1ffd34b61144c0e0440b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "env_filter" version = "0.1.4" @@ -1145,20 +1037,26 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +[[package]] +name = "flagset" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" + [[package]] name = "flashnet" version = "0.1.0" dependencies = [ + "base64", "bitcoin", "getrandom 0.2.16", "hex", - "jwt", "macros", "platform-utils", "rand 0.8.5", "serde", "serde_json", - "serde_qs", + "serde_urlencoded", "serde_with", "spark", "spark-wallet", @@ -1215,21 +1113,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1656,7 +1539,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", + "digest", ] [[package]] @@ -1736,10 +1619,10 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls 0.23.36", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower-service", ] @@ -1762,7 +1645,7 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-core", @@ -2010,21 +1893,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jwt" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6204285f77fe7d9784db3fdc449ecce1a0114927a51d5a41c4c7a292011c015f" -dependencies = [ - "base64 0.13.1", - "crypto-common", - "digest 0.10.7", - "hmac", - "serde", - "serde_json", - "sha2", -] - [[package]] name = "k256" version = "0.13.4" @@ -2069,51 +1937,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" -[[package]] -name = "libsecp256k1" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" -dependencies = [ - "arrayref", - "base64 0.22.1", - "digest 0.9.0", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.5", - "serde", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - [[package]] name = "libsqlite3-sys" version = "0.30.1" @@ -2251,7 +2074,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] @@ -2266,12 +2089,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -2304,23 +2121,13 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0efe882e02d206d8d279c20eb40e03baf7cb5136a1476dc084a324fbc3ec42d" -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nostr" version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62a97d745f1bd8d5e05a978632bbb87b0614567d5142906fe7c86fb2440faac6" dependencies = [ - "base64 0.22.1", + "base64", "bech32", "bip39", "bitcoin_hashes", @@ -2387,31 +2194,12 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -2440,24 +2228,11 @@ dependencies = [ "memchr", ] -[[package]] -name = "oid-registry" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" -dependencies = [ - "asn1-rs", -] - [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] [[package]] name = "opaque-debug" @@ -2465,60 +2240,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" -[[package]] -name = "openssl" -version = "0.10.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "openssl-probe" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" -[[package]] -name = "openssl-src" -version = "300.5.4+3.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507b3792995dae9b0df8a1c1e3771e8418b7c2d9f0baeba32e6fe8b06c7cb72" -dependencies = [ - "cc", -] - -[[package]] -name = "openssl-sys" -version = "0.9.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" -dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", -] - [[package]] name = "oslog" version = "0.2.0" @@ -2560,7 +2287,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ - "digest 0.10.7", + "digest", "hmac", ] @@ -2633,7 +2360,7 @@ name = "platform-utils" version = "0.1.0" dependencies = [ "async-trait", - "base64 0.22.1", + "base64", "bitreq", "macros", "reqwest", @@ -2918,6 +2645,12 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + [[package]] name = "regex-syntax" version = "0.8.8" @@ -2930,7 +2663,7 @@ version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-core", @@ -3023,15 +2756,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom", -] - [[package]] name = "rustix" version = "1.1.3" @@ -3047,20 +2771,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.23.36" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "log", "once_cell", @@ -3194,16 +2907,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sec1" version = "0.7.3" @@ -3311,19 +3014,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_qs" -version = "1.0.0-rc.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18c21dc864770a74dc4d61d6454bf3b5eb7bc7014d0cead189aa909472a70c9c" -dependencies = [ - "itoa", - "percent-encoding", - "ryu", - "serde", - "thiserror 2.0.17", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3342,7 +3032,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" dependencies = [ - "base64 0.22.1", + "base64", "chrono", "hex", "indexmap 1.9.3", @@ -3385,7 +3075,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -3402,7 +3092,7 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -3426,7 +3116,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest 0.10.7", + "digest", "rand_core 0.6.4", ] @@ -3467,13 +3157,11 @@ name = "spark" version = "0.1.0" dependencies = [ "async-trait", - "base64 0.22.1", + "base64", "bitcoin", "built", "bytes", "chrono", - "ecies", - "enum_to_enum", "frost-core-unofficial", "frost-secp256k1-tr-unofficial", "futures", @@ -3489,7 +3177,7 @@ dependencies = [ "prost", "prost-types", "rand 0.8.5", - "rustls 0.23.36", + "rustls", "serde", "serde_json", "serde_with", @@ -3501,6 +3189,7 @@ dependencies = [ "tower-service", "tracing", "unicode-normalization", + "utils", "uuid", ] @@ -3553,27 +3242,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "subtle" version = "2.6.1" @@ -3816,23 +3484,13 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.36", + "rustls", "tokio", ] @@ -3867,10 +3525,10 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.36", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tungstenite", "webpki-roots 0.26.11", ] @@ -3921,7 +3579,7 @@ dependencies = [ "async-stream", "async-trait", "axum", - "base64 0.22.1", + "base64", "bytes", "h2", "http", @@ -3937,7 +3595,7 @@ dependencies = [ "rustls-pemfile", "socket2 0.5.10", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-stream", "tower 0.4.13", "tower-layer", @@ -3966,7 +3624,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8957be1a1c7aa12d4c9d67882060dd57aed816bbc553fa60949312e839f4a8ea" dependencies = [ - "base64 0.22.1", + "base64", "byteorder", "bytes", "futures-util", @@ -4129,7 +3787,7 @@ dependencies = [ "httparse", "log", "rand 0.9.2", - "rustls 0.23.36", + "rustls", "rustls-pki-types", "sha1", "thiserror 2.0.17", @@ -4198,6 +3856,19 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utils" +version = "0.1.0" +dependencies = [ + "aes-gcm", + "getrandom 0.2.16", + "hkdf", + "rand 0.8.5", + "secp256k1", + "sha2", + "thiserror 2.0.17", +] + [[package]] name = "uuid" version = "1.19.0" @@ -4618,20 +4289,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] -name = "x509-parser" -version = "0.16.0" +name = "x509-cert" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +checksum = "1301e935010a701ae5f8655edc0ad17c44bad3ac5ce8c39185f75453b720ae94" dependencies = [ - "asn1-rs", - "data-encoding", - "der-parser", - "lazy_static", - "nom", - "oid-registry", - "rusticata-macros", - "thiserror 1.0.69", - "time", + "const-oid", + "der", + "spki", ] [[package]] diff --git a/packages/flutter/rust/Cargo.toml b/packages/flutter/rust/Cargo.toml index 2c3ea596f..89d808a9c 100644 --- a/packages/flutter/rust/Cargo.toml +++ b/packages/flutter/rust/Cargo.toml @@ -12,7 +12,6 @@ crate-type = ["cdylib", "staticlib"] async-trait = "0.1.88" # Replaced with release commit during publishing breez-sdk-spark = { path = "../../../crates/breez-sdk/core", features = [ - "openssl-vendored", "passkey", ] } extend = "1.2.0" diff --git a/scripts/update-lock-files.sh b/scripts/update-lock-files.sh new file mode 100755 index 000000000..2c63a9bd8 --- /dev/null +++ b/scripts/update-lock-files.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# +# Re-adapted from https://github.com/rust-bitcoin/corepc/blob/master/contrib/update-lock-files.sh +# Update lockfiles from separate workspaces at once + +set -euo pipefail + +REPO_DIR="$(git rev-parse --show-toplevel)" + +CRATES=(. packages/flutter/rust crates/breez-sdk/lnurl docs/breez-sdk/snippets/rust) + +for crate in "${CRATES[@]}"; do + cargo update -w --manifest-path "$REPO_DIR/$crate/Cargo.toml" +done