From 30c0ed9a12ea4f972b6b408ea3a34115fecfd41b Mon Sep 17 00:00:00 2001 From: 2ro <17595647+2ro@users.noreply.github.com> Date: Sat, 4 Jul 2026 03:35:29 -0400 Subject: [PATCH] Goblin Build 133 - Tor transport (replaces the Nym mixnet) The wallet's private transport moves from the Nym mixnet to embedded Tor (arti, copied from GRIM's engine): it dials the relay's pinned .onion, so the relay never learns your IP, while the relay + NIP-59 gift-wrap hide the rest - content, sender, and (via a relay-side randomized release) timing. The Grin node stays on the clear internet as before. Why leave the mixnet: the Nym free-tier bandwidth this depended on is being removed upstream (the grant expires at UTC midnight; the paid path requires holding NYM tokens), so a payments wallet can't stand on it. Tor is unmetered, embedded in-process on mobile, faster where users wait, and lighter on the battery. Preserved intact: the confirm-before-sent guard, relay-gated readiness, and the lazy warm-on-activity node polling. src/nym/ is feature-gated off (arti and nym-sdk can't share one binary); full removal is a follow-up. --- Cargo.lock | 6683 +++++++++------------------- Cargo.toml | 49 +- locales/de.yml | 30 +- locales/en.yml | 30 +- locales/fr.yml | 30 +- locales/ru.yml | 30 +- locales/tr.yml | 30 +- locales/zh-CN.yml | 30 +- src/gui/views/goblin/mod.rs | 10 +- src/gui/views/goblin/onboarding.rs | 2 +- src/http/price.rs | 10 +- src/lib.rs | 17 +- src/nostr/client.rs | 124 +- src/nostr/nip05.rs | 18 +- src/nostr/pool.rs | 64 +- src/tor/engine.rs | 282 ++ src/tor/mod.rs | 301 ++ src/tor/transport.rs | 194 + src/wallet/e2e.rs | 10 +- 19 files changed, 3231 insertions(+), 4713 deletions(-) create mode 100644 src/tor/engine.rs create mode 100644 src/tor/mod.rs create mode 100644 src/tor/transport.rs diff --git a/Cargo.lock b/Cargo.lock index e030e5c..db4d004 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -151,58 +151,9 @@ dependencies = [ "cfg-if 1.0.4", "cipher 0.4.4", "cpufeatures 0.2.17", -] - -[[package]] -name = "aes" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" -dependencies = [ - "cipher 0.5.2", - "cpubits", - "cpufeatures 0.3.0", -] - -[[package]] -name = "aes-gcm" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" -dependencies = [ - "aead 0.5.2", - "aes 0.8.4", - "cipher 0.4.4", - "ctr", - "ghash", - "subtle 2.6.1", -] - -[[package]] -name = "aes-gcm-siv" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d" -dependencies = [ - "aead 0.5.2", - "aes 0.8.4", - "cipher 0.4.4", - "ctr", - "polyval", - "subtle 2.6.1", "zeroize", ] -[[package]] -name = "aes-keywrap" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b6f24a1f796bc46415a1d0d18dc0a8203ccba088acf5def3291c4f61225522" -dependencies = [ - "aes 0.9.1", - "byteorder", -] - [[package]] name = "age" version = "0.7.2" @@ -226,7 +177,7 @@ dependencies = [ "rust-embed", "scrypt 0.8.1", "sha2 0.9.9", - "subtle 2.6.1", + "subtle", "x25519-dalek 1.1.1", "zeroize", ] @@ -287,27 +238,58 @@ dependencies = [ "equator", ] -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - [[package]] name = "allocator-api2" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "amplify" +version = "4.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f7fb4ac7c881e54a8e7015e399b6112a2a5bc958b6c89ac510840ff20273b31" +dependencies = [ + "amplify_derive", + "amplify_num", + "ascii", + "getrandom 0.2.17", + "getrandom 0.3.3", + "wasm-bindgen", +] + +[[package]] +name = "amplify_derive" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a6309e6b8d89b36b9f959b7a8fa093583b94922a0f6438a24fb08936de4d428" +dependencies = [ + "amplify_syn", + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 1.0.109", +] + +[[package]] +name = "amplify_num" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afed304556696656d2d71495e1e5f2c4b524a3fb6eb0f2f3778ffc482a40b8a8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "amplify_syn" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7736fb8d473c0d83098b5bac44df6a561e20470375cd8bcae30516dc889fd62a" +dependencies = [ + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 1.0.109", +] + [[package]] name = "android-activity" version = "0.6.0" @@ -315,11 +297,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.10.0", + "bitflags 2.13.0", "cc", "cesu8", - "jni 0.21.1", - "jni-sys 0.3.0", + "jni", + "jni-sys", "libc", "log", "ndk", @@ -463,127 +445,6 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "ark-bls12-381" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" -dependencies = [ - "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits 0.2.19", - "rayon", - "zeroize", -] - -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint 0.4.6", - "num-traits 0.2.19", - "paste", - "rayon", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote 1.0.44", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint 0.4.6", - "num-traits 0.2.19", - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 1.0.109", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", - "derivative", - "hashbrown 0.13.2", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-serialize-derive", - "ark-std", - "digest 0.10.7", - "num-bigint 0.4.6", -] - -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 1.0.109", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits 0.2.19", - "rand 0.8.6", - "rayon", -] - [[package]] name = "arrayref" version = "0.3.9" @@ -605,6 +466,59 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "arti-client" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc89b08e6a475a83d70e52f0ede139a433eb46e986a6cee6eeaa1b73297bf1" +dependencies = [ + "async-trait", + "cfg-if 1.0.4", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "educe", + "fs-mistrust", + "futures 0.3.31", + "hostname-validator", + "humantime", + "humantime-serde", + "libc", + "once_cell", + "postage", + "rand 0.10.1", + "safelog", + "serde", + "tempfile", + "thiserror 2.0.18", + "time", + "tor-async-utils", + "tor-basic-utils", + "tor-chanmgr", + "tor-circmgr", + "tor-config", + "tor-config-path", + "tor-dircommon", + "tor-dirmgr", + "tor-error", + "tor-guardmgr", + "tor-hsclient", + "tor-hscrypto", + "tor-keymgr", + "tor-linkspec", + "tor-llcrypto", + "tor-memquota", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-protover", + "tor-rtcompat", + "tracing", + "void", + "web-time-compat", +] + [[package]] name = "as-raw-xcb-connection" version = "1.0.1" @@ -620,6 +534,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "ascii" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -629,6 +549,50 @@ dependencies = [ "libloading", ] +[[package]] +name = "asn1-rs" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom 7.1.3", + "num-traits 0.2.19", + "rusticata-macros", + "thiserror 2.0.18", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" +dependencies = [ + "proc-macro2 1.0.106", + "quote 1.0.44", + "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 1.0.106", + "quote 1.0.44", + "syn 2.0.114", +] + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + [[package]] name = "async-broadcast" version = "0.7.2" @@ -672,8 +636,8 @@ checksum = "e79b3f8a79cccc2898f31920fc69f304859b3bd567490f75ebf51ae1c792a9ac" dependencies = [ "compression-codecs", "compression-core", + "futures-io", "pin-project-lite 0.2.16", - "tokio 1.49.0", ] [[package]] @@ -734,6 +698,18 @@ dependencies = [ "pin-project-lite 0.2.16", ] +[[package]] +name = "async-native-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37dd6b179962fe4048a6f81d4c0d7ed419a21fdf49204b4c6b04971693358e79" +dependencies = [ + "futures-util", + "native-tls", + "thiserror 2.0.18", + "url", +] + [[package]] name = "async-process" version = "2.5.0" @@ -881,19 +857,53 @@ dependencies = [ "tokio 1.49.0", "tokio-rustls 0.26.4", "tokio-socks 0.5.3", - "tokio-tungstenite 0.26.2", + "tokio-tungstenite", "url", "wasm-bindgen", "web-sys", ] [[package]] -name = "atoi" -version = "2.0.0" +name = "async_executors" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +checksum = "a982d2f86de6137cc05c9db9a915a19886c97911f9790d04f174cede74be01a5" dependencies = [ - "num-traits 0.2.19", + "blanket", + "futures-core", + "futures-task", + "futures-util", + "pin-project", + "rustc_version", + "tokio 1.49.0", +] + +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes 1.11.1", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.16", +] + +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + +[[package]] +name = "atomic" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" +dependencies = [ + "bytemuck", ] [[package]] @@ -992,7 +1002,7 @@ dependencies = [ "log", "num-rational 0.4.2", "num-traits 0.2.19", - "pastey 0.1.1", + "pastey", "rayon", "thiserror 2.0.18", "v_frame", @@ -1147,6 +1157,16 @@ dependencies = [ "serde", ] +[[package]] +name = "bincode" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" +dependencies = [ + "serde", + "unty", +] + [[package]] name = "bindgen" version = "0.65.1" @@ -1170,29 +1190,6 @@ dependencies = [ "which", ] -[[package]] -name = "binstring" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0669d5a35b64fdb5ab7fb19cae13148b6b5cbdf4b8247faf54ece47f699c8cef" - -[[package]] -name = "bip32" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" -dependencies = [ - "bs58 0.5.1", - "hmac 0.12.1", - "k256", - "rand_core 0.6.4", - "ripemd", - "secp256k1 0.27.0", - "sha2 0.10.9", - "subtle 2.6.1", - "zeroize", -] - [[package]] name = "bip39" version = "2.2.2" @@ -1200,11 +1197,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90dbd31c98227229239363921e60fcf5e558e43ec69094d46fc4996f08d1d5bc" dependencies = [ "bitcoin_hashes 0.14.100", - "rand 0.8.6", - "rand_core 0.6.4", "serde", "unicode-normalization", - "zeroize", ] [[package]] @@ -1274,9 +1268,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -1291,24 +1285,15 @@ dependencies = [ ] [[package]] -name = "blake2" -version = "0.8.1" +name = "bitvec" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" +checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" dependencies = [ - "byte-tools", - "crypto-mac 0.7.0", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", + "funty", + "radium", + "tap", + "wyz", ] [[package]] @@ -1322,29 +1307,14 @@ dependencies = [ ] [[package]] -name = "blake2b_simd" -version = "1.0.4" +name = "blanket" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3" +checksum = "e0b121a9fe0df916e362fb3271088d071159cdf11db0e4182d02152850756eff" dependencies = [ - "arrayref", - "arrayvec 0.7.6", - "constant_time_eq 0.4.2", -] - -[[package]] -name = "blake3" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" -dependencies = [ - "arrayref", - "arrayvec 0.7.6", - "cc", - "cfg-if 1.0.4", - "constant_time_eq 0.4.2", - "cpufeatures 0.2.17", - "digest 0.10.7", + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 2.0.114", ] [[package]] @@ -1441,33 +1411,6 @@ dependencies = [ "piper", ] -[[package]] -name = "bnum" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" - -[[package]] -name = "brotli" -version = "8.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8119e4516436f5708bbc474a9d395bf12f1b5395e93a92a56e647ac3388c8610" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5962523e1b92ce1b5e793d9169b9943eece10d39f62550bc04bb605d75b94924" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - [[package]] name = "bs58" version = "0.3.1" @@ -1480,7 +1423,6 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ - "sha2 0.10.9", "tinyvec", ] @@ -1491,6 +1433,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", + "regex-automata", "serde", ] @@ -1509,22 +1452,18 @@ version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + [[package]] name = "byte-tools" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -[[package]] -name = "bytecodec" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" -dependencies = [ - "byteorder", - "trackable 0.2.24", -] - [[package]] name = "bytemuck" version = "1.25.0" @@ -1578,9 +1517,6 @@ name = "bytes" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" -dependencies = [ - "serde", -] [[package]] name = "calloop" @@ -1588,7 +1524,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "log", "polling", "rustix 0.38.44", @@ -1602,7 +1538,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "polling", "rustix 1.1.3", "slab", @@ -1634,50 +1570,10 @@ dependencies = [ ] [[package]] -name = "camino" -version = "1.2.2" +name = "caret" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" -dependencies = [ - "serde_core", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cargo_metadata" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror 2.0.18", -] +checksum = "beae2cb9f60bc3f21effaaf9c64e51f6627edd54eedc9199ba07f519ef2a2101" [[package]] name = "cbc" @@ -1700,16 +1596,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "celes" -version = "2.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55028d5b1eebb35237512a3838ce5583211434a233c8bb179551a7197ffb7bd4" -dependencies = [ - "phf 0.13.1", - "serde", -] - [[package]] name = "cesu8" version = "1.1.0" @@ -1752,16 +1638,6 @@ dependencies = [ "libc", ] -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - [[package]] name = "chacha20" version = "0.8.2" @@ -1852,20 +1728,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common 0.1.7", - "inout 0.1.4", + "inout", "zeroize", ] -[[package]] -name = "cipher" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" -dependencies = [ - "crypto-common 0.2.2", - "inout 0.2.2", -] - [[package]] name = "clang-sys" version = "1.8.1" @@ -1877,46 +1743,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "clap" -version = "4.5.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim 0.11.1", -] - -[[package]] -name = "clap_derive" -version = "4.5.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" -dependencies = [ - "heck 0.5.0", - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", -] - -[[package]] -name = "clap_lex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - [[package]] name = "clipboard-win" version = "5.4.1" @@ -1944,12 +1770,6 @@ dependencies = [ "cc", ] -[[package]] -name = "cmov" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" - [[package]] name = "coarsetime" version = "0.1.37" @@ -1982,7 +1802,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block", "core-foundation 0.10.1", "core-graphics-types 0.2.0", @@ -2012,16 +1832,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" -[[package]] -name = "colored" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" -dependencies = [ - "lazy_static", - "windows-sys 0.59.0", -] - [[package]] name = "combine" version = "4.6.7" @@ -2038,10 +1848,9 @@ version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce2548391e9c1929c21bf6aa2680af86fe4c1b33e6cea9ac1cfeec0bd11218cf" dependencies = [ - "brotli", "compression-core", "flate2", - "memchr", + "liblzma", "zstd", "zstd-safe", ] @@ -2073,12 +1882,6 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" -[[package]] -name = "const-str" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" - [[package]] name = "constant_time_eq" version = "0.1.5" @@ -2091,6 +1894,15 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "cookie-factory" version = "0.3.3" @@ -2184,7 +1996,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "core-foundation 0.10.1", "libc", ] @@ -2200,17 +2012,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-models" -version = "0.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "657f625ff361906f779745d08375ae3cc9fef87a35fba5f22874cf773010daf4" -dependencies = [ - "hax-lib", - "pastey 0.2.3", - "rand 0.9.2", -] - [[package]] name = "core-video-sys" version = "0.1.4" @@ -2243,132 +2044,6 @@ dependencies = [ "libm", ] -[[package]] -name = "cosmos-sdk-proto" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ac39be7373404accccaede7cc1ec942ccef14f0ca18d209967a756bf1dbb1f" -dependencies = [ - "prost", - "tendermint-proto", -] - -[[package]] -name = "cosmrs" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34e74fa7a22930fe0579bef560f2d64b78415d4c47b9dd976c0635136809471d" -dependencies = [ - "bip32", - "cosmos-sdk-proto", - "ecdsa", - "eyre", - "k256", - "rand_core 0.6.4", - "serde", - "serde_json", - "signature 2.2.0", - "subtle-encoding", - "tendermint", - "tendermint-rpc", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-core" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac5ed3671399bdaa500eeeaacdc9c11ddb93b4a30662c09b845722186748c13" - -[[package]] -name = "cosmwasm-crypto" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bba8d89908fe256c7fe6efaccb54da59689329bc92011a9eb9bad8d615426c29" -dependencies = [ - "ark-bls12-381", - "ark-ec", - "ark-ff", - "ark-serialize", - "cosmwasm-core", - "curve25519-dalek 4.1.3", - "digest 0.10.7", - "ecdsa", - "ed25519-zebra", - "k256", - "num-traits 0.2.19", - "p256", - "rand_core 0.6.4", - "rayon", - "sha2 0.10.9", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-derive" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28561fc9ba9ef8ea234c3306fcbf20e6799ea0b78a7ca13386012f371c34a6d0" -dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", -] - -[[package]] -name = "cosmwasm-schema" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" -dependencies = [ - "cosmwasm-schema-derive", - "schemars", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "cosmwasm-schema-derive" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" -dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", -] - -[[package]] -name = "cosmwasm-std" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" -dependencies = [ - "base64 0.22.1", - "bech32 0.11.1", - "bnum", - "cosmwasm-core", - "cosmwasm-crypto", - "cosmwasm-derive", - "derive_more 1.0.0", - "hex", - "rand_core 0.6.4", - "rmp-serde", - "schemars", - "serde", - "serde-json-wasm", - "sha2 0.10.9", - "static_assertions", - "thiserror 1.0.69", -] - -[[package]] -name = "cpubits" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" - [[package]] name = "cpufeatures" version = "0.2.17" @@ -2411,12 +2086,6 @@ dependencies = [ "cfg-if 1.0.4", ] -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - [[package]] name = "croaring" version = "1.1.0" @@ -2436,15 +2105,6 @@ dependencies = [ "cc", ] -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -2493,7 +2153,7 @@ checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2514,19 +2174,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "getrandom 0.4.1", "hybrid-array", - "rand_core 0.10.1", -] - -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", ] [[package]] @@ -2536,7 +2184,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" dependencies = [ "generic-array 0.14.7", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -2560,12 +2208,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "ct-codecs" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49fb0c6640b4507ebd99ff67677009e381ba5eee1d14df78de4a3d16eb123c39" - [[package]] name = "ctr" version = "0.9.2" @@ -2575,15 +2217,6 @@ dependencies = [ "cipher 0.4.4", ] -[[package]] -name = "ctutils" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" -dependencies = [ - "cmov", -] - [[package]] name = "cursor-icon" version = "1.2.0" @@ -2599,7 +2232,7 @@ dependencies = [ "byteorder", "digest 0.8.1", "rand_core 0.5.1", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2612,7 +2245,7 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2628,8 +2261,7 @@ dependencies = [ "digest 0.10.7", "fiat-crypto", "rustc_version", - "serde", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -2645,111 +2277,13 @@ dependencies = [ ] [[package]] -name = "curve25519-dalek-ng" -version = "4.1.1" +name = "darling" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", - "subtle-ng", - "zeroize", -] - -[[package]] -name = "cw-controllers" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "schemars", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw-storage-plus" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" -dependencies = [ - "cosmwasm-std", - "schemars", - "serde", -] - -[[package]] -name = "cw-utils" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "schemars", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars", - "semver", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw20" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42212b6bf29bbdda693743697c621894723f35d3db0d5df930be22903d0e27c" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "schemars", - "serde", -] - -[[package]] -name = "cw3" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5e53c2057526c65d9c88be8b2a564729ebad7a3d87ee97b97665a71446f913a" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw20", - "schemars", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "cw4" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d33f5c8a6b6cd1bd24e212d7f44967697bfa3c4f9cc3f9a8e1c58f5fe5db032d" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars", - "serde", + "darling_core 0.14.4", + "darling_macro 0.14.4", ] [[package]] @@ -2758,8 +2292,42 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2 1.0.106", + "quote 1.0.44", + "strsim 0.10.0", + "syn 1.0.109", ] [[package]] @@ -2776,13 +2344,72 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 2.0.114", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2 1.0.106", + "quote 1.0.44", + "strsim 0.11.1", + "syn 2.0.114", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote 1.0.44", + "syn 1.0.109", +] + [[package]] name = "darling_macro" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", + "quote 1.0.44", + "syn 2.0.114", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote 1.0.44", + "syn 2.0.114", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", "quote 1.0.44", "syn 2.0.114", ] @@ -2798,7 +2425,6 @@ dependencies = [ "lock_api 0.4.14", "once_cell", "parking_lot_core 0.9.12", - "serde", ] [[package]] @@ -2813,47 +2439,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" -[[package]] -name = "defmt" -version = "0.3.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" -dependencies = [ - "defmt 1.1.0", -] - -[[package]] -name = "defmt" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e524506490a1953d237cb87b1cfc1e46f88c18f10a22dfe0f507dc6bfc7f7f" -dependencies = [ - "bitflags 1.3.2", - "defmt-macros", -] - -[[package]] -name = "defmt-macros" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a27770e9c8f719a79d8b638281f4d828f77d8fd61e0bd94451b9b85e576a0b" -dependencies = [ - "defmt-parser", - "proc-macro-error2", - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", -] - -[[package]] -name = "defmt-parser" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" -dependencies = [ - "thiserror 2.0.18", -] - [[package]] name = "der" version = "0.7.10" @@ -2866,13 +2451,17 @@ dependencies = [ ] [[package]] -name = "der" -version = "0.8.0" +name = "der-parser" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" dependencies = [ - "const-oid 0.10.2", - "zeroize", + "asn1-rs", + "cookie-factory", + "displaydoc", + "nom 7.1.3", + "num-traits 0.2.19", + "rusticata-macros", ] [[package]] @@ -2885,14 +2474,32 @@ dependencies = [ ] [[package]] -name = "derivative" -version = "2.2.0" +name = "derive-deftly" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "0bc153c91ebf221a2e7feb166aee259acf8a00ecf35c83df8b79fe8f5c3861d7" dependencies = [ + "derive-deftly-macros", + "heck 0.5.0", +] + +[[package]] +name = "derive-deftly-macros" +version = "1.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1747ed5fb4ab3a9f8253da3401efe7ca8f8e5ec373b2e700ff55c3304d84e31f" +dependencies = [ + "heck 0.5.0", + "indexmap 2.13.0", + "itertools 0.14.0", + "proc-macro-crate", "proc-macro2 1.0.106", "quote 1.0.44", - "syn 1.0.109", + "sha3 0.11.0", + "strum 0.28.0", + "syn 2.0.114", + "unicode-ident", + "void", ] [[package]] @@ -2910,12 +2517,33 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2 1.0.106", "quote 1.0.44", "syn 2.0.114", ] +[[package]] +name = "derive_builder_core_fork_arti" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24c1b715c79be6328caa9a5e1a387a196ea503740f0722ec3dd8f67a9e72314d" +dependencies = [ + "darling 0.14.4", + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_fork_arti" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3eae24d595f4d0ecc90a9a5a6d11c2bd8dafe2375ec4a1ec63250e5ade7d228" +dependencies = [ + "derive_builder_macro_fork_arti", +] + [[package]] name = "derive_builder_macro" version = "0.20.2" @@ -2927,12 +2555,13 @@ dependencies = [ ] [[package]] -name = "derive_more" -version = "1.0.0" +name = "derive_builder_macro_fork_arti" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +checksum = "69887769a2489cd946bf782eb2b1bb2cb7bc88551440c94a765d4f040c08ebf3" dependencies = [ - "derive_more-impl 1.0.0", + "derive_builder_core_fork_arti", + "syn 1.0.109", ] [[package]] @@ -2941,19 +2570,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ - "derive_more-impl 2.1.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", - "unicode-xid 0.2.6", + "derive_more-impl", ] [[package]] @@ -2962,6 +2579,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ + "convert_case", "proc-macro2 1.0.106", "quote 1.0.44", "rustc_version", @@ -3002,7 +2620,7 @@ dependencies = [ "block-buffer 0.10.4", "const-oid 0.9.6", "crypto-common 0.1.7", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -3012,9 +2630,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer 0.12.1", + "const-oid 0.10.2", "crypto-common 0.2.2", ] +[[package]] +name = "directories" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" +dependencies = [ + "dirs-sys 0.5.0", +] + [[package]] name = "dirs" version = "2.0.2" @@ -3090,7 +2718,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.6.2", "libc", "objc2 0.6.3", @@ -3131,18 +2759,18 @@ dependencies = [ "litrs", ] -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - [[package]] name = "downcast-rs" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "downcast-rs" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" + [[package]] name = "doxygen-rs" version = "0.4.2" @@ -3201,13 +2829,12 @@ version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der 0.7.10", + "der", "digest 0.10.7", "elliptic-curve", "rfc6979", - "serdect 0.2.0", "signature 2.2.0", - "spki 0.7.3", + "spki", ] [[package]] @@ -3235,34 +2862,10 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "pkcs8 0.10.2", - "serde", + "pkcs8", "signature 2.2.0", ] -[[package]] -name = "ed25519-compact" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5c0284a5d4b1a2fae017a9fe55fd7d01699711f1b572493f16593e173ea2801" -dependencies = [ - "ct-codecs", - "getrandom 0.4.1", -] - -[[package]] -name = "ed25519-consensus" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" -dependencies = [ - "curve25519-dalek-ng", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - [[package]] name = "ed25519-dalek" version = "1.0.1" @@ -3285,26 +2888,24 @@ checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek 4.1.3", "ed25519 2.2.3", + "merlin", "rand_core 0.6.4", "serde", "sha2 0.10.9", - "subtle 2.6.1", + "subtle", "zeroize", ] [[package]] -name = "ed25519-zebra" -version = "4.0.3" +name = "educe" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" dependencies = [ - "curve25519-dalek 4.1.3", - "ed25519 2.2.3", - "hashbrown 0.14.5", - "hex", - "rand_core 0.6.4", - "sha2 0.10.9", - "zeroize", + "enum-ordinalize", + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 1.0.109", ] [[package]] @@ -3352,7 +2953,7 @@ checksum = "6a9b567d356674e9a5121ed3fedfb0a7c31e059fe71f6972b691bcd0bfc284e3" dependencies = [ "accesskit", "ahash", - "bitflags 2.10.0", + "bitflags 2.13.0", "emath", "epaint", "log", @@ -3369,7 +2970,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa615b8df996a05c796ff3a37f75945eff1545b552f86b2b0d40b980db5a8216" dependencies = [ "atomic_float", - "bitflags 2.10.0", + "bitflags 2.13.0", "egui", "tokio 1.49.0", "tracing", @@ -3456,9 +3057,6 @@ name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -dependencies = [ - "serde", -] [[package]] name = "elliptic-curve" @@ -3472,13 +3070,10 @@ dependencies = [ "ff", "generic-array 0.14.7", "group", - "hkdf 0.12.4", - "pem-rfc7468", - "pkcs8 0.10.2", + "pkcs8", "rand_core 0.6.4", "sec1", - "serdect 0.2.0", - "subtle 2.6.1", + "subtle", "zeroize", ] @@ -3532,6 +3127,31 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "enum-ordinalize" +version = "3.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" +dependencies = [ + "num-bigint 0.4.6", + "num-traits 0.2.19", + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 2.0.114", +] + +[[package]] +name = "enum_dispatch" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" +dependencies = [ + "once_cell", + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 2.0.114", +] + [[package]] name = "enum_primitive" version = "0.1.1" @@ -3562,6 +3182,27 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "enumset" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "839c4174b41e75c8f7306110b2c51996a293b8d1d850edd529011841d9fede7d" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd536557b58c682b217b8fb199afdff47cd3eff260623f19e77074eb073d63a" +dependencies = [ + "darling 0.21.3", + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 2.0.114", +] + [[package]] name = "env_filter" version = "0.1.4" @@ -3651,17 +3292,6 @@ version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if 1.0.4", - "home", - "windows-sys 0.48.0", -] - [[package]] name = "euclid" version = "0.22.13" @@ -3714,14 +3344,16 @@ dependencies = [ ] [[package]] -name = "eyre" -version = "0.6.12" +name = "fallible-iterator" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" -dependencies = [ - "indenter", - "once_cell", -] +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" @@ -3765,7 +3397,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "rand_core 0.6.4", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -3774,6 +3406,29 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "figment" +version = "0.10.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" +dependencies = [ + "atomic 0.6.1", + "serde", + "toml 0.8.23", + "uncased", + "version_check", +] + +[[package]] +name = "filetime" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +dependencies = [ + "cfg-if 1.0.4", + "libc", +] + [[package]] name = "find-crate" version = "0.6.3" @@ -3799,16 +3454,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "flex-error" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" -dependencies = [ - "eyre", - "paste", -] - [[package]] name = "float-cmp" version = "0.9.0" @@ -3859,6 +3504,12 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "fluid-let" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "749cff877dc1af878a0b31a41dd221a753634401ea0ef2f87b62d3171522485a" + [[package]] name = "flume" version = "0.11.1" @@ -3963,6 +3614,22 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs-mistrust" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cfebc7c6bb65d327ded064db65cd260b6c418c27ae790318650cfa2a81bf33f" +dependencies = [ + "derive_builder_fork_arti", + "dirs 6.0.0", + "libc", + "pwd-grp", + "serde", + "thiserror 2.0.18", + "void", + "walkdir", +] + [[package]] name = "fs2" version = "0.4.3" @@ -3979,6 +3646,17 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" +[[package]] +name = "fslock-guard" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e77b8a36ee17f9079b53db7281de9b16a8fb2bc97a7cd1e41a2998f3a837af7a" +dependencies = [ + "libc", + "thiserror 2.0.18", + "windows-sys 0.61.2", +] + [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -4001,6 +3679,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futures" version = "0.1.31" @@ -4049,17 +3733,6 @@ dependencies = [ "futures-util", ] -[[package]] -name = "futures-intrusive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" -dependencies = [ - "futures-core", - "lock_api 0.4.14", - "parking_lot 0.12.5", -] - [[package]] name = "futures-io" version = "0.3.31" @@ -4163,7 +3836,6 @@ version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "serde", "typenum", "version_check", "zeroize", @@ -4245,16 +3917,6 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug 0.3.1", - "polyval", -] - [[package]] name = "gif" version = "0.14.1" @@ -4277,7 +3939,7 @@ version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "libc", "libgit2-sys", "log", @@ -4301,6 +3963,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "glob-match" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985c9503b412198aa4197559e9a318524ebc4519c229bfa05a535828c950b9d" + [[package]] name = "globset" version = "0.4.18" @@ -4325,27 +3993,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "gloo-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils", - "http 1.4.0", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror 1.0.69", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "gloo-timers" version = "0.3.0" @@ -4358,19 +4005,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "gloo-utils" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "glow" version = "0.16.0" @@ -4389,7 +4023,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "cfg_aliases", "cgl", "dispatch2", @@ -4455,7 +4089,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "gpu-alloc-types", ] @@ -4465,7 +4099,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", ] [[package]] @@ -4486,7 +4120,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -4497,7 +4131,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", ] [[package]] @@ -4508,6 +4142,7 @@ dependencies = [ "android_logger", "anyhow", "arboard", + "arti-client", "async-std", "async-wsocket", "backtrace", @@ -4537,7 +4172,6 @@ dependencies = [ "grin_wallet_libwallet", "grin_wallet_util", "hex", - "hickory-proto", "http-body-util", "hyper 1.8.1", "hyper-proxy2", @@ -4546,7 +4180,7 @@ dependencies = [ "hyper-util", "image", "interprocess", - "jni 0.21.1", + "jni", "lazy_static", "local-ip-address", "log", @@ -4556,7 +4190,6 @@ dependencies = [ "nostr-relay-pool", "nostr-sdk", "num-bigint 0.4.6", - "nym-sdk", "openssl", "parking_lot 0.12.5", "pin-project", @@ -4576,15 +4209,15 @@ dependencies = [ "serde_json", "serde_yaml", "sha2 0.10.9", - "smolmix", "sys-locale", "thiserror 2.0.18", "tokio 0.2.25", "tokio 1.49.0", "tokio-rustls 0.26.4", - "tokio-tungstenite 0.26.2", + "tokio-tungstenite", "tokio-util 0.2.0", "toml 0.9.11+spec-1.1.0", + "tor-rtcompat", "ur", "url", "usvg", @@ -4929,7 +4562,7 @@ dependencies = [ "log", "rand 0.6.5", "regex", - "reqwest 0.10.10", + "reqwest", "ring 0.16.20", "serde", "serde_derive", @@ -5003,7 +4636,7 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core 0.6.4", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -5076,53 +4709,17 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "handlebars" -version = "3.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" -dependencies = [ - "log", - "pest", - "pest_derive", - "quick-error", - "serde", - "serde_json", -] - -[[package]] -name = "hash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" -dependencies = [ - "byteorder", -] - [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] [[package]] name = "hashbrown" @@ -5130,8 +4727,6 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "allocator-api2", - "equivalent", "foldhash 0.1.5", ] @@ -5148,48 +4743,11 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f" dependencies = [ - "hashbrown 0.15.5", -] - -[[package]] -name = "hax-lib" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "543f93241d32b3f00569201bfce9d7a93c92c6421b23c77864ac929dc947b9fc" -dependencies = [ - "hax-lib-macros", - "num-bigint 0.4.6", - "num-traits 0.2.19", -] - -[[package]] -name = "hax-lib-macros" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8755751e760b11021765bb04cb4a6c4e24742688d9f3aa14c2079638f537b0f" -dependencies = [ - "hax-lib-macros-types", - "proc-macro-error2", - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", -] - -[[package]] -name = "hax-lib-macros-types" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f177c9ae8ea456e2f71ff3c1ea47bf4464f772a05133fcbba56cd5ba169035a2" -dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "serde", - "serde_json", - "uuid 1.20.0", + "hashbrown 0.16.1", ] [[package]] @@ -5216,16 +4774,6 @@ dependencies = [ "http 1.4.0", ] -[[package]] -name = "heapless" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" -dependencies = [ - "hash32", - "stable_deref_trait", -] - [[package]] name = "heck" version = "0.3.3" @@ -5247,7 +4795,7 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad82d6598ccf1dac15c8b758a1bd282b755b6776be600429176757190a1b0202" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "byteorder", "heed-traits", "heed-types", @@ -5272,7 +4820,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c255bdf46e07fb840d120a36dcc81f385140d7191c76a7391672675c01a55d" dependencies = [ - "bincode", + "bincode 1.3.3", "byteorder", "heed-traits", "serde", @@ -5306,85 +4854,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "hickory-net" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2295ed2f9c31e471e1428a8f88a3f0e1f4b27c15049592138d1eebe9c35b183" -dependencies = [ - "async-trait", - "bytes 1.11.1", - "cfg-if 1.0.4", - "data-encoding", - "futures-channel", - "futures-io", - "futures-util", - "h2 0.4.13", - "hickory-proto", - "http 1.4.0", - "idna", - "ipnet", - "jni 0.22.4", - "rand 0.10.1", - "rustls 0.23.40", - "thiserror 2.0.18", - "tinyvec", - "tokio 1.49.0", - "tokio-rustls 0.26.4", - "tracing", - "url", - "webpki-roots 1.0.7", -] - -[[package]] -name = "hickory-proto" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bab31817bfb44672a252e97fe81cd0c18d1b2cf892108922f6818820df8c643" -dependencies = [ - "data-encoding", - "idna", - "ipnet", - "jni 0.22.4", - "once_cell", - "prefix-trie", - "rand 0.10.1", - "ring 0.17.14", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "url", -] - -[[package]] -name = "hickory-resolver" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d58d28879ceecde6607729660c2667a081ccdc082e082675042793960f178c" -dependencies = [ - "cfg-if 1.0.4", - "futures-util", - "hickory-net", - "hickory-proto", - "ipconfig", - "ipnet", - "jni 0.22.4", - "moka", - "ndk-context", - "once_cell", - "parking_lot 0.12.5", - "rand 0.10.1", - "resolv-conf", - "rustls 0.23.40", - "smallvec", - "system-configuration 0.7.0", - "thiserror 2.0.18", - "tokio 1.49.0", - "tokio-rustls 0.26.4", - "tracing", - "webpki-roots 1.0.7", -] - [[package]] name = "hkdf" version = "0.11.0" @@ -5410,7 +4879,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" dependencies = [ - "crypto-mac 0.11.0", + "crypto-mac", "digest 0.9.0", ] @@ -5423,30 +4892,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "hmac-sha1-compact" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0b3ba31f6dc772cc8221ce81dbbbd64fa1e668255a6737d95eeace59b5a8823" - -[[package]] -name = "hmac-sha256" -version = "1.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9d92d097f4749b64e8cc33d924d9f40a2d4eb91402b458014b781f5733d60f" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac-sha512" -version = "1.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "019ece39bbefc17f13f677a690328cb978dbf6790e141a3c24e66372cb38588b" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "home" version = "0.5.12" @@ -5456,6 +4901,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "hostname-validator" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" + [[package]] name = "http" version = "0.2.12" @@ -5527,16 +4978,6 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" -[[package]] -name = "httpcodec" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" -dependencies = [ - "bytecodec", - "trackable 0.2.24", -] - [[package]] name = "httpdate" version = "0.3.2" @@ -5571,7 +5012,6 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" dependencies = [ - "ctutils", "typenum", ] @@ -5692,40 +5132,11 @@ dependencies = [ "hyper 0.14.32", "log", "rustls 0.20.9", - "rustls-native-certs 0.6.3", + "rustls-native-certs", "tokio 1.49.0", "tokio-rustls 0.23.4", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "rustls 0.21.12", - "tokio 1.49.0", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" -dependencies = [ - "http 1.4.0", - "hyper 1.8.1", - "hyper-util", - "rustls 0.23.40", - "tokio 1.49.0", - "tokio-rustls 0.26.4", - "tower-service", -] - [[package]] name = "hyper-socks2" version = "0.9.1" @@ -5789,16 +5200,13 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64 0.22.1", "bytes 1.11.1", "futures-channel", "futures-util", "http 1.4.0", "http-body 1.0.1", "hyper 1.8.1", - "ipnet", "libc", - "percent-encoding", "pin-project-lite 0.2.16", "socket2 0.6.2", "tokio 1.49.0", @@ -6069,18 +5477,22 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" +[[package]] +name = "imara-diff" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f01d462f766df78ab820dd06f5eb700233c51f0f4c2e846520eaf4ba6aa5c5c" +dependencies = [ + "hashbrown 0.15.5", + "memchr", +] + [[package]] name = "imgref" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" -[[package]] -name = "indenter" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" - [[package]] name = "indexmap" version = "1.9.3" @@ -6104,6 +5516,26 @@ dependencies = [ "serde_core", ] +[[package]] +name = "inotify" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533e68a5842e734946fe159fb03fc9bbbb254f590dd0d8ad321ae5ff7beca2c1" +dependencies = [ + "bitflags 2.13.0", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea94e891b3606826e9c998be69ddca42247dad8ad50b1649a5cb7e1c9ae06fd" +dependencies = [ + "libc", +] + [[package]] name = "inout" version = "0.1.4" @@ -6114,15 +5546,6 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "inout" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" -dependencies = [ - "hybrid-array", -] - [[package]] name = "instant" version = "0.1.13" @@ -6198,27 +5621,11 @@ dependencies = [ "libc", ] -[[package]] -name = "ipconfig" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" -dependencies = [ - "socket2 0.6.2", - "widestring", - "windows-registry", - "windows-result 0.4.1", - "windows-sys 0.61.2", -] - [[package]] name = "ipnet" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" -dependencies = [ - "serde", -] [[package]] name = "is-terminal" @@ -6237,15 +5644,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.11.0" @@ -6309,68 +5707,19 @@ dependencies = [ "cesu8", "cfg-if 1.0.4", "combine", - "jni-sys 0.3.0", + "jni-sys", "log", "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] -[[package]] -name = "jni" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" -dependencies = [ - "cfg-if 1.0.4", - "combine", - "jni-macros", - "jni-sys 0.4.1", - "log", - "simd_cesu8", - "thiserror 2.0.18", - "walkdir", - "windows-link 0.2.1", -] - -[[package]] -name = "jni-macros" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" -dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "rustc_version", - "simd_cesu8", - "syn 2.0.114", -] - [[package]] name = "jni-sys" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" -[[package]] -name = "jni-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" -dependencies = [ - "jni-sys-macros", -] - -[[package]] -name = "jni-sys-macros" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" -dependencies = [ - "quote 1.0.44", - "syn 2.0.114", -] - [[package]] name = "jobserver" version = "0.1.34" @@ -6404,46 +5753,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "jwt-simple" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f45048cd18221c81d27dd4621d51df25b33f11b68655d79f67a9f9d3eb48fecc" -dependencies = [ - "anyhow", - "binstring", - "blake2b_simd", - "coarsetime", - "ct-codecs", - "ed25519-compact", - "hmac-sha1-compact", - "hmac-sha256", - "hmac-sha512", - "k256", - "p256", - "p384", - "rand 0.8.6", - "serde", - "serde_json", - "superboring", - "thiserror 2.0.18", - "zeroize", -] - -[[package]] -name = "k256" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" -dependencies = [ - "cfg-if 1.0.4", - "ecdsa", - "elliptic-curve", - "once_cell", - "sha2 0.10.9", - "signature 2.2.0", -] - [[package]] name = "keccak" version = "0.1.5" @@ -6473,12 +5782,6 @@ dependencies = [ "winapi-build", ] -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - [[package]] name = "khronos-egl" version = "6.0.0" @@ -6496,6 +5799,26 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "kqueue" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "273c0752728918e0ac4976f2b275b6fefb9ecd400585dec929419f3844cd87b5" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" +dependencies = [ + "bitflags 2.13.0", + "libc", +] + [[package]] name = "kurbo" version = "0.11.3" @@ -6549,261 +5872,6 @@ version = "0.2.181" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "459427e2af2b9c839b132acb702a1c654d95e10f8c326bfc2ad11310e458b1c5" -[[package]] -name = "libcrux-aesgcm" -version = "0.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99f2a019dab4097585a7d4f5b9deebe46cd1e628b16a5bc4cb0ce35e1da334e6" -dependencies = [ - "libcrux-intrinsics", - "libcrux-platform", - "libcrux-secrets", - "libcrux-traits", -] - -[[package]] -name = "libcrux-chacha20poly1305" -version = "0.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc08d044676af21343b32b988411fa98dbb5cf65a03c9df478ced221bbdfdb1b" -dependencies = [ - "libcrux-hacl-rs", - "libcrux-macros", - "libcrux-poly1305", - "libcrux-secrets", - "libcrux-traits", -] - -[[package]] -name = "libcrux-curve25519" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb1e5fd8476a6ed609d24ef42aee5ab6f99f7c65d054f92412da9f499e423299" -dependencies = [ - "libcrux-hacl-rs", - "libcrux-macros", - "libcrux-secrets", - "libcrux-traits", -] - -[[package]] -name = "libcrux-ecdh" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65f73ce79337c762eb38bbac91e4c9b9e60cf318e8501b812750c640814d45e" -dependencies = [ - "libcrux-curve25519", - "libcrux-p256", - "rand 0.9.2", - "tls_codec", -] - -[[package]] -name = "libcrux-ed25519" -version = "0.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835919315b7042fe9e03b6458efe0db94bf2aa7b873934dbee5b5463a8124b43" -dependencies = [ - "libcrux-hacl-rs", - "libcrux-macros", - "libcrux-sha2", - "rand_core 0.9.5", - "tls_codec", -] - -[[package]] -name = "libcrux-hacl-rs" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2637dc87d158e1f1b550fd9b226443e84153fded4de69028d897b534d16d22e6" -dependencies = [ - "libcrux-macros", -] - -[[package]] -name = "libcrux-hkdf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1a89ca0c89be3a268a921e47105fb7873badf7267f5e3ebf4ea46baedd73ef" -dependencies = [ - "libcrux-hacl-rs", - "libcrux-hmac", - "libcrux-secrets", -] - -[[package]] -name = "libcrux-hmac" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7a242707d65960770bd7e14e4f18a92bdf0b967777dd404887db8d087a643b" -dependencies = [ - "libcrux-hacl-rs", - "libcrux-macros", - "libcrux-sha2", -] - -[[package]] -name = "libcrux-intrinsics" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1b5db005ff8001e026b73a6842ee81bbef8ec5ff0e1915a67ae65fd2a9fafa5" -dependencies = [ - "core-models", - "hax-lib", -] - -[[package]] -name = "libcrux-kem" -version = "0.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12631592f491d22fd1a176d32b2c6edfb673998fd3987e9d95f8fa79ad2a737b" -dependencies = [ - "libcrux-curve25519", - "libcrux-ecdh", - "libcrux-ml-kem", - "libcrux-p256", - "libcrux-sha3", - "libcrux-traits", - "rand 0.9.2", - "tls_codec", -] - -[[package]] -name = "libcrux-macros" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffd6aa2dcd5be681662001b81d493f1569c6d49a32361f470b0c955465cd0338" -dependencies = [ - "quote 1.0.44", - "syn 2.0.114", -] - -[[package]] -name = "libcrux-ml-dsa" -version = "0.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a72929ed421cc3bf16a946b3e7d2a58d215b0b5c2a12be26b53629f081bf49b2" -dependencies = [ - "core-models", - "hax-lib", - "libcrux-intrinsics", - "libcrux-macros", - "libcrux-platform", - "libcrux-sha3", - "tls_codec", -] - -[[package]] -name = "libcrux-ml-kem" -version = "0.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a14ab3e477de9df6ee1273a114018ff62c4996ca9220070c4e5cb1743f94a67d" -dependencies = [ - "hax-lib", - "libcrux-intrinsics", - "libcrux-platform", - "libcrux-secrets", - "libcrux-sha3", - "libcrux-traits", - "rand 0.9.2", - "tls_codec", -] - -[[package]] -name = "libcrux-p256" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4778ba25cb08bb8a96bd100e19ed9aecf78337198fd176036e21042b2dd99bc" -dependencies = [ - "libcrux-hacl-rs", - "libcrux-macros", - "libcrux-secrets", - "libcrux-sha2", - "libcrux-traits", -] - -[[package]] -name = "libcrux-platform" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9e21d7ed31a92ac539bd69a8c970b183ee883872d2d19ce27036e24cb8ecc4" -dependencies = [ - "libc", -] - -[[package]] -name = "libcrux-poly1305" -version = "0.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02491808ee5b9db8cb65fad64ae0be812db64beef179d945c00c7787dc7dfcf9" -dependencies = [ - "libcrux-hacl-rs", - "libcrux-macros", -] - -[[package]] -name = "libcrux-psq" -version = "0.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779ade7aa5e1b4b400c716b313cbf69070988dd005f92e961c2da4c3c42fbea4" -dependencies = [ - "libcrux-aesgcm", - "libcrux-chacha20poly1305", - "libcrux-ecdh", - "libcrux-ed25519", - "libcrux-hkdf", - "libcrux-hmac", - "libcrux-kem", - "libcrux-ml-dsa", - "libcrux-ml-kem", - "libcrux-sha2", - "libcrux-traits", - "rand 0.9.2", - "tls_codec", -] - -[[package]] -name = "libcrux-secrets" -version = "0.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce650f3041b44ba40d4263852347d007cd2cd9d1cc856a6f6c8b2e10c3fd40b" -dependencies = [ - "hax-lib", -] - -[[package]] -name = "libcrux-sha2" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d253473f259fc74a280c43f29c464f7e374abdf28b4942234dc707f529d4b7" -dependencies = [ - "libcrux-hacl-rs", - "libcrux-macros", - "libcrux-traits", -] - -[[package]] -name = "libcrux-sha3" -version = "0.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1ae0b7d0e1cc4793a609fd0ff2ca3b3a3fabae523770c619a3d4bc86417b0d7" -dependencies = [ - "hax-lib", - "libcrux-intrinsics", - "libcrux-platform", - "libcrux-traits", -] - -[[package]] -name = "libcrux-traits" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e4fa89f3f5e34b47f928b22b1b78395a0d4ec23b1f583db635f128159d65f" -dependencies = [ - "libcrux-secrets", - "rand 0.9.2", -] - [[package]] name = "libfuzzer-sys" version = "0.4.10" @@ -6836,6 +5904,26 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "liblzma" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45aec2360b3933207e27908049d8e4df4e476b58180afb1e56b2a4fb72efe4ba" +dependencies = [ + "liblzma-sys", +] + +[[package]] +name = "liblzma-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a046c7f353ba30f810545151e04f63545833803f5b86ee3ddf1517247fe560a5" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "libm" version = "0.2.16" @@ -6848,16 +5936,16 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "libc", "redox_syscall 0.7.0", ] [[package]] name = "libsqlite3-sys" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +checksum = "b1f111c8c41e7c61a49cd34e44c7619462967221a6443b0ec299e0ac30cfb9b1" dependencies = [ "cc", "pkg-config", @@ -6894,18 +5982,6 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2 0.8.1", - "chacha", - "keystream", -] - [[package]] name = "litemap" version = "0.8.1" @@ -6983,7 +6059,7 @@ dependencies = [ "anyhow", "arc-swap", "chrono", - "derive_more 2.1.1", + "derive_more", "flate2", "fnv", "humantime", @@ -7031,12 +6107,6 @@ dependencies = [ "linked-hash-map", ] -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - [[package]] name = "malloc_buf" version = "0.0.6" @@ -7046,12 +6116,6 @@ dependencies = [ "libc", ] -[[package]] -name = "managed" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" - [[package]] name = "matchers" version = "0.2.0" @@ -7071,16 +6135,6 @@ dependencies = [ "rayon", ] -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if 1.0.4", - "digest 0.10.7", -] - [[package]] name = "memchr" version = "2.8.0" @@ -7115,6 +6169,18 @@ dependencies = [ "autocfg 1.5.0", ] +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak 0.1.5", + "rand_core 0.6.4", + "zeroize", +] + [[package]] name = "metal" version = "0.18.0" @@ -7136,7 +6202,7 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block", "core-graphics-types 0.2.0", "foreign-types 0.5.0", @@ -7235,6 +6301,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", + "log", "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.61.2", ] @@ -7283,56 +6350,12 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "ml-dsa" -version = "0.1.0-rc.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "163f15320f3fba11760c373af52d7f69d638482c2c350d877fb06513b1c3137c" -dependencies = [ - "const-oid 0.10.2", - "crypto-common 0.2.2", - "ctutils", - "hybrid-array", - "module-lattice", - "pkcs8 0.11.0", - "sha3 0.11.0", - "signature 3.0.0", -] - [[package]] name = "mock_instant" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" -[[package]] -name = "module-lattice" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" -dependencies = [ - "ctutils", - "hybrid-array", - "num-traits 0.2.19", -] - -[[package]] -name = "moka" -version = "0.12.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" -dependencies = [ - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "equivalent", - "parking_lot 0.12.5", - "portable-atomic", - "smallvec", - "tagptr", - "uuid 1.20.0", -] - [[package]] name = "moxcms" version = "0.7.11" @@ -7351,7 +6374,7 @@ checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" dependencies = [ "arrayvec 0.7.6", "bit-set", - "bitflags 2.10.0", + "bitflags 2.13.0", "cfg-if 1.0.4", "cfg_aliases", "codespan-reporting", @@ -7387,10 +6410,10 @@ dependencies = [ "libc", "log", "openssl", - "openssl-probe 0.1.6", + "openssl-probe", "openssl-sys", "schannel", - "security-framework 2.11.1", + "security-framework", "security-framework-sys", "tempfile", ] @@ -7401,8 +6424,8 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.10.0", - "jni-sys 0.3.0", + "bitflags 2.13.0", + "jni-sys", "log", "ndk-sys", "num_enum", @@ -7422,7 +6445,7 @@ version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ - "jni-sys 0.3.0", + "jni-sys", ] [[package]] @@ -7437,7 +6460,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22f9786d56d972959e1408b6a93be6af13b9c1392036c5c1fafa08a1b0c6ee87" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "byteorder", "derive_builder", "getset", @@ -7591,6 +6614,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "nonany" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b8866ec53810a9a4b3d434a29801e78c707430a9ae11c2db4b8b62bb9675a0" + [[package]] name = "noop_proc_macro" version = "0.3.0" @@ -7683,6 +6712,32 @@ dependencies = [ "tracing", ] +[[package]] +name = "notify" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" +dependencies = [ + "bitflags 2.13.0", + "inotify", + "kqueue", + "libc", + "log", + "mio 1.1.1", + "notify-types", + "walkdir", + "windows-sys 0.60.2", +] + +[[package]] +name = "notify-types" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" +dependencies = [ + "bitflags 2.13.0", +] + [[package]] name = "ntapi" version = "0.4.2" @@ -7873,1341 +6928,6 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "nym-api-requests" -version = "1.21.1" -dependencies = [ - "bs58 0.5.1", - "celes", - "cosmrs", - "cosmwasm-std", - "ecdsa", - "hex", - "humantime-serde", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-signer-check-types", - "nym-ecash-time", - "nym-kkt-ciphersuite", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-node-requests", - "nym-noise-keys", - "nym-serde-helpers", - "nym-ticketbooks-merkle", - "schemars", - "serde", - "serde_json", - "sha2 0.10.9", - "strum 0.28.0", - "strum_macros 0.28.0", - "tendermint", - "tendermint-rpc", - "thiserror 2.0.18", - "time", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-bandwidth-controller" -version = "1.21.1" -dependencies = [ - "async-trait", - "log", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-task", - "nym-validator-client", - "rand 0.8.6", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-bin-common" -version = "1.21.1" -dependencies = [ - "const-str", - "log", - "schemars", - "serde", - "tracing", - "tracing-subscriber", - "utoipa", - "vergen", -] - -[[package]] -name = "nym-bls12_381-fork" -version = "0.8.0-forked" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce84633751030f960a2fd167b5270ec21da4c40d9b6400e1b56676a682fe6f3d" -dependencies = [ - "digest 0.10.7", - "ff", - "group", - "pairing", - "rand_core 0.6.4", - "serde", - "serdect 0.3.0", - "subtle 2.6.1", - "zeroize", -] - -[[package]] -name = "nym-client-core" -version = "1.21.1" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bs58 0.5.1", - "cfg-if 1.0.4", - "futures 0.3.31", - "getrandom 0.3.3", - "gloo-timers", - "http-body-util", - "humantime", - "hyper 1.8.1", - "hyper-util", - "nym-bandwidth-controller", - "nym-client-core-config-types", - "nym-client-core-gateways-storage", - "nym-client-core-surb-storage", - "nym-credential-storage", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-time", - "nym-gateway-client", - "nym-gateway-requests", - "nym-http-api-client", - "nym-id", - "nym-mixnet-client", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-nonexhaustive-delayqueue", - "nym-pemstore", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "nym-wasm-utils", - "rand 0.8.6", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "tokio-stream", - "tokio-tungstenite 0.20.1", - "tokio_with_wasm", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-client-core-config-types" -version = "1.21.1" -dependencies = [ - "humantime-serde", - "nym-config", - "nym-pemstore", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-statistics-common", - "serde", - "thiserror 2.0.18", - "url", -] - -[[package]] -name = "nym-client-core-gateways-storage" -version = "1.21.1" -dependencies = [ - "anyhow", - "async-trait", - "nym-crypto", - "nym-gateway-client", - "nym-gateway-requests", - "serde", - "sqlx", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "nym-client-core-surb-storage" -version = "1.21.1" -dependencies = [ - "anyhow", - "async-trait", - "dashmap", - "nym-crypto", - "nym-sphinx", - "nym-sqlx-pool-guard", - "nym-task", - "sqlx", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "tracing", -] - -[[package]] -name = "nym-coconut-dkg-common" -version = "1.21.1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw2", - "cw4", - "nym-contracts-common", - "nym-multisig-contract-common", -] - -[[package]] -name = "nym-common" -version = "1.21.1" -dependencies = [ - "tracing", - "tracing-test", -] - -[[package]] -name = "nym-compact-ecash" -version = "1.21.1" -dependencies = [ - "bincode", - "bs58 0.5.1", - "cfg-if 1.0.4", - "digest 0.10.7", - "ff", - "group", - "itertools 0.14.0", - "nym-bls12_381-fork", - "nym-network-defaults", - "nym-pemstore", - "rand 0.8.6", - "serde", - "sha2 0.10.9", - "subtle 2.6.1", - "thiserror 2.0.18", - "zeroize", -] - -[[package]] -name = "nym-config" -version = "1.21.1" -dependencies = [ - "dirs 6.0.0", - "handlebars", - "log", - "nym-network-defaults", - "serde", - "thiserror 2.0.18", - "toml 0.8.23", - "url", -] - -[[package]] -name = "nym-contracts-common" -version = "1.21.1" -dependencies = [ - "bs58 0.5.1", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars", - "serde", - "thiserror 2.0.18", - "vergen", -] - -[[package]] -name = "nym-credential-storage" -version = "1.21.1" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "log", - "nym-compact-ecash", - "nym-credentials", - "nym-ecash-time", - "nym-sqlx-pool-guard", - "serde", - "sqlx", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "zeroize", -] - -[[package]] -name = "nym-credential-utils" -version = "1.21.1" -dependencies = [ - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-ecash-time", - "nym-validator-client", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", -] - -[[package]] -name = "nym-credentials" -version = "1.21.1" -dependencies = [ - "bincode", - "cosmrs", - "log", - "nym-api-requests", - "nym-bls12_381-fork", - "nym-credentials-interface", - "nym-crypto", - "nym-ecash-contract-common", - "nym-ecash-time", - "nym-http-api-client", - "nym-network-defaults", - "nym-serde-helpers", - "nym-validator-client", - "serde", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-credentials-interface" -version = "1.21.1" -dependencies = [ - "nym-bls12_381-fork", - "nym-compact-ecash", - "nym-ecash-time", - "nym-network-defaults", - "nym-upgrade-mode-check", - "rand 0.8.6", - "serde", - "strum 0.28.0", - "strum_macros 0.28.0", - "thiserror 2.0.18", - "time", - "utoipa", -] - -[[package]] -name = "nym-crypto" -version = "1.21.1" -dependencies = [ - "aead 0.5.2", - "aes 0.8.4", - "aes-gcm-siv", - "base64 0.22.1", - "blake3", - "bs58 0.5.1", - "cipher 0.4.4", - "ctr", - "curve25519-dalek 4.1.3", - "digest 0.10.7", - "ed25519-dalek 2.2.0", - "generic-array 0.14.7", - "hkdf 0.12.4", - "hmac 0.12.1", - "jwt-simple", - "libcrux-curve25519", - "libcrux-psq", - "nym-pemstore", - "nym-sphinx-types", - "rand 0.8.6", - "rand 0.9.2", - "serde", - "serde_bytes", - "sha2 0.10.9", - "subtle-encoding", - "thiserror 2.0.18", - "x25519-dalek 2.0.1", - "zeroize", -] - -[[package]] -name = "nym-ecash-contract-common" -version = "1.21.1" -dependencies = [ - "bs58 0.5.1", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "nym-multisig-contract-common", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-ecash-signer-check-types" -version = "1.21.1" -dependencies = [ - "nym-coconut-dkg-common", - "nym-crypto", - "semver", - "serde", - "thiserror 2.0.18", - "time", - "tracing", - "url", - "utoipa", -] - -[[package]] -name = "nym-ecash-time" -version = "1.21.1" -dependencies = [ - "nym-compact-ecash", - "time", -] - -[[package]] -name = "nym-exit-policy" -version = "1.21.1" -dependencies = [ - "serde", - "serde_json", - "thiserror 2.0.18", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-gateway-client" -version = "1.21.1" -dependencies = [ - "futures 0.3.31", - "getrandom 0.2.17", - "gloo-utils", - "nym-bandwidth-controller", - "nym-credential-storage", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "nym-validator-client", - "nym-wasm-utils", - "rand 0.8.6", - "serde", - "si-scale", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "tokio-stream", - "tokio-tungstenite 0.20.1", - "tracing", - "tungstenite 0.20.1", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-gateway-requests" -version = "1.21.1" -dependencies = [ - "bs58 0.5.1", - "futures 0.3.31", - "generic-array 0.14.7", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-pemstore", - "nym-serde-helpers", - "nym-sphinx", - "nym-statistics-common", - "nym-task", - "rand 0.8.6", - "serde", - "serde_json", - "strum 0.28.0", - "subtle 2.6.1", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "tracing", - "tungstenite 0.20.1", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-group-contract-common" -version = "1.21.1" -dependencies = [ - "cosmwasm-schema", - "cw-controllers", - "cw4", - "schemars", - "serde", -] - -[[package]] -name = "nym-http-api-client" -version = "1.21.1" -dependencies = [ - "async-trait", - "bincode", - "bytes 1.11.1", - "cfg-if 1.0.4", - "encoding_rs", - "fastrand", - "hickory-resolver", - "http 1.4.0", - "inventory", - "itertools 0.14.0", - "mime", - "nym-bin-common", - "nym-http-api-client-macro", - "nym-http-api-common", - "nym-network-defaults", - "once_cell", - "reqwest 0.13.4", - "rustls 0.23.40", - "serde", - "serde_json", - "serde_plain", - "serde_yaml", - "thiserror 2.0.18", - "tokio 1.49.0", - "tracing", - "url", - "wasmtimer", - "webpki-roots 0.26.11", -] - -[[package]] -name = "nym-http-api-client-macro" -version = "1.21.1" -dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", - "uuid 1.20.0", -] - -[[package]] -name = "nym-http-api-common" -version = "1.21.1" -dependencies = [ - "bincode", - "serde", - "serde_json", - "tracing", -] - -[[package]] -name = "nym-id" -version = "1.21.1" -dependencies = [ - "nym-credential-storage", - "nym-credentials", - "thiserror 2.0.18", - "time", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-ip-packet-requests" -version = "1.21.1" -dependencies = [ - "bincode", - "bytes 1.11.1", - "nym-bin-common", - "nym-crypto", - "nym-service-provider-requests-common", - "nym-sphinx", - "rand 0.8.6", - "semver", - "serde", - "thiserror 2.0.18", - "time", - "tokio-util 0.7.18", - "tracing", -] - -[[package]] -name = "nym-kkt-ciphersuite" -version = "1.21.1" -dependencies = [ - "num_enum", - "semver", - "strum 0.28.0", - "strum_macros 0.28.0", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-lp-data" -version = "1.21.1" -dependencies = [ - "bytes 1.11.1", - "num_enum", - "nym-common", - "thiserror 2.0.18", - "tracing", -] - -[[package]] -name = "nym-metrics" -version = "1.21.1" -dependencies = [ - "dashmap", - "lazy_static", - "prometheus", - "tracing", -] - -[[package]] -name = "nym-mixnet-client" -version = "1.21.1" -dependencies = [ - "dashmap", - "futures 0.3.31", - "nym-metrics", - "nym-noise", - "nym-sphinx", - "nym-task", - "strum 0.28.0", - "tokio 1.49.0", - "tokio-stream", - "tokio-util 0.7.18", - "tracing", -] - -[[package]] -name = "nym-mixnet-contract-common" -version = "1.21.1" -dependencies = [ - "bs58 0.5.1", - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-storage-plus", - "humantime-serde", - "nym-contracts-common", - "schemars", - "semver", - "serde", - "serde_repr", - "thiserror 2.0.18", - "time", - "utoipa", -] - -[[package]] -name = "nym-multisig-contract-common" -version = "1.21.1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "cw3", - "cw4", - "schemars", - "serde", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-network-defaults" -version = "1.21.1" -dependencies = [ - "cargo_metadata 0.19.2", - "dotenvy", - "regex", - "schemars", - "serde", - "serde_json", - "tracing", - "url", - "utoipa", -] - -[[package]] -name = "nym-network-monitors-contract-common" -version = "1.21.1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "schemars", - "serde", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-node-families-contract-common" -version = "1.21.1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "nym-contracts-common", - "nym-mixnet-contract-common", - "schemars", - "serde", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-node-requests" -version = "1.21.1" -dependencies = [ - "celes", - "humantime-serde", - "nym-bin-common", - "nym-crypto", - "nym-exit-policy", - "nym-kkt-ciphersuite", - "nym-noise-keys", - "nym-upgrade-mode-check", - "nym-wireguard-types", - "schemars", - "serde", - "serde_json", - "strum 0.28.0", - "strum_macros 0.28.0", - "thiserror 2.0.18", - "time", - "url", - "utoipa", -] - -[[package]] -name = "nym-noise" -version = "1.21.1" -dependencies = [ - "arc-swap", - "bytes 1.11.1", - "futures 0.3.31", - "nym-crypto", - "nym-noise-keys", - "pin-project", - "sha2 0.10.9", - "snow", - "strum 0.28.0", - "strum_macros 0.28.0", - "thiserror 2.0.18", - "tokio 1.49.0", - "tokio-util 0.7.18", - "tracing", -] - -[[package]] -name = "nym-noise-keys" -version = "1.21.1" -dependencies = [ - "nym-crypto", - "schemars", - "serde", - "utoipa", -] - -[[package]] -name = "nym-nonexhaustive-delayqueue" -version = "1.21.1" -dependencies = [ - "tokio 1.49.0", - "tokio-stream", - "tokio-util 0.7.18", - "wasmtimer", -] - -[[package]] -name = "nym-ordered-buffer" -version = "1.21.1" -dependencies = [ - "log", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-outfox" -version = "1.21.1" -dependencies = [ - "blake3", - "chacha20 0.9.1", - "chacha20poly1305 0.10.1", - "sphinx-packet", - "thiserror 2.0.18", - "x25519-dalek 2.0.1", - "zeroize", -] - -[[package]] -name = "nym-pemstore" -version = "1.21.1" -dependencies = [ - "pem", - "tracing", - "zeroize", -] - -[[package]] -name = "nym-performance-contract-common" -version = "1.21.1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "nym-contracts-common", - "schemars", - "serde", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-sdk" -version = "1.21.1" -dependencies = [ - "anyhow", - "async-trait", - "bincode", - "bip39", - "bytecodec", - "bytes 1.11.1", - "clap", - "dashmap", - "dirs 6.0.0", - "futures 0.3.31", - "http 1.4.0", - "httpcodec", - "log", - "nym-bandwidth-controller", - "nym-bin-common", - "nym-client-core", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials", - "nym-credentials-interface", - "nym-crypto", - "nym-gateway-requests", - "nym-http-api-client", - "nym-ip-packet-requests", - "nym-lp-data", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-client-core", - "nym-socks5-requests", - "nym-sphinx", - "nym-sphinx-addressing", - "nym-statistics-common", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.8.6", - "semver", - "serde", - "tap", - "tempfile", - "thiserror 2.0.18", - "tokio 1.49.0", - "tokio-stream", - "tokio-util 0.7.18", - "toml 0.8.23", - "tracing", - "tracing-subscriber", - "url", - "uuid 1.20.0", - "zeroize", -] - -[[package]] -name = "nym-serde-helpers" -version = "1.21.1" -dependencies = [ - "base64 0.22.1", - "bs58 0.5.1", - "hex", - "serde", - "time", -] - -[[package]] -name = "nym-service-provider-requests-common" -version = "1.21.1" -dependencies = [ - "serde", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-service-providers-common" -version = "1.21.1" -dependencies = [ - "async-trait", - "log", - "nym-bin-common", - "nym-sphinx-anonymous-replies", - "serde", - "serde_json", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-socks5-client-core" -version = "1.21.1" -dependencies = [ - "anyhow", - "dirs 6.0.0", - "futures 0.3.31", - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-contracts-common", - "nym-credential-storage", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-validator-client", - "pin-project", - "rand 0.8.6", - "reqwest 0.13.4", - "schemars", - "serde", - "tap", - "thiserror 2.0.18", - "tokio 1.49.0", - "url", -] - -[[package]] -name = "nym-socks5-proxy-helpers" -version = "1.21.1" -dependencies = [ - "bytes 1.11.1", - "futures 0.3.31", - "log", - "nym-ordered-buffer", - "nym-socks5-requests", - "nym-task", - "tokio 1.49.0", - "tokio-util 0.7.18", -] - -[[package]] -name = "nym-socks5-requests" -version = "1.21.1" -dependencies = [ - "bincode", - "log", - "nym-exit-policy", - "nym-service-providers-common", - "nym-sphinx-addressing", - "serde", - "serde_json", - "tap", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-sphinx" -version = "1.21.1" -dependencies = [ - "nym-crypto", - "nym-metrics", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-chunking", - "nym-sphinx-cover", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.6", - "rand_chacha 0.3.1", - "rand_distr", - "thiserror 2.0.18", - "tokio 1.49.0", - "tracing", -] - -[[package]] -name = "nym-sphinx-acknowledgements" -version = "1.21.1" -dependencies = [ - "nym-crypto", - "nym-pemstore", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.6", - "thiserror 2.0.18", - "zeroize", -] - -[[package]] -name = "nym-sphinx-addressing" -version = "1.21.1" -dependencies = [ - "nym-crypto", - "nym-sphinx-types", - "serde", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-sphinx-anonymous-replies" -version = "1.21.1" -dependencies = [ - "bs58 0.5.1", - "nym-crypto", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.6", - "thiserror 2.0.18", - "tracing", - "wasm-bindgen", -] - -[[package]] -name = "nym-sphinx-chunking" -version = "1.21.1" -dependencies = [ - "dashmap", - "log", - "nym-crypto", - "nym-metrics", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-types", - "rand 0.8.6", - "serde", - "thiserror 2.0.18", - "utoipa", - "wasmtimer", -] - -[[package]] -name = "nym-sphinx-cover" -version = "1.21.1" -dependencies = [ - "nym-crypto", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-chunking", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.8.6", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-sphinx-forwarding" -version = "1.21.1" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-params", - "nym-sphinx-types", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-sphinx-framing" -version = "1.21.1" -dependencies = [ - "bytes 1.11.1", - "cfg-if 1.0.4", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-types", - "thiserror 2.0.18", - "tokio-util 0.7.18", - "tracing", -] - -[[package]] -name = "nym-sphinx-params" -version = "1.21.1" -dependencies = [ - "nym-crypto", - "nym-sphinx-types", - "serde", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-sphinx-routing" -version = "1.21.1" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-types", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-sphinx-types" -version = "1.21.1" -dependencies = [ - "nym-outfox", - "sphinx-packet", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-sqlx-pool-guard" -version = "1.21.1" -dependencies = [ - "proc_pidinfo", - "sqlx", - "tokio 1.49.0", - "tracing", - "windows 0.61.3", -] - -[[package]] -name = "nym-statistics-common" -version = "1.21.1" -dependencies = [ - "futures 0.3.31", - "log", - "nym-credentials-interface", - "nym-crypto", - "nym-metrics", - "nym-sphinx", - "nym-task", - "serde", - "serde_json", - "sha2 0.10.9", - "si-scale", - "strum 0.28.0", - "strum_macros 0.28.0", - "sysinfo 0.38.4", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "wasmtimer", -] - -[[package]] -name = "nym-task" -version = "1.21.1" -dependencies = [ - "cfg-if 1.0.4", - "futures 0.3.31", - "log", - "thiserror 2.0.18", - "tokio 1.49.0", - "tokio-util 0.7.18", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasmtimer", -] - -[[package]] -name = "nym-ticketbooks-merkle" -version = "1.21.1" -dependencies = [ - "nym-credentials-interface", - "nym-serde-helpers", - "rs_merkle", - "schemars", - "serde", - "sha2 0.10.9", - "time", - "utoipa", -] - -[[package]] -name = "nym-topology" -version = "1.21.1" -dependencies = [ - "async-trait", - "nym-api-requests", - "nym-crypto", - "nym-mixnet-contract-common", - "nym-sphinx-addressing", - "nym-sphinx-types", - "rand 0.8.6", - "reqwest 0.13.4", - "serde", - "serde_json", - "thiserror 2.0.18", - "time", - "tracing", -] - -[[package]] -name = "nym-upgrade-mode-check" -version = "1.21.1" -dependencies = [ - "jwt-simple", - "nym-crypto", - "nym-http-api-client", - "reqwest 0.13.4", - "serde", - "serde_json", - "thiserror 2.0.18", - "time", - "tracing", - "utoipa", -] - -[[package]] -name = "nym-validator-client" -version = "1.21.1" -dependencies = [ - "async-trait", - "base64 0.22.1", - "bip32", - "bip39", - "colored", - "cosmrs", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "cw3", - "cw4", - "eyre", - "flate2", - "futures 0.3.31", - "itertools 0.14.0", - "nym-api-requests", - "nym-coconut-dkg-common", - "nym-compact-ecash", - "nym-config", - "nym-contracts-common", - "nym-ecash-contract-common", - "nym-group-contract-common", - "nym-http-api-client", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-network-defaults", - "nym-network-monitors-contract-common", - "nym-node-families-contract-common", - "nym-performance-contract-common", - "nym-serde-helpers", - "nym-vesting-contract-common", - "prost", - "reqwest 0.13.4", - "serde", - "serde_json", - "sha2 0.10.9", - "tendermint-rpc", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "tracing", - "url", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-vesting-contract-common" -version = "1.21.1" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "nym-contracts-common", - "nym-mixnet-contract-common", - "serde", - "thiserror 2.0.18", -] - -[[package]] -name = "nym-wasm-utils" -version = "1.21.1" -dependencies = [ - "futures 0.3.31", - "getrandom 0.2.17", - "gloo-net", - "gloo-utils", - "js-sys", - "tungstenite 0.20.1", - "wasm-bindgen", - "wasm-bindgen-futures", -] - -[[package]] -name = "nym-wireguard-types" -version = "1.21.1" -dependencies = [ - "base64 0.22.1", - "nym-crypto", - "serde", - "thiserror 2.0.18", - "x25519-dalek 2.0.1", - "zeroize", -] - [[package]] name = "objc" version = "0.2.7" @@ -9249,7 +6969,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -9265,7 +6985,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.6.2", "objc2 0.6.3", "objc2-core-foundation", @@ -9279,7 +6999,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -9303,7 +7023,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -9315,7 +7035,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "dispatch2", "objc2 0.6.3", ] @@ -9326,7 +7046,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "dispatch2", "objc2 0.6.3", "objc2-core-foundation", @@ -9369,7 +7089,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.5.1", "dispatch", "libc", @@ -9382,7 +7102,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -9403,7 +7123,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -9426,7 +7146,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -9438,7 +7158,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -9461,7 +7181,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit", @@ -9493,7 +7213,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -9523,10 +7243,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" @@ -9534,6 +7250,15 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "oneshot-fused-workaround" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17b52d0e4a06a4c7eb8d2943c0015fa628cf4ccc409429cebc0f5bed6d33a82" +dependencies = [ + "futures 0.3.31", +] + [[package]] name = "opaque-debug" version = "0.2.3" @@ -9552,7 +7277,7 @@ version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "cfg-if 1.0.4", "foreign-types 0.3.2", "libc", @@ -9578,12 +7303,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" -[[package]] -name = "openssl-probe" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" - [[package]] name = "openssl-src" version = "300.6.1+3.6.3" @@ -9659,6 +7378,15 @@ dependencies = [ "pin-project-lite 0.2.16", ] +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" +dependencies = [ + "memchr", +] + [[package]] name = "owned_ttf_parser" version = "0.25.1" @@ -9692,6 +7420,20 @@ dependencies = [ "sha2 0.10.9", ] +[[package]] +name = "p521" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" +dependencies = [ + "base16ct", + "ecdsa", + "elliptic-curve", + "primeorder", + "rand_core 0.6.4", + "sha2 0.10.9", +] + [[package]] name = "page_size" version = "0.6.0" @@ -9702,15 +7444,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "pairing" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" -dependencies = [ - "group", -] - [[package]] name = "parking" version = "2.2.1" @@ -9772,7 +7505,7 @@ checksum = "c1a5d4e9c205d2c1ae73b84aab6240e98218c0e72e63b50422cfb2d1ca952282" dependencies = [ "base64ct", "rand_core 0.6.4", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -9783,7 +7516,7 @@ checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ "base64ct", "rand_core 0.6.4", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -9798,12 +7531,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" -[[package]] -name = "pastey" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" - [[package]] name = "pbkdf2" version = "0.8.0" @@ -9811,7 +7538,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" dependencies = [ "base64ct", - "crypto-mac 0.11.0", + "crypto-mac", "hmac 0.11.0", "password-hash 0.2.1", "sha2 0.9.9", @@ -9842,44 +7569,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" -[[package]] -name = "peg" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aad070be5b63aa72103f2fcdd70a83adbd5e90112ce5b574171ff1c65501773" -dependencies = [ - "peg-macros", - "peg-runtime", -] - -[[package]] -name = "peg-macros" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd8ef6825cae95355031ae26a99b616a2a21f22ba2de0197c43dfb05acbe7ee" -dependencies = [ - "peg-runtime", - "proc-macro2 1.0.106", - "quote 1.0.44", -] - -[[package]] -name = "peg-runtime" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7011d97b484a5ebdc4b1fdb3b12d5e4bbbea56e9d22b688f2e79e04b65a7d8a6" - -[[package]] -name = "pem" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" -dependencies = [ - "base64 0.13.1", - "once_cell", - "regex", -] - [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -9895,49 +7584,6 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "pest" -version = "2.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" -dependencies = [ - "memchr", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", -] - -[[package]] -name = "pest_meta" -version = "2.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" -dependencies = [ - "pest", - "sha2 0.10.9", -] - [[package]] name = "phf" version = "0.11.3" @@ -10086,9 +7732,9 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ - "der 0.7.10", - "pkcs8 0.10.2", - "spki 0.7.3", + "der", + "pkcs8", + "spki", ] [[package]] @@ -10097,18 +7743,8 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.10", - "spki 0.7.3", -] - -[[package]] -name = "pkcs8" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" -dependencies = [ - "der 0.8.0", - "spki 0.8.0", + "der", + "spki", ] [[package]] @@ -10136,7 +7772,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "crc32fast", "fdeflate", "flate2", @@ -10185,18 +7821,6 @@ dependencies = [ "universal-hash 0.5.1", ] -[[package]] -name = "polyval" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" -dependencies = [ - "cfg-if 1.0.4", - "cpufeatures 0.2.17", - "opaque-debug 0.3.1", - "universal-hash 0.5.1", -] - [[package]] name = "portable-atomic" version = "1.13.1" @@ -10212,6 +7836,21 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "postage" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af3fb618632874fb76937c2361a7f22afd393c982a2165595407edc75b06d3c1" +dependencies = [ + "atomic 0.5.3", + "crossbeam-queue", + "futures 0.3.31", + "parking_lot 0.12.5", + "pin-project", + "static_assertions", + "thiserror 1.0.69", +] + [[package]] name = "potential_utf" version = "0.1.4" @@ -10236,17 +7875,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prefix-trie" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf6e3177f0684016a5c209b00882e15f8bdd3f3bb48f0491df10cd102d0c6e7" -dependencies = [ - "either", - "ipnet", - "num-traits 0.2.19", -] - [[package]] name = "presser" version = "0.3.1" @@ -10286,6 +7914,17 @@ dependencies = [ "elliptic-curve", ] +[[package]] +name = "priority-queue" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93980406f12d9f8140ed5abe7155acb10bb1e69ea55c88960b9c2f117445ef96" +dependencies = [ + "equivalent", + "indexmap 2.13.0", + "serde", +] + [[package]] name = "proc-macro-crate" version = "3.4.0" @@ -10359,15 +7998,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "proc_pidinfo" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29492a7b48a00ab80202528e235d2f80a04ccff3747540b4ec6881f2f2bc42d1" -dependencies = [ - "libc", -] - [[package]] name = "profiling" version = "1.0.17" @@ -10388,63 +8018,17 @@ dependencies = [ ] [[package]] -name = "prometheus" -version = "0.14.0" +name = "pwd-grp" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" +checksum = "0e2023f41b5fcb7c30eb5300a5733edfaa9e0e0d502d51b586f65633fd39e40c" dependencies = [ - "cfg-if 1.0.4", - "fnv", - "lazy_static", - "memchr", - "parking_lot 0.12.5", - "protobuf", + "derive-deftly", + "libc", + "paste", "thiserror 2.0.18", ] -[[package]] -name = "prost" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes 1.11.1", - "prost-derive", -] - -[[package]] -name = "prost-derive" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" -dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", -] - -[[package]] -name = "protobuf" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror 1.0.69", -] - -[[package]] -name = "protobuf-support" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" -dependencies = [ - "thiserror 1.0.69", -] - [[package]] name = "pxfm" version = "0.1.27" @@ -10500,62 +8084,6 @@ dependencies = [ "serde", ] -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes 1.11.1", - "cfg_aliases", - "pin-project-lite 0.2.16", - "quinn-proto", - "quinn-udp", - "rustc-hash 2.1.1", - "rustls 0.23.40", - "socket2 0.6.2", - "thiserror 2.0.18", - "tokio 1.49.0", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" -dependencies = [ - "aws-lc-rs", - "bytes 1.11.1", - "getrandom 0.3.3", - "lru-slab", - "rand 0.9.2", - "ring 0.17.14", - "rustc-hash 2.1.1", - "rustls 0.23.40", - "rustls-pki-types", - "slab", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2 0.6.2", - "tracing", - "windows-sys 0.60.2", -] - [[package]] name = "quote" version = "0.6.13" @@ -10580,6 +8108,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.5.6" @@ -10605,7 +8139,7 @@ dependencies = [ "rand_core 0.4.2", "rand_hc 0.1.0", "rand_isaac", - "rand_jitter", + "rand_jitter 0.1.4", "rand_os", "rand_pcg", "rand_xorshift", @@ -10697,6 +8231,16 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "rand_chacha" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e6af7f3e25ded52c41df4e0b1af2d047e45896c2f3281792ed68a1c243daedb" +dependencies = [ + "ppv-lite86", + "rand_core 0.10.1", +] + [[package]] name = "rand_core" version = "0.3.1" @@ -10745,16 +8289,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits 0.2.19", - "rand 0.8.6", -] - [[package]] name = "rand_hc" version = "0.1.0" @@ -10793,6 +8327,17 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "rand_jitter" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdcd80e68f0a8f9ca5ec7cfd02fd5fbb8fbe6ef4e9b90ea2f48bb929b74f88e" +dependencies = [ + "libc", + "rand_core 0.10.1", + "windows-sys 0.59.0", +] + [[package]] name = "rand_os" version = "0.1.3" @@ -10803,7 +8348,7 @@ dependencies = [ "fuchsia-cprng", "libc", "rand_core 0.4.2", - "rdrand", + "rdrand 0.4.0", "winapi 0.3.9", ] @@ -10926,6 +8471,15 @@ dependencies = [ "rand_core 0.3.1", ] +[[package]] +name = "rdrand" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92195228612ac8eed47adbc2ed0f04e513a4ccb98175b6f2bd04d963b533655" +dependencies = [ + "rand_core 0.6.4", +] + [[package]] name = "recvmsg" version = "1.0.0" @@ -10953,7 +8507,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", ] [[package]] @@ -10962,7 +8516,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", ] [[package]] @@ -10987,6 +8541,26 @@ dependencies = [ "thiserror 2.0.18", ] +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 2.0.114", +] + [[package]] name = "regex" version = "1.12.3" @@ -11059,93 +8633,18 @@ dependencies = [ "wasm-bindgen-futures", "web-sys", "webpki-roots 0.20.0", - "winreg 0.7.0", + "winreg", ] [[package]] -name = "reqwest" -version = "0.11.27" +name = "reseeding_rng" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "ecfc8e855ab517235426ec1290bfb0745e73fa478b29619eb66a2a81be9d8716" dependencies = [ - "base64 0.21.7", - "bytes 1.11.1", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite 0.2.16", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration 0.5.1", - "tokio 1.49.0", - "tokio-rustls 0.24.1", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg 0.50.0", + "rand_core 0.10.1", ] -[[package]] -name = "reqwest" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" -dependencies = [ - "base64 0.22.1", - "bytes 1.11.1", - "futures-core", - "http 1.4.0", - "http-body 1.0.1", - "http-body-util", - "hyper 1.8.1", - "hyper-rustls 0.27.9", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite 0.2.16", - "quinn", - "rustls 0.23.40", - "rustls-pki-types", - "rustls-platform-verifier", - "serde", - "serde_json", - "sync_wrapper 1.0.2", - "tokio 1.49.0", - "tokio-rustls 0.26.4", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "resolv-conf" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" - [[package]] name = "resvg" version = "0.45.1" @@ -11160,6 +8659,16 @@ dependencies = [ "usvg", ] +[[package]] +name = "retry-error" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf6aa271ee564cc5d1df57c5cf7c6ac7a21a4f9f40d2bf1d32bf0a1bb3ddaeb0" +dependencies = [ + "humantime", + "web-time", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -11167,7 +8676,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ "hmac 0.12.1", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -11235,15 +8744,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "ripemd160" version = "0.9.1" @@ -11262,8 +8762,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f67a9dbc634fcd36a2d1d800ca818065dcf71a1d907dc35130c2d1552c6e1dc" dependencies = [ "arrayref", - "bincode", - "bitflags 2.10.0", + "bincode 1.3.3", + "bitflags 2.13.0", "id-arena", "lazy_static", "log", @@ -11275,25 +8775,6 @@ dependencies = [ "uuid 1.20.0", ] -[[package]] -name = "rmp" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba8be72d372b2c9b35542551678538b562e7cf86c3315773cae48dfbfe7790c" -dependencies = [ - "num-traits 0.2.19", -] - -[[package]] -name = "rmp-serde" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f81bee8c8ef9b577d1681a70ebbc962c232461e397b22c208c43c04b67a155" -dependencies = [ - "rmp", - "serde", -] - [[package]] name = "roxmltree" version = "0.20.0" @@ -11311,15 +8792,6 @@ dependencies = [ "lru", ] -[[package]] -name = "rs_merkle" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb09b49230ba22e8c676e7b75dfe2887dea8121f18b530ae0ba519ce442d2b21" -dependencies = [ - "sha2 0.10.9", -] - [[package]] name = "rsa" version = "0.9.10" @@ -11332,15 +8804,41 @@ dependencies = [ "num-integer", "num-traits 0.2.19", "pkcs1", - "pkcs8 0.10.2", + "pkcs8", "rand_core 0.6.4", "sha2 0.10.9", "signature 2.2.0", - "spki 0.7.3", - "subtle 2.6.1", + "spki", + "subtle", "zeroize", ] +[[package]] +name = "rsqlite-vfs" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c" +dependencies = [ + "hashbrown 0.16.1", + "thiserror 2.0.18", +] + +[[package]] +name = "rusqlite" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2b0146dd9661bf67bb107c0bb2a55064d556eeb3fc314151b957f313bcd4e" +dependencies = [ + "bitflags 2.13.0", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", + "sqlite-wasm-rs", + "time", +] + [[package]] name = "rust-embed" version = "6.8.1" @@ -11456,13 +8954,22 @@ dependencies = [ "semver", ] +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom 7.1.3", +] + [[package]] name = "rustix" version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -11475,7 +8982,7 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -11507,18 +9014,6 @@ dependencies = [ "webpki 0.22.4", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring 0.17.14", - "rustls-webpki 0.101.7", - "sct 0.7.1", -] - [[package]] name = "rustls" version = "0.23.40" @@ -11530,8 +9025,8 @@ dependencies = [ "once_cell", "ring 0.17.14", "rustls-pki-types", - "rustls-webpki 0.103.13", - "subtle 2.6.1", + "rustls-webpki", + "subtle", "zeroize", ] @@ -11541,22 +9036,10 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ - "openssl-probe 0.1.6", + "openssl-probe", "rustls-pemfile", "schannel", - "security-framework 2.11.1", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" -dependencies = [ - "openssl-probe 0.2.1", - "rustls-pki-types", - "schannel", - "security-framework 3.5.1", + "security-framework", ] [[package]] @@ -11574,47 +9057,9 @@ version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ - "web-time", "zeroize", ] -[[package]] -name = "rustls-platform-verifier" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" -dependencies = [ - "core-foundation 0.10.1", - "core-foundation-sys 0.8.7", - "jni 0.22.4", - "log", - "once_cell", - "rustls 0.23.40", - "rustls-native-certs 0.8.4", - "rustls-platform-verifier-android", - "rustls-webpki 0.103.13", - "security-framework 3.5.1", - "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring 0.17.14", - "untrusted 0.9.0", -] - [[package]] name = "rustls-webpki" version = "0.103.13" @@ -11639,7 +9084,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "bytemuck", "core_maths", "log", @@ -11657,6 +9102,19 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" +[[package]] +name = "safelog" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a907e0d82c61b1b06a2030c968eb313dcf432686b77801a26bc4b206f96573" +dependencies = [ + "derive_more", + "educe", + "either", + "fluid-let", + "thiserror 2.0.18", +] + [[package]] name = "safemem" version = "0.3.3" @@ -11690,6 +9148,21 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "sanitize-filename" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc984f4f9ceb736a7bb755c3e3bd17dc56370af2600c9780dcc48c66453da34d" +dependencies = [ + "regex", +] + +[[package]] +name = "saturating-time" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63583a1dd0647d1484228529ab4ecaa874048d2956f117362aa5f5826456230" + [[package]] name = "schannel" version = "0.1.28" @@ -11701,27 +9174,26 @@ dependencies = [ [[package]] name = "schemars" -version = "0.8.22" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" dependencies = [ "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", + "ref-cast", "serde", "serde_json", ] [[package]] -name = "schemars_derive" -version = "0.8.22" +name = "schemars" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "serde_derive_internals", - "syn 2.0.114", + "dyn-clone", + "ref-cast", + "serde", + "serde_json", ] [[package]] @@ -11800,23 +9272,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", - "der 0.7.10", + "der", "generic-array 0.14.7", - "pkcs8 0.10.2", - "serdect 0.2.0", - "subtle 2.6.1", + "pkcs8", + "subtle", "zeroize", ] -[[package]] -name = "secp256k1" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" -dependencies = [ - "secp256k1-sys 0.8.2", -] - [[package]] name = "secp256k1" version = "0.29.1" @@ -11839,15 +9301,6 @@ dependencies = [ "secp256k1-sys 0.11.0", ] -[[package]] -name = "secp256k1-sys" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" -dependencies = [ - "cc", -] - [[package]] name = "secp256k1-sys" version = "0.10.1" @@ -11890,26 +9343,13 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "core-foundation 0.9.4", "core-foundation-sys 0.8.7", "libc", "security-framework-sys", ] -[[package]] -name = "security-framework" -version = "3.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.10.1", - "core-foundation-sys 0.8.7", - "libc", - "security-framework-sys", -] - [[package]] name = "security-framework-sys" version = "2.15.0" @@ -11940,10 +9380,6 @@ name = "semver" version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" -dependencies = [ - "serde", - "serde_core", -] [[package]] name = "serde" @@ -11955,15 +9391,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-json-wasm" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" -dependencies = [ - "serde", -] - [[package]] name = "serde-value" version = "0.7.0" @@ -11974,16 +9401,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_bytes" -version = "0.11.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" -dependencies = [ - "serde", - "serde_core", -] - [[package]] name = "serde_core" version = "1.0.228" @@ -12005,14 +9422,13 @@ dependencies = [ ] [[package]] -name = "serde_derive_internals" -version = "0.29.1" +name = "serde_ignored" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +checksum = "115dffd5f3853e06e746965a20dcbae6ee747ae30b543d91b0e089668bb07798" dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", + "serde", + "serde_core", ] [[package]] @@ -12028,15 +9444,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_plain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" -dependencies = [ - "serde", -] - [[package]] name = "serde_repr" version = "0.1.20" @@ -12078,6 +9485,38 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" +dependencies = [ + "base64 0.22.1", + "bs58 0.5.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.13.0", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" +dependencies = [ + "darling 0.23.0", + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 2.0.114", +] + [[package]] name = "serde_yaml" version = "0.9.34+deprecated" @@ -12091,26 +9530,6 @@ dependencies = [ "unsafe-libyaml", ] -[[package]] -name = "serdect" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" -dependencies = [ - "base16ct", - "serde", -] - -[[package]] -name = "serdect" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" -dependencies = [ - "base16ct", - "serde", -] - [[package]] name = "sha1" version = "0.10.6" @@ -12159,6 +9578,16 @@ dependencies = [ "opaque-debug 0.2.3", ] +[[package]] +name = "sha3" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" +dependencies = [ + "digest 0.10.7", + "keccak 0.1.5", +] + [[package]] name = "sha3" version = "0.11.0" @@ -12178,18 +9607,23 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shellexpand" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32824fab5e16e6c4d86dc1ba84489390419a39f97699852b66480bb87d297ed8" +dependencies = [ + "bstr", + "dirs 6.0.0", + "os_str_bytes", +] + [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "si-scale" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72e7cd0744e007e382ba320435f1ed1ecd709409b4ebd5cfbc843d77b25a8aa" - [[package]] name = "signal-hook-registry" version = "1.4.8" @@ -12216,32 +9650,12 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "signature" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" -dependencies = [ - "digest 0.11.3", - "rand_core 0.10.1", -] - [[package]] name = "simd-adler32" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" -[[package]] -name = "simd_cesu8" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" -dependencies = [ - "rustc_version", - "simdutf8", -] - [[package]] name = "simd_helpers" version = "0.1.0" @@ -12251,12 +9665,6 @@ dependencies = [ "quote 1.0.44", ] -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - [[package]] name = "simplecss" version = "0.2.2" @@ -12290,17 +9698,28 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ + "serde", "version_check", ] +[[package]] +name = "slotmap-careful" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed92816c1fbb29891a525b92d5fa95757c9dee47044f76c8e06ceb1e052a8d64" +dependencies = [ + "paste", + "serde", + "slotmap", + "thiserror 2.0.18", + "void", +] + [[package]] name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -dependencies = [ - "serde", -] [[package]] name = "smithay-client-toolkit" @@ -12308,7 +9727,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "calloop 0.13.0", "calloop-wayland-source 0.3.0", "cursor-icon", @@ -12333,7 +9752,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "calloop 0.14.3", "calloop-wayland-source 0.4.1", "cursor-icon", @@ -12374,52 +9793,6 @@ dependencies = [ "serde", ] -[[package]] -name = "smolmix" -version = "1.21.1" -dependencies = [ - "futures 0.3.31", - "nym-ip-packet-requests", - "nym-sdk", - "smoltcp", - "thiserror 2.0.18", - "tokio 1.49.0", - "tokio-smoltcp", - "tracing", -] - -[[package]] -name = "smoltcp" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb" -dependencies = [ - "bitflags 1.3.2", - "byteorder", - "cfg-if 1.0.4", - "defmt 0.3.100", - "heapless", - "libc", - "log", - "managed", -] - -[[package]] -name = "snow" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" -dependencies = [ - "aes-gcm", - "blake2 0.10.6", - "chacha20poly1305 0.10.1", - "curve25519-dalek 4.1.3", - "rand_core 0.6.4", - "rustc_version", - "sha2 0.10.9", - "subtle 2.6.1", -] - [[package]] name = "socket2" version = "0.3.19" @@ -12451,32 +9824,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "sphinx-packet" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26f0c20d909fdda1c5d0ece3973127ca421984d55b000215df365e93722fc6e" -dependencies = [ - "aes 0.8.4", - "arrayref", - "blake2 0.8.1", - "bs58 0.5.1", - "byteorder", - "chacha", - "ctr", - "curve25519-dalek 4.1.3", - "digest 0.10.7", - "hkdf 0.12.4", - "hmac 0.12.1", - "lioness", - "rand 0.8.6", - "rand_distr", - "sha2 0.10.9", - "subtle 2.6.1", - "x25519-dalek 2.0.1", - "zeroize", -] - [[package]] name = "spin" version = "0.5.2" @@ -12498,7 +9845,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", ] [[package]] @@ -12508,211 +9855,61 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.7.10", + "der", ] [[package]] -name = "spki" -version = "0.8.0" +name = "sqlite-wasm-rs" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" +checksum = "dc3efc0da82635d7e1ced0053bbbfa8c7ab9645d0bf36ceb4f7127bb85315d75" +dependencies = [ + "cc", + "js-sys", + "rsqlite-vfs", + "wasm-bindgen", +] + +[[package]] +name = "ssh-cipher-fork-arti" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "125c5795103fc93fced42d123c8044180afc55469caa1ab56487c3c5543c898d" +dependencies = [ + "cipher 0.4.4", + "ssh-encoding-fork-arti", +] + +[[package]] +name = "ssh-encoding-fork-arti" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0cf03c3a7ea88451ff83a129a79451fd9891d44fc76c25e916a11848b81814c" dependencies = [ "base64ct", - "der 0.8.0", -] - -[[package]] -name = "sqlx" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", -] - -[[package]] -name = "sqlx-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" -dependencies = [ - "base64 0.22.1", - "bytes 1.11.1", - "crc", - "crossbeam-queue", - "either", - "event-listener 5.4.1", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashbrown 0.15.5", - "hashlink", - "indexmap 2.13.0", - "log", - "memchr", - "once_cell", - "percent-encoding", - "rustls 0.23.40", - "serde", - "serde_json", + "pem-rfc7468", "sha2 0.10.9", - "smallvec", - "thiserror 2.0.18", - "time", - "tokio 1.49.0", - "tokio-stream", - "tracing", - "url", - "webpki-roots 0.26.11", ] [[package]] -name = "sqlx-macros" -version = "0.8.6" +name = "ssh-key-fork-arti" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +checksum = "433782176b73ea7907763dc314c4a17438a231864d4aa683ba47c07c1cf0a388" dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "sqlx-core", - "sqlx-macros-core", - "syn 2.0.114", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" -dependencies = [ - "dotenvy", - "either", - "heck 0.5.0", - "hex", - "once_cell", - "proc-macro2 1.0.106", - "quote 1.0.44", - "serde", - "serde_json", - "sha2 0.10.9", - "sqlx-core", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", - "syn 2.0.114", - "tokio 1.49.0", - "url", -] - -[[package]] -name = "sqlx-mysql" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.10.0", - "byteorder", - "bytes 1.11.1", - "crc", - "digest 0.10.7", - "dotenvy", - "either", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "generic-array 0.14.7", - "hex", - "hkdf 0.12.4", - "hmac 0.12.1", - "itoa 1.0.17", - "log", - "md-5", - "memchr", - "once_cell", - "percent-encoding", - "rand 0.8.6", + "num-bigint-dig", + "p256", + "p384", + "p521", + "rand_core 0.6.4", "rsa", - "serde", - "sha1", + "sec1", "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.18", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-postgres" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" -dependencies = [ - "atoi", - "base64 0.22.1", - "bitflags 2.10.0", - "byteorder", - "crc", - "dotenvy", - "etcetera", - "futures-channel", - "futures-core", - "futures-util", - "hex", - "hkdf 0.12.4", - "hmac 0.12.1", - "home", - "itoa 1.0.17", - "log", - "md-5", - "memchr", - "once_cell", - "rand 0.8.6", - "serde", - "serde_json", - "sha2 0.10.9", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror 2.0.18", - "time", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-sqlite" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" -dependencies = [ - "atoi", - "flume", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "libsqlite3-sys", - "log", - "percent-encoding", - "serde", - "serde_urlencoded", - "sqlx-core", - "thiserror 2.0.18", - "time", - "tracing", - "url", + "signature 2.2.0", + "ssh-cipher-fork-arti", + "ssh-encoding-fork-arti", + "subtle", + "zeroize", ] [[package]] @@ -12736,17 +9933,6 @@ dependencies = [ "float-cmp", ] -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - [[package]] name = "strsim" version = "0.10.0" @@ -12798,49 +9984,12 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "subtle-encoding" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" -dependencies = [ - "zeroize", -] - -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - -[[package]] -name = "superboring" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc6310a69b44420f3bf53d518077615b7d466cc57df7a80e404e7feb8c510f7" -dependencies = [ - "aes-gcm", - "aes-keywrap", - "getrandom 0.2.17", - "hmac-sha256", - "hmac-sha512", - "ml-dsa", - "rand 0.8.6", - "rsa", -] - [[package]] name = "svgtypes" version = "0.15.3" @@ -12884,20 +10033,11 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] [[package]] name = "synchronoise" @@ -12957,54 +10097,6 @@ dependencies = [ "windows 0.62.2", ] -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "system-configuration-sys 0.5.0", -] - -[[package]] -name = "system-configuration" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.9.4", - "system-configuration-sys 0.6.0", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys 0.8.7", - "libc", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys 0.8.7", - "libc", -] - -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - [[package]] name = "tap" version = "1.0.1" @@ -13024,98 +10116,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "tendermint" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc997743ecfd4864bbca8170d68d9b2bee24653b034210752c2d883ef4b838b1" -dependencies = [ - "bytes 1.11.1", - "digest 0.10.7", - "ed25519 2.2.3", - "ed25519-consensus", - "flex-error", - "futures 0.3.31", - "k256", - "num-traits 0.2.19", - "once_cell", - "prost", - "ripemd", - "serde", - "serde_bytes", - "serde_json", - "serde_repr", - "sha2 0.10.9", - "signature 2.2.0", - "subtle 2.6.1", - "subtle-encoding", - "tendermint-proto", - "time", - "zeroize", -] - -[[package]] -name = "tendermint-config" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069d1791f9b02a596abcd26eb72003b2e9906c6169a60fa82ffc080dd3a43fda" -dependencies = [ - "flex-error", - "serde", - "serde_json", - "tendermint", - "toml 0.8.23", - "url", -] - -[[package]] -name = "tendermint-proto" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c40e13d39ca19082d8a7ed22de7595979350319833698f8b1080f29620a094" -dependencies = [ - "bytes 1.11.1", - "flex-error", - "prost", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "tendermint-rpc" -version = "0.40.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e0569a4b4cc42ff00df5a665be2858a39ff79df4790b176f1cd0e169bc0fc2" -dependencies = [ - "async-trait", - "bytes 1.11.1", - "flex-error", - "futures 0.3.31", - "getrandom 0.2.17", - "peg", - "pin-project", - "rand 0.8.6", - "reqwest 0.11.27", - "semver", - "serde", - "serde_bytes", - "serde_json", - "subtle 2.6.1", - "subtle-encoding", - "tendermint", - "tendermint-config", - "tendermint-proto", - "thiserror 1.0.69", - "time", - "tokio 1.49.0", - "tracing", - "url", - "uuid 1.20.0", - "walkdir", -] - [[package]] name = "term" version = "0.6.1" @@ -13227,9 +10227,7 @@ checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469" dependencies = [ "deranged", "js-sys", - "libc", "num-conv", - "num_threads", "powerfmt", "serde_core", "time-core", @@ -13313,27 +10311,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" -[[package]] -name = "tls_codec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de2e01245e2bb89d6f05801c564fa27624dbd7b1846859876c7dad82e90bf6b" -dependencies = [ - "tls_codec_derive", - "zeroize", -] - -[[package]] -name = "tls_codec_derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd" -dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", -] - [[package]] name = "tokio" version = "0.2.25" @@ -13440,16 +10417,6 @@ dependencies = [ "webpki 0.22.4", ] -[[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 1.49.0", -] - [[package]] name = "tokio-rustls" version = "0.26.4" @@ -13460,20 +10427,6 @@ dependencies = [ "tokio 1.49.0", ] -[[package]] -name = "tokio-smoltcp" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f5d53da1c3095663a8900d86c2abb0ffe02d3f6aa86527b066148fcb33e65e" -dependencies = [ - "futures 0.3.31", - "parking_lot 0.12.5", - "pin-project-lite 0.2.16", - "smoltcp", - "tokio 1.49.0", - "tokio-util 0.7.18", -] - [[package]] name = "tokio-socks" version = "0.3.0" @@ -13499,18 +10452,6 @@ dependencies = [ "tokio 1.49.0", ] -[[package]] -name = "tokio-stream" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" -dependencies = [ - "futures-core", - "pin-project-lite 0.2.16", - "tokio 1.49.0", - "tokio-util 0.7.18", -] - [[package]] name = "tokio-tls" version = "0.3.1" @@ -13521,21 +10462,6 @@ dependencies = [ "tokio 0.2.25", ] -[[package]] -name = "tokio-tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" -dependencies = [ - "futures-util", - "log", - "rustls 0.21.12", - "tokio 1.49.0", - "tokio-rustls 0.24.1", - "tungstenite 0.20.1", - "webpki-roots 0.25.4", -] - [[package]] name = "tokio-tungstenite" version = "0.26.2" @@ -13548,7 +10474,7 @@ dependencies = [ "rustls-pki-types", "tokio 1.49.0", "tokio-rustls 0.26.4", - "tungstenite 0.26.2", + "tungstenite", "webpki-roots 0.26.11", ] @@ -13588,37 +10514,12 @@ checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes 1.11.1", "futures-core", + "futures-io", "futures-sink", - "futures-util", "pin-project-lite 0.2.16", - "slab", "tokio 1.49.0", ] -[[package]] -name = "tokio_with_wasm" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34e40fbbbd95441133fe9483f522db15dbfd26dc636164ebd8f2dd28759a6aa6" -dependencies = [ - "js-sys", - "tokio 1.49.0", - "tokio_with_wasm_proc", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "tokio_with_wasm_proc" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01145a2c788d6aae4cd653afec1e8332534d7d783d01897cefcafe4428de992" -dependencies = [ - "quote 1.0.44", - "syn 2.0.114", -] - [[package]] name = "toml" version = "0.5.11" @@ -13745,48 +10646,1028 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] -name = "tower" -version = "0.5.3" +name = "tor-async-utils" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +checksum = "27fc83e7539ac5f717b722456df991ca8819782d04f7ae2ee28eefacca030eef" dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite 0.2.16", - "sync_wrapper 1.0.2", - "tokio 1.49.0", - "tower-layer", - "tower-service", + "derive-deftly", + "educe", + "futures 0.3.31", + "oneshot-fused-workaround", + "pin-project", + "postage", + "thiserror 2.0.18", + "void", ] [[package]] -name = "tower-http" -version = "0.6.11" +name = "tor-basic-utils" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +checksum = "7bd01b9947f57a99193547f3a40a0bd179e9a332ead855c07e2fb702a1517f74" +dependencies = [ + "derive_more", + "getrandom 0.4.1", + "hex", + "itertools 0.14.0", + "libc", + "paste", + "rand 0.10.1", + "rand_chacha 0.10.0", + "serde", + "slab", + "smallvec", + "thiserror 2.0.18", + "weak-table", + "web-time-compat", +] + +[[package]] +name = "tor-bytes" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de6a7af55881d599cd48c841916520318d5711df17514001aafd5f796f61e337" +dependencies = [ + "bytes 1.11.1", + "derive-deftly", + "digest 0.10.7", + "educe", + "getrandom 0.4.1", + "safelog", + "thiserror 2.0.18", + "tor-error", + "tor-llcrypto", + "zeroize", +] + +[[package]] +name = "tor-cell" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad292658d194b145aaec268ffb91566b7d96c98971eea4980c1bf951d7d082b" +dependencies = [ + "amplify", + "bitflags 2.13.0", + "bytes 1.11.1", + "caret", + "derive-deftly", + "derive_more", + "educe", + "itertools 0.14.0", + "paste", + "rand 0.10.1", + "smallvec", + "thiserror 2.0.18", + "tor-basic-utils", + "tor-bytes", + "tor-cert", + "tor-error", + "tor-hscrypto", + "tor-linkspec", + "tor-llcrypto", + "tor-memquota", + "tor-protover", + "tor-units", + "void", +] + +[[package]] +name = "tor-cert" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "474e732207b1be44f9ae4ddf295fba3644cd3c09494d131846ff9c9a624ab263" +dependencies = [ + "caret", + "derive_builder_fork_arti", + "derive_more", + "digest 0.10.7", + "thiserror 2.0.18", + "tor-bytes", + "tor-checkable", + "tor-error", + "tor-llcrypto", + "web-time-compat", +] + +[[package]] +name = "tor-chanmgr" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bb088804f54de320ee97dd2a48ae319f0df9d9d0e37eef050d65488194a768" +dependencies = [ + "async-trait", + "base64ct", + "caret", + "cfg-if 1.0.4", + "derive-deftly", + "derive_more", + "educe", + "futures 0.3.31", + "httparse", + "oneshot-fused-workaround", + "percent-encoding", + "postage", + "rand 0.10.1", + "safelog", + "serde", + "serde_with", + "thiserror 2.0.18", + "tor-async-utils", + "tor-basic-utils", + "tor-cell", + "tor-config", + "tor-error", + "tor-keymgr", + "tor-linkspec", + "tor-llcrypto", + "tor-memquota", + "tor-netdir", + "tor-proto", + "tor-rtcompat", + "tor-socksproto", + "tor-units", + "tracing", + "url", + "void", + "web-time-compat", +] + +[[package]] +name = "tor-checkable" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9505791bac25b31b8de88c0e2b02e1690e10ff1308583c6f61c320bab2677959" +dependencies = [ + "humantime", + "signature 2.2.0", + "thiserror 2.0.18", + "tor-llcrypto", + "web-time-compat", +] + +[[package]] +name = "tor-circmgr" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e986c7c4e1faae8a412b575ce66ff087050525a371db1034f0b24d70b459a2e" +dependencies = [ + "amplify", + "async-trait", + "cfg-if 1.0.4", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "downcast-rs 2.0.2", + "dyn-clone", + "educe", + "futures 0.3.31", + "humantime-serde", + "itertools 0.14.0", + "once_cell", + "oneshot-fused-workaround", + "pin-project", + "rand 0.10.1", + "retry-error", + "safelog", + "serde", + "thiserror 2.0.18", + "tor-async-utils", + "tor-basic-utils", + "tor-cell", + "tor-chanmgr", + "tor-config", + "tor-dircommon", + "tor-error", + "tor-guardmgr", + "tor-linkspec", + "tor-memquota", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-protover", + "tor-relay-selection", + "tor-rtcompat", + "tor-units", + "tracing", + "void", + "weak-table", + "web-time-compat", +] + +[[package]] +name = "tor-config" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224f85aa02b514c384ea5ec32f1b924233bea6b553195fd83da7f1e50a2e0d1b" +dependencies = [ + "amplify", + "cfg-if 1.0.4", + "derive-deftly", + "derive_builder_fork_arti", + "educe", + "either", + "figment", + "fs-mistrust", + "futures 0.3.31", + "humantime-serde", + "itertools 0.14.0", + "notify", + "paste", + "postage", + "regex", + "serde", + "serde-value", + "serde_ignored", + "strum 0.28.0", + "thiserror 2.0.18", + "toml 1.0.6+spec-1.1.0", + "tor-basic-utils", + "tor-error", + "tor-rtcompat", + "tracing", + "void", +] + +[[package]] +name = "tor-config-path" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4232a56a8ce40a47ad6b42c9c7d9e6f4485e6e6a43b3149304c35bc295034107" +dependencies = [ + "directories", + "serde", + "shellexpand", + "thiserror 2.0.18", + "tor-error", + "tor-general-addr", +] + +[[package]] +name = "tor-consdiff" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fcd0c631a66b45dca4421b8a06309dd02ae5d6aea5daa55399f68638b2abf3" +dependencies = [ + "derive_more", + "digest 0.10.7", + "hex", + "imara-diff", + "static_assertions", + "thiserror 2.0.18", + "tor-error", + "tor-llcrypto", + "tor-netdoc", +] + +[[package]] +name = "tor-dirclient" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf637d6a5d8c886f23ca2df50edfaa56443f23294428f037206fb3a0d07ba57e" dependencies = [ "async-compression", - "bitflags 2.10.0", - "bytes 1.11.1", - "futures-core", - "futures-util", + "base64ct", + "derive_more", + "futures 0.3.31", + "hex", "http 1.4.0", - "http-body 1.0.1", - "http-body-util", - "pin-project-lite 0.2.16", - "tokio 1.49.0", - "tokio-util 0.7.18", - "tower", - "tower-layer", - "tower-service", - "url", + "httparse", + "httpdate 1.0.3", + "itertools 0.14.0", + "memchr", + "thiserror 2.0.18", + "tor-circmgr", + "tor-error", + "tor-hscrypto", + "tor-linkspec", + "tor-llcrypto", + "tor-netdoc", + "tor-proto", + "tor-rtcompat", + "tracing", + "web-time-compat", ] [[package]] -name = "tower-layer" -version = "0.3.3" +name = "tor-dircommon" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" +checksum = "35e412167d54c3618c3261dc77f1a31fe20c518f59aca5abfdec5f600b6a9b1f" +dependencies = [ + "base64ct", + "derive-deftly", + "getset", + "humantime", + "humantime-serde", + "serde", + "tor-basic-utils", + "tor-checkable", + "tor-config", + "tor-linkspec", + "tor-llcrypto", + "tor-netdoc", + "tracing", +] + +[[package]] +name = "tor-dirmgr" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b984d2b0f0a2764a1b24d7c4c203ef83600b071c0c5af36e20d4f63e80ce562" +dependencies = [ + "async-trait", + "base64ct", + "derive_builder_fork_arti", + "derive_more", + "digest 0.10.7", + "educe", + "event-listener 5.4.1", + "fs-mistrust", + "fslock-guard", + "futures 0.3.31", + "hex", + "humantime", + "humantime-serde", + "itertools 0.14.0", + "memmap2", + "oneshot-fused-workaround", + "paste", + "postage", + "rand 0.10.1", + "rusqlite", + "safelog", + "scopeguard", + "serde", + "serde_json", + "signature 2.2.0", + "static_assertions", + "strum 0.28.0", + "thiserror 2.0.18", + "time", + "tor-async-utils", + "tor-basic-utils", + "tor-checkable", + "tor-circmgr", + "tor-config", + "tor-consdiff", + "tor-dirclient", + "tor-dircommon", + "tor-error", + "tor-guardmgr", + "tor-llcrypto", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-protover", + "tor-rtcompat", + "tracing", + "void", + "web-time-compat", +] + +[[package]] +name = "tor-error" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1409b1a9085502c7797405a01fe3f3292a9827c9ed6a3f7c34fbb222572db5ac" +dependencies = [ + "derive_more", + "futures 0.3.31", + "paste", + "retry-error", + "static_assertions", + "strum 0.28.0", + "thiserror 2.0.18", + "tracing", + "void", + "web-time-compat", +] + +[[package]] +name = "tor-general-addr" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f17e219140e587e169f71f53e528ca394c39e83593c9fbe9e9366cce7655e1" +dependencies = [ + "derive_more", + "thiserror 2.0.18", + "void", +] + +[[package]] +name = "tor-guardmgr" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56c43d7afa526449c6e6460d373a02624a24c78637ddd7c68e2ac1879ae587c" +dependencies = [ + "amplify", + "base64ct", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "dyn-clone", + "educe", + "futures 0.3.31", + "humantime", + "humantime-serde", + "itertools 0.14.0", + "num_enum", + "oneshot-fused-workaround", + "pin-project", + "postage", + "rand 0.10.1", + "safelog", + "serde", + "strum 0.28.0", + "thiserror 2.0.18", + "tor-async-utils", + "tor-basic-utils", + "tor-config", + "tor-dircommon", + "tor-error", + "tor-linkspec", + "tor-llcrypto", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-relay-selection", + "tor-rtcompat", + "tor-units", + "tracing", + "web-time-compat", +] + +[[package]] +name = "tor-hsclient" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff8ba0afebc5f76b42240f76b2bfb92aa5862c19ff184492c59c654750ee275" +dependencies = [ + "async-trait", + "derive-deftly", + "derive_more", + "educe", + "either", + "futures 0.3.31", + "itertools 0.14.0", + "oneshot-fused-workaround", + "postage", + "rand 0.10.1", + "retry-error", + "safelog", + "slotmap-careful", + "strum 0.28.0", + "thiserror 2.0.18", + "tor-async-utils", + "tor-basic-utils", + "tor-bytes", + "tor-cell", + "tor-checkable", + "tor-circmgr", + "tor-config", + "tor-dirclient", + "tor-error", + "tor-hscrypto", + "tor-keymgr", + "tor-linkspec", + "tor-llcrypto", + "tor-memquota", + "tor-netdir", + "tor-netdoc", + "tor-persist", + "tor-proto", + "tor-protover", + "tor-rtcompat", + "tracing", + "web-time-compat", +] + +[[package]] +name = "tor-hscrypto" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3761c1828e74818cba4eb661d1eb79d4f663b05e8e7d3bc6e35d754968282fc0" +dependencies = [ + "data-encoding", + "derive-deftly", + "derive_more", + "digest 0.10.7", + "hex", + "humantime", + "itertools 0.14.0", + "paste", + "rand 0.10.1", + "safelog", + "serde", + "signature 2.2.0", + "subtle", + "thiserror 2.0.18", + "tor-basic-utils", + "tor-bytes", + "tor-error", + "tor-key-forge", + "tor-llcrypto", + "tor-memquota", + "tor-units", + "void", + "web-time-compat", +] + +[[package]] +name = "tor-key-forge" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86c877b95e0679f151743bc2b706320a29e14bd18d9bcb92918df34948e2e9d2" +dependencies = [ + "derive-deftly", + "derive_more", + "downcast-rs 2.0.2", + "paste", + "rand 0.10.1", + "rsa", + "signature 2.2.0", + "ssh-key-fork-arti", + "thiserror 2.0.18", + "tor-bytes", + "tor-cert", + "tor-checkable", + "tor-error", + "tor-llcrypto", +] + +[[package]] +name = "tor-keymgr" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f59fbec28e31d688822b4c00a6f7fd94539886baccd3ce1b35dc26699c37873" +dependencies = [ + "amplify", + "arrayvec 0.7.6", + "cfg-if 1.0.4", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "downcast-rs 2.0.2", + "dyn-clone", + "fs-mistrust", + "glob-match", + "humantime", + "inventory", + "itertools 0.14.0", + "rand 0.10.1", + "safelog", + "serde", + "signature 2.2.0", + "ssh-key-fork-arti", + "thiserror 2.0.18", + "tor-basic-utils", + "tor-bytes", + "tor-config", + "tor-config-path", + "tor-error", + "tor-hscrypto", + "tor-key-forge", + "tor-llcrypto", + "tor-persist", + "tracing", + "visibility", + "walkdir", + "web-time-compat", + "zeroize", +] + +[[package]] +name = "tor-linkspec" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1cc8d5469c324d1e0761066d868363d3fdccb723b14cdc983a5aef9b67981b" +dependencies = [ + "base64ct", + "by_address", + "caret", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "hex", + "itertools 0.14.0", + "safelog", + "serde", + "serde_with", + "strum 0.28.0", + "thiserror 2.0.18", + "tor-basic-utils", + "tor-bytes", + "tor-config", + "tor-llcrypto", + "tor-memquota", + "tor-protover", +] + +[[package]] +name = "tor-llcrypto" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0015d521f5e30a2f74879fe4c615fc2c3ace822d7cc88c1dfed0ae816b25f15" +dependencies = [ + "aes", + "base64ct", + "ctr", + "curve25519-dalek 4.1.3", + "der-parser", + "derive-deftly", + "derive_more", + "digest 0.10.7", + "ed25519-dalek 2.2.0", + "educe", + "getrandom 0.2.17", + "getrandom 0.3.3", + "getrandom 0.4.1", + "hex", + "rand 0.10.1", + "rand_chacha 0.10.0", + "rand_core 0.10.1", + "rand_core 0.6.4", + "rand_jitter 0.6.1", + "rdrand 0.8.3", + "reseeding_rng", + "rsa", + "safelog", + "serde", + "sha1", + "sha2 0.10.9", + "sha3 0.10.9", + "signature 2.2.0", + "subtle", + "thiserror 2.0.18", + "tor-error", + "tor-memquota-cost", + "visibility", + "x25519-dalek 2.0.1", + "zeroize", +] + +[[package]] +name = "tor-log-ratelim" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d16152b21f2e7b309dfbdcbe587c5adba9547d3119f2933b453d6edbce7e8e0" +dependencies = [ + "futures 0.3.31", + "humantime", + "thiserror 2.0.18", + "tor-error", + "tor-rtcompat", + "tracing", + "weak-table", + "web-time-compat", +] + +[[package]] +name = "tor-memquota" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ad2950d88e968572b0de6bb5702f5ed42f36555f362fb741c572c62441476e" +dependencies = [ + "cfg-if 1.0.4", + "derive-deftly", + "derive_more", + "dyn-clone", + "educe", + "futures 0.3.31", + "itertools 0.14.0", + "paste", + "pin-project", + "serde", + "slotmap-careful", + "static_assertions", + "sysinfo 0.38.4", + "thiserror 2.0.18", + "tor-async-utils", + "tor-basic-utils", + "tor-config", + "tor-error", + "tor-log-ratelim", + "tor-memquota-cost", + "tor-rtcompat", + "tracing", + "void", +] + +[[package]] +name = "tor-memquota-cost" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993ad5bfd39fb629990da40c2b2086284b1481b7d4843652a959db1d9e5ac463" +dependencies = [ + "derive-deftly", + "itertools 0.14.0", + "paste", + "void", +] + +[[package]] +name = "tor-netdir" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6700c5e590818d9873a13e06b49b95cf3a39fa8fb3968bd67ec3295cd584b97c" +dependencies = [ + "async-trait", + "bitflags 2.13.0", + "derive_more", + "digest 0.10.7", + "futures 0.3.31", + "hex", + "humantime", + "itertools 0.14.0", + "num_enum", + "rand 0.10.1", + "serde", + "strum 0.28.0", + "thiserror 2.0.18", + "time", + "tor-basic-utils", + "tor-error", + "tor-hscrypto", + "tor-linkspec", + "tor-llcrypto", + "tor-netdoc", + "tor-protover", + "tor-units", + "tracing", + "typed-index-collections", + "web-time-compat", +] + +[[package]] +name = "tor-netdoc" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a497ce4c36f59e4c67c352e3b80cd4642f6c5e660bb003de1922be4c7ed03081" +dependencies = [ + "amplify", + "base64ct", + "cipher 0.4.4", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "digest 0.10.7", + "educe", + "enumset", + "hex", + "hostname-validator", + "humantime", + "itertools 0.14.0", + "memchr", + "paste", + "phf 0.13.1", + "rand 0.10.1", + "saturating-time", + "serde", + "serde_with", + "signature 2.2.0", + "smallvec", + "strum 0.28.0", + "subtle", + "thiserror 2.0.18", + "time", + "tinystr", + "tor-basic-utils", + "tor-bytes", + "tor-cell", + "tor-cert", + "tor-checkable", + "tor-error", + "tor-hscrypto", + "tor-linkspec", + "tor-llcrypto", + "tor-protover", + "tor-units", + "void", + "web-time-compat", + "zeroize", +] + +[[package]] +name = "tor-persist" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6da1a96a1f6418faac1cd1892e029fd265cf50e67e941a4ba2580d92dd32d47" +dependencies = [ + "derive-deftly", + "derive_more", + "filetime", + "fs-mistrust", + "fslock-guard", + "futures 0.3.31", + "itertools 0.14.0", + "oneshot-fused-workaround", + "paste", + "sanitize-filename", + "serde", + "serde_json", + "thiserror 2.0.18", + "time", + "tor-async-utils", + "tor-basic-utils", + "tor-error", + "tracing", + "void", + "web-time-compat", +] + +[[package]] +name = "tor-proto" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0a5fa0e1a365fc089a7f140f4142379dd74c91c15103c2f9d11ea711e16029e" +dependencies = [ + "amplify", + "async-trait", + "asynchronous-codec", + "bitvec", + "bytes 1.11.1", + "caret", + "cfg-if 1.0.4", + "cipher 0.4.4", + "coarsetime", + "derive-deftly", + "derive_builder_fork_arti", + "derive_more", + "digest 0.10.7", + "educe", + "enum_dispatch", + "futures 0.3.31", + "futures-util", + "hkdf 0.12.4", + "hmac 0.12.1", + "itertools 0.14.0", + "nonany", + "oneshot-fused-workaround", + "pin-project", + "postage", + "rand 0.10.1", + "rand_core 0.10.1", + "safelog", + "slotmap-careful", + "smallvec", + "static_assertions", + "strum 0.28.0", + "subtle", + "sync_wrapper", + "thiserror 2.0.18", + "tokio 1.49.0", + "tokio-util 0.7.18", + "tor-async-utils", + "tor-basic-utils", + "tor-bytes", + "tor-cell", + "tor-cert", + "tor-checkable", + "tor-config", + "tor-error", + "tor-hscrypto", + "tor-linkspec", + "tor-llcrypto", + "tor-log-ratelim", + "tor-memquota", + "tor-protover", + "tor-rtcompat", + "tor-rtmock", + "tor-units", + "tracing", + "typenum", + "visibility", + "void", + "web-time-compat", + "zeroize", +] + +[[package]] +name = "tor-protover" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4f7f4ee15c9bfa0b700ae06e85fa52abddf17a35531cd3d3833412900e8da5c" +dependencies = [ + "caret", + "paste", + "serde_with", + "thiserror 2.0.18", + "tor-basic-utils", + "tor-bytes", +] + +[[package]] +name = "tor-relay-selection" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b565b6dec2e3edb7b033203a3662edb7b586e486d53e02af4295e05e7562870" +dependencies = [ + "rand 0.10.1", + "serde", + "tor-basic-utils", + "tor-linkspec", + "tor-netdir", + "tor-netdoc", +] + +[[package]] +name = "tor-rtcompat" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcd7a4ff4898044b3ec693c0bf098251accf13c58741c44ed9364ce5faa89287" +dependencies = [ + "amplify", + "async-native-tls", + "async-trait", + "async_executors", + "asynchronous-codec", + "cfg-if 1.0.4", + "coarsetime", + "derive_builder_fork_arti", + "derive_more", + "dyn-clone", + "educe", + "futures 0.3.31", + "hex", + "libc", + "native-tls", + "paste", + "pin-project", + "socket2 0.6.2", + "thiserror 2.0.18", + "tokio 1.49.0", + "tokio-util 0.7.18", + "tor-error", + "tor-general-addr", + "tracing", + "void", + "web-time-compat", + "zeroize", +] + +[[package]] +name = "tor-rtmock" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8331e7d57bf7cf157cf3610ff6dbb5a591de5c3b22fa65ea6be18b08ff81477a" +dependencies = [ + "amplify", + "assert_matches", + "async-trait", + "derive-deftly", + "derive_more", + "educe", + "futures 0.3.31", + "humantime", + "itertools 0.14.0", + "oneshot-fused-workaround", + "pin-project", + "priority-queue", + "slotmap-careful", + "strum 0.28.0", + "thiserror 2.0.18", + "tor-error", + "tor-general-addr", + "tor-rtcompat", + "tracing", + "tracing-test", + "void", + "web-time-compat", +] + +[[package]] +name = "tor-socksproto" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55f432eda94343bdadd73995f0b3082d96637dadb0e20c3f9a1bf2349f623d3c" +dependencies = [ + "amplify", + "caret", + "derive-deftly", + "educe", + "safelog", + "subtle", + "thiserror 2.0.18", + "tor-bytes", + "tor-error", +] + +[[package]] +name = "tor-units" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf033ee8b22b11abd8272272e19ccbbf58c7b3152f8d224aa8d21f358c43d0d" +dependencies = [ + "derive-deftly", + "derive_more", + "serde", + "thiserror 2.0.18", + "tor-memquota", +] [[package]] name = "tower-service" @@ -13887,35 +11768,6 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "trackable" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" -dependencies = [ - "trackable 1.3.0", - "trackable_derive", -] - -[[package]] -name = "trackable" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" -dependencies = [ - "trackable_derive", -] - -[[package]] -name = "trackable_derive" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" -dependencies = [ - "quote 1.0.44", - "syn 1.0.109", -] - [[package]] name = "triomphe" version = "0.1.15" @@ -13942,27 +11794,6 @@ dependencies = [ "core_maths", ] -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" -dependencies = [ - "byteorder", - "bytes 1.11.1", - "data-encoding", - "http 0.2.12", - "httparse", - "log", - "rand 0.8.6", - "rustls 0.21.12", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", - "webpki-roots 0.24.0", -] - [[package]] name = "tungstenite" version = "0.26.2" @@ -13991,6 +11822,16 @@ dependencies = [ "rustc-hash 2.1.1", ] +[[package]] +name = "typed-index-collections" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "898160f1dfd383b4e92e17f0512a7d62f3c51c44937b23b6ffc3a1614a8eaccd" +dependencies = [ + "bincode 2.0.1", + "serde", +] + [[package]] name = "typemap-ors" version = "1.0.0" @@ -14006,12 +11847,6 @@ version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - [[package]] name = "uds_windows" version = "1.1.0" @@ -14023,6 +11858,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "uncased" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + [[package]] name = "unic-langid" version = "0.9.6" @@ -14136,7 +11980,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" dependencies = [ "generic-array 0.14.7", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -14146,7 +11990,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common 0.1.7", - "subtle 2.6.1", + "subtle", ] [[package]] @@ -14176,6 +12020,12 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +[[package]] +name = "unty" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" + [[package]] name = "ur" version = "0.4.1" @@ -14247,29 +12097,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "utoipa" -version = "5.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bde15df68e80b16c7d16b9616e80770ad158988daa56a27dccd1e55558b0160" -dependencies = [ - "indexmap 2.13.0", - "serde", - "serde_json", - "utoipa-gen", -] - -[[package]] -name = "utoipa-gen" -version = "5.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba0b99ee52df3028635d93840c797102da61f8a7bb3cf751032455895b52ef8" -dependencies = [ - "proc-macro2 1.0.106", - "quote 1.0.44", - "syn 2.0.114", -] - [[package]] name = "uuid" version = "0.8.2" @@ -14286,7 +12113,6 @@ version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ - "getrandom 0.3.3", "js-sys", "serde_core", "wasm-bindgen", @@ -14341,27 +12167,29 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vergen" -version = "8.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" -dependencies = [ - "anyhow", - "cargo_metadata 0.18.1", - "cfg-if 1.0.4", - "regex", - "rustc_version", - "rustversion", - "time", -] - [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "visibility" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" +dependencies = [ + "proc-macro2 1.0.106", + "quote 1.0.44", + "syn 2.0.114", +] + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + [[package]] name = "walkdir" version = "2.5.0" @@ -14420,12 +12248,6 @@ dependencies = [ "wit-bindgen", ] -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - [[package]] name = "wasix" version = "0.13.2" @@ -14524,26 +12346,12 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "hashbrown 0.15.5", "indexmap 2.13.0", "semver", ] -[[package]] -name = "wasmtimer" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" -dependencies = [ - "futures 0.3.31", - "js-sys", - "parking_lot 0.12.5", - "pin-utils", - "slab", - "wasm-bindgen", -] - [[package]] name = "wayland-backend" version = "0.3.12" @@ -14551,7 +12359,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" dependencies = [ "cc", - "downcast-rs", + "downcast-rs 1.2.1", "rustix 1.1.3", "scoped-tls", "smallvec", @@ -14564,7 +12372,7 @@ version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "rustix 1.1.3", "wayland-backend", "wayland-scanner", @@ -14576,7 +12384,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "cursor-icon", "wayland-backend", ] @@ -14598,7 +12406,7 @@ version = "0.32.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -14610,7 +12418,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -14623,7 +12431,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791c58fdeec5406aa37169dd815327d1e47f334219b523444bc26d70ceb4c34e" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -14636,7 +12444,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -14649,7 +12457,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -14679,6 +12487,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "weak-table" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549" + [[package]] name = "web-sys" version = "0.3.85" @@ -14699,6 +12513,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time-compat" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39819265f219f60a92312f2755262dba9fff180a4ec281556863d69fa36adc59" +dependencies = [ + "web-time", +] + [[package]] name = "webbrowser" version = "1.1.0" @@ -14706,7 +12529,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f00bb839c1cf1e3036066614cbdcd035ecf215206691ea646aa3c60a24f68f2" dependencies = [ "core-foundation 0.10.1", - "jni 0.21.1", + "jni", "log", "ndk-context", "objc2 0.6.3", @@ -14735,15 +12558,6 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "webpki-root-certs" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "webpki-roots" version = "0.20.0" @@ -14753,21 +12567,6 @@ dependencies = [ "webpki 0.21.4", ] -[[package]] -name = "webpki-roots" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" -dependencies = [ - "rustls-webpki 0.101.7", -] - -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - [[package]] name = "webpki-roots" version = "0.26.11" @@ -14799,7 +12598,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" dependencies = [ "arrayvec 0.7.6", - "bitflags 2.10.0", + "bitflags 2.13.0", "cfg-if 1.0.4", "cfg_aliases", "document-features", @@ -14830,7 +12629,7 @@ dependencies = [ "arrayvec 0.7.6", "bit-set", "bit-vec 0.8.0", - "bitflags 2.10.0", + "bitflags 2.13.0", "bytemuck", "cfg_aliases", "document-features", @@ -14890,7 +12689,7 @@ dependencies = [ "arrayvec 0.7.6", "ash", "bit-set", - "bitflags 2.10.0", + "bitflags 2.13.0", "block", "bytemuck", "cfg-if 1.0.4", @@ -14935,7 +12734,7 @@ version = "27.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "bytemuck", "js-sys", "log", @@ -14955,16 +12754,6 @@ dependencies = [ "rustix 0.38.44", ] -[[package]] -name = "whoami" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" -dependencies = [ - "libredox", - "wasite", -] - [[package]] name = "widestring" version = "1.2.1" @@ -15204,17 +12993,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" -dependencies = [ - "windows-link 0.2.1", - "windows-result 0.4.1", - "windows-strings 0.5.1", -] - [[package]] name = "windows-result" version = "0.2.0" @@ -15279,15 +13057,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -15339,21 +13108,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -15411,12 +13165,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -15435,12 +13183,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -15459,12 +13201,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -15495,12 +13231,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -15519,12 +13249,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -15543,12 +13267,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -15567,12 +13285,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -15594,7 +13306,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.10.0", + "bitflags 2.13.0", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -15661,16 +13373,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if 1.0.4", - "windows-sys 0.48.0", -] - [[package]] name = "winresource" version = "0.1.31" @@ -15739,7 +13441,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.10.0", + "bitflags 2.13.0", "indexmap 2.13.0", "log", "serde", @@ -15785,6 +13487,15 @@ dependencies = [ "winapi-build", ] +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "x11-dl" version = "2.21.0" @@ -15863,7 +13574,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.13.0", "dlib", "log", "once_cell", diff --git a/Cargo.toml b/Cargo.toml index 00a557e..242bffb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,17 @@ lto = true codegen-units = 1 panic = "abort" +[features] +## Default build uses the Tor transport only. The `nym` feature gates the dormant +## mixnet path (src/nym/). Cargo resolves OPTIONAL deps into the graph too, so +## nym-sdk cannot merely be `optional` — it links a different libsqlite3-sys than +## arti (a native-lib `links` conflict Cargo rejects at resolution). The nym +## path-deps are therefore commented out below; the module code is retained on +## disk but building `--features nym` requires restoring them (and drops arti — +## the two transports cannot coexist in one binary, which is why Tor replaced Nym). +default = [] +nym = [] + [dependencies] log = "0.4.27" @@ -124,18 +135,34 @@ rustls = { version = "0.23", features = ["ring"] } tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] } webpki-roots = "1" -## Nym mixnet, linked IN-PROCESS (no sidecar subprocess, no bundled binary). +## Tor — embedded arti (the DIALING half only: connect OUT to the relay's .onion, +## and to clearnet HTTP hosts through a Tor exit). Copied from our sister wallet +## GRIM's proven, shipping engine. Two choices inherited VERBATIM from GRIM: arti +## 0.43 across the family, and the native-tls Tor runtime (TokioNativeTlsRuntime), +## NOT rustls — this deliberately sidesteps the rustls/ring crypto-provider +## conflict fought during the Nym era (our relay/HTTP rustls still uses ring, see +## lib.rs; arti's own TLS is native-tls and never touches the rustls provider). +## `static` vendors openssl (self-contained Android/cross builds, as GRIM ships); +## `onion-service-client` enables dialing .onion. We drop GRIM's `pt-client` +## (bridges) and `onion-service-service` (hosting) — Goblin only dials. +arti-client = { version = "0.43.0", features = ["static", "onion-service-client"] } +tor-rtcompat = { version = "0.43.0", features = ["static"] } + +## Nym mixnet — DORMANT since the Tor transport swap. The mixnet path (src/nym/) +## is retained on disk but its deps are COMMENTED OUT, because arti's `tor-dirmgr` +## needs libsqlite3-sys 0.34 (rusqlite 0.36) while nym-sdk's credential-storage +## needs libsqlite3-sys 0.30 (sqlx) and BOTH link the native `sqlite3` library — +## Cargo forbids two packages linking the same native lib, and it rejects this at +## RESOLUTION even for optional/unused deps. The two transports therefore cannot +## coexist in one binary (exactly why Tor replaced Nym). To build the old path, +## restore these three deps and build `--features nym` (which then drops arti). +## Full deletion is a later phase; for now the code stays on disk for reference. ## Path deps into the local nym checkout, PINNED at rev -## f6ed17d949cc19fee0fb51db3cb65771fd510d5b: it carries the load-bearing local -## commit "http-api-client: preconfigured webpki roots on Android". Do not -## float the checkout past that rev without re-verifying the Android build. -nym-sdk = { path = "../nym/sdk/rust/nym-sdk" } -## smolmix: TCP/UDP tunnel over the mixnet with an AUTO-SELECTED IPR exit — -## the single-network-requester SPOF is structurally gone (plan G14). -smolmix = { path = "../nym/smolmix/core" } -## mix-dns wire codec. Already in the dependency graph via nym-http-api-client -## (Cargo.lock), so we reuse it instead of vendoring a DNS encode/parse. -hickory-proto = { version = "0.26", default-features = false, features = ["std"] } +## f6ed17d949cc19fee0fb51db3cb65771fd510d5b ("http-api-client: preconfigured +## webpki roots on Android"). +# nym-sdk = { path = "../nym/sdk/rust/nym-sdk" } +# smolmix = { path = "../nym/smolmix/core" } +# hickory-proto = { version = "0.26", default-features = false, features = ["std"] } ## NIP-98 payload hashing sha2 = "0.10.8" diff --git a/locales/de.yml b/locales/de.yml index 2e55b43..a28441e 100644 --- a/locales/de.yml +++ b/locales/de.yml @@ -359,9 +359,9 @@ keyboard: goblin: home: anonymous: "Anonym" - connected_nym: "Über Nym verbunden" - nym_ready: "Nym bereit · Relays…" - connecting_nym: "Verbinde mit Nym…" + connected_nym: "Über Tor verbunden" + nym_ready: "Tor bereit · Relays…" + connecting_nym: "Verbinde mit Tor…" cant_reach_node: "Node nicht erreichbar" node_synced: "Node synchronisiert" syncing: "Synchronisiere…" @@ -416,7 +416,7 @@ goblin: fee_none: "Keine" network_fee: "Netzwerkgebühr" privacy: "Privatsphäre" - privacy_value: "Mimblewimble + Nym" + privacy_value: "Mimblewimble + Tor" transaction: "Transaktion" cancel_request: "Anfrage abbrechen" cancel_send: "Zahlung abbrechen" @@ -474,7 +474,7 @@ goblin: switch_wallet: "Wallet wechseln" advanced: "Erweitert" privacy: "Privatsphäre" - mixnet_routing: "Mixnet-Routing" + mixnet_routing: "Tor-Routing" messages_lookups: "Nachrichten & Abfragen" auto_accept: "Automatisch annehmen" pairing: "Preiswährung" @@ -497,7 +497,7 @@ goblin: goblin: "Goblin" build: "Build %{build}" network: "Netzwerk" - network_value: "MW + Nym mixnet + nostr" + network_value: "MW + Tor + nostr" third_party: "Drittanbieter" grim: "GRIM (Upstream-Wallet)" grin_node: "Grin-Node" @@ -617,14 +617,14 @@ goblin: hide_qr: "QR ausblenden" privacy: title: "Netzwerk-Privatsphäre" - intro: "Goblin sendet seinen privaten Datenverkehr durch das Nym mixnet — ein Netzwerk mit fünf Sprüngen, das verbirgt, wer mit wem kommuniziert, sodass ein Relay eine Zahlung nicht zu dir zurückverfolgen kann." + intro: "Goblin sendet seinen privaten Datenverkehr über Tor und verbirgt so deine IP vor dem Relay — die Verschlüsselung verbirgt den Rest, sodass ein Relay eine Zahlung nicht zu dir zurückverfolgen kann." payments: "Zahlungen" payments_blurb: "Jede nostr-Nachricht, die einen slatepack trägt." usernames: "usernames" usernames_blurb: "NIP-05-Namensabfragen zu und von goblin.st." price_avatars: "Preis" price_avatars_blurb: "Der Live-Wechselkurs neben den Beträgen." - over_mixnet: "Über das mixnet" + over_mixnet: "Über Tor" direct_connection: "Direkte Verbindung" grin_node: "Grin-Node" grin_node_blurb: "Block-Synchronisierung und Übertragung deiner Transaktion ins Netzwerk. Dies sind öffentliche Chain-Daten, für alle gleich, und nicht mit deiner Identität verknüpft." @@ -632,7 +632,7 @@ goblin: title: "Kopplung" intro: "Womit dein Guthaben und deine Beträge verglichen werden." pair_with: "Koppeln mit" - rates_note: "Kurse werden über das Nym mixnet abgerufen, nur solange eine Kopplung aktiv ist — aus bedeutet, dass keine Kursanfrage dein Gerät verlässt." + rates_note: "Kurse werden über Tor abgerufen, nur solange eine Kopplung aktiv ist — aus bedeutet, dass keine Kursanfrage dein Gerät verlässt." relays: title: "Relays" intro: "Zahlungsnachrichten werden an jedes Relay unten gespiegelt; ein erreichbares Relay genügt zum Empfangen." @@ -674,7 +674,7 @@ goblin: private_money_head: "Privates Geld" private_money_body: "Goblin ist ein Wallet für grin — digitales Bargeld ohne Beträge oder Adressen auf seiner Chain." send_like_message_head: "Senden wie eine Nachricht" - send_like_message_body: "Zahle an einen username oder npub und es kommt als Ende-zu-Ende-verschlüsselte Nachricht über nostr und das Nym mixnet an — niemand dazwischen sieht den Betrag oder die Beteiligten." + send_like_message_body: "Zahle an einen username oder npub und es kommt als Ende-zu-Ende-verschlüsselte Nachricht über nostr und Tor an — niemand dazwischen sieht den Betrag oder die Beteiligten." yours_alone_head: "Nur deins" yours_alone_body: "Schlüssel, Namen und Verlauf bleiben auf diesem Gerät. Basiert auf dem GRIM-Wallet." get_started: "Loslegen" @@ -725,8 +725,8 @@ goblin: kicker: "SCHRITT 3 VON 3 · IDENTITÄT" title: "Deine Zahlungsidentität" key_being_made: "Schlüssel wird erstellt…" - connected_nym: "über Nym verbunden" - connecting_nym: "verbinde über Nym…" + connected_nym: "über Tor verbunden" + connecting_nym: "verbinde über Tor…" fresh_key_blurb: "Ein Zahlungsschlüssel, der nicht Teil deines Seeds ist — jederzeit rotierbar, ohne deine Mittel zu berühren." clean_slate_blurb: "Lust auf einen Neuanfang? Tausche jederzeit einen brandneuen Schlüssel ein — das neue Du ist nicht mit dem alten verknüpft. Gleiches Wallet, frisches Gesicht." pick_username: "Benutzernamen wählen — optional" @@ -734,7 +734,7 @@ goblin: username_field_hint: "deinname" working: "Arbeite…" claim_username: "Benutzernamen sichern" - available_when_connected: "Verfügbar, sobald das mixnet verbindet — oder überspringen und später sichern." + available_when_connected: "Verfügbar, sobald Tor verbindet — oder überspringen und später sichern." youre: "Du bist %{name}" claimed_title: "%{name} gehört dir" claimed_blurb: "Freunde können dich jetzt per Namen bezahlen. Alles bereit — öffne dein Wallet." @@ -792,11 +792,11 @@ goblin: row_they_pay: "Sie zahlen" row_they_pay_val: "Nur wenn sie zustimmen" row_delivery: "Zustellung" - row_delivery_val: "NIP-44-verschlüsselt, über Nym" + row_delivery_val: "NIP-44-verschlüsselt, über Tor" row_network_fee: "Netzwerkgebühr" row_network_fee_val: "Von deinem Guthaben abgezogen" row_privacy: "Privatsphäre" - row_privacy_val: "Mimblewimble + Nym" + row_privacy_val: "Mimblewimble + Tor" send_request_btn: "Anfrage senden" request_approve_hint: "Sie erhalten eine Anfrage zum Zustimmen" hold_to_send: "Zum Senden halten" diff --git a/locales/en.yml b/locales/en.yml index 49336e4..182b5af 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -359,9 +359,9 @@ keyboard: goblin: home: anonymous: "Anonymous" - connected_nym: "Connected over Nym" - nym_ready: "Nym ready · relays…" - connecting_nym: "Connecting to Nym…" + connected_nym: "Connected over Tor" + nym_ready: "Tor ready · relays…" + connecting_nym: "Connecting to Tor…" cant_reach_node: "Can't reach node" node_synced: "Node synced" syncing: "Syncing…" @@ -416,7 +416,7 @@ goblin: fee_none: "None" network_fee: "Network fee" privacy: "Privacy" - privacy_value: "Mimblewimble + Nym" + privacy_value: "Mimblewimble + Tor" transaction: "Transaction" cancel_request: "Cancel request" cancel_send: "Cancel payment" @@ -474,7 +474,7 @@ goblin: switch_wallet: "Switch wallet" advanced: "Advanced" privacy: "Privacy" - mixnet_routing: "Mixnet routing" + mixnet_routing: "Tor routing" messages_lookups: "Messages & lookups" auto_accept: "Auto-accept" pairing: "Price currency" @@ -497,7 +497,7 @@ goblin: goblin: "Goblin" build: "Build %{build}" network: "Network" - network_value: "MW + Nym mixnet + nostr" + network_value: "MW + Tor + nostr" third_party: "Third party" grim: "GRIM (upstream wallet)" grin_node: "Grin node" @@ -617,14 +617,14 @@ goblin: hide_qr: "Hide QR" privacy: title: "Network privacy" - intro: "Goblin sends its private traffic through the Nym mixnet — a five-hop network that hides who is talking to whom, so a relay can't link a payment back to you." + intro: "Goblin sends its private traffic through Tor, which hides your IP from the relay — encryption hides the rest, so a relay can't link a payment back to you." payments: "Payments" payments_blurb: "Every nostr message carrying a slatepack." usernames: "usernames" usernames_blurb: "NIP-05 name lookups to and from goblin.st." price_avatars: "Price" price_avatars_blurb: "The live fiat rate shown next to amounts." - over_mixnet: "Over the mixnet" + over_mixnet: "Over Tor" direct_connection: "Direct connection" grin_node: "Grin node" grin_node_blurb: "Block sync and broadcasting your transaction to the network. This is public chain data, the same for everyone, and isn't linked to your identity." @@ -632,7 +632,7 @@ goblin: title: "Pairing" intro: "What your balance and amounts are shown against." pair_with: "Pair with" - rates_note: "Rates fetch over the Nym mixnet, only while a pairing is on — off means no rate request leaves your device." + rates_note: "Rates fetch over Tor, only while a pairing is on — off means no rate request leaves your device." relays: title: "Relays" intro: "Payment messages are mirrored to every relay below; one reachable relay is enough to receive." @@ -674,7 +674,7 @@ goblin: private_money_head: "Private money" private_money_body: "Goblin is a wallet for grin — digital cash with no amounts or addresses on its chain." send_like_message_head: "Send like a message" - send_like_message_body: "Pay a username or npub and it arrives as an end-to-end encrypted message over nostr and the Nym mixnet — no one in between can see the amount or who's involved." + send_like_message_body: "Pay a username or npub and it arrives as an end-to-end encrypted message over nostr and Tor — no one in between can see the amount or who's involved." yours_alone_head: "Yours alone" yours_alone_body: "Keys, names and history live on this device. Built on the GRIM wallet." get_started: "Get started" @@ -725,8 +725,8 @@ goblin: kicker: "STEP 3 OF 3 · IDENTITY" title: "Your payment identity" key_being_made: "key being made…" - connected_nym: "connected over Nym" - connecting_nym: "connecting over Nym…" + connected_nym: "connected over Tor" + connecting_nym: "connecting over Tor…" fresh_key_blurb: "A payment key that isn't part of your seed — rotate it anytime to stay private, without touching your funds." clean_slate_blurb: "Want a clean slate? Swap in a brand-new key any time — the new you isn't linked to the old one. Same wallet, fresh face." pick_username: "Pick a username — optional" @@ -734,7 +734,7 @@ goblin: username_field_hint: "yourname" working: "Working…" claim_username: "Claim username" - available_when_connected: "Available once the mixnet connects — or skip and claim later." + available_when_connected: "Available once Tor connects — or skip and claim later." youre: "You're %{name}" claimed_title: "%{name} is yours" claimed_blurb: "Friends can now pay you by name. You're all set — open your wallet." @@ -792,11 +792,11 @@ goblin: row_they_pay: "They pay" row_they_pay_val: "Only if they approve" row_delivery: "Delivery" - row_delivery_val: "NIP-44 encrypted, over Nym" + row_delivery_val: "NIP-44 encrypted, over Tor" row_network_fee: "Network fee" row_network_fee_val: "Deducted from your balance" row_privacy: "Privacy" - row_privacy_val: "Mimblewimble + Nym" + row_privacy_val: "Mimblewimble + Tor" send_request_btn: "Send request" request_approve_hint: "They'll get a request to approve" hold_to_send: "Hold to send" diff --git a/locales/fr.yml b/locales/fr.yml index 7853173..1b5452b 100644 --- a/locales/fr.yml +++ b/locales/fr.yml @@ -359,9 +359,9 @@ keyboard: goblin: home: anonymous: "Anonyme" - connected_nym: "Connecté via Nym" - nym_ready: "Nym prêt · relais…" - connecting_nym: "Connexion à Nym…" + connected_nym: "Connecté via Tor" + nym_ready: "Tor prêt · relais…" + connecting_nym: "Connexion à Tor…" cant_reach_node: "Nœud injoignable" node_synced: "Nœud synchronisé" syncing: "Synchronisation…" @@ -416,7 +416,7 @@ goblin: fee_none: "Aucun" network_fee: "Frais de réseau" privacy: "Confidentialité" - privacy_value: "Mimblewimble + Nym" + privacy_value: "Mimblewimble + Tor" transaction: "Transaction" cancel_request: "Annuler la demande" cancel_send: "Annuler le paiement" @@ -474,7 +474,7 @@ goblin: switch_wallet: "Changer de portefeuille" advanced: "Avancé" privacy: "Confidentialité" - mixnet_routing: "Routage par mixnet" + mixnet_routing: "Routage par Tor" messages_lookups: "Messages et recherches" auto_accept: "Acceptation auto" pairing: "Devise des prix" @@ -497,7 +497,7 @@ goblin: goblin: "Goblin" build: "Build %{build}" network: "Réseau" - network_value: "MW + mixnet Nym + nostr" + network_value: "MW + Tor + nostr" third_party: "Tiers" grim: "GRIM (portefeuille amont)" grin_node: "Nœud grin" @@ -617,14 +617,14 @@ goblin: hide_qr: "Masquer le QR" privacy: title: "Confidentialité réseau" - intro: "Goblin envoie son trafic privé via le mixnet Nym — un réseau à cinq sauts qui masque qui parle à qui, afin qu'un relais ne puisse pas relier un paiement à vous." + intro: "Goblin envoie son trafic privé via Tor, qui masque votre IP au relais — le chiffrement masque le reste, afin qu'un relais ne puisse pas relier un paiement à vous." payments: "Paiements" payments_blurb: "Chaque message nostr transportant un slatepack." usernames: "usernames" usernames_blurb: "Recherches de noms NIP-05 vers et depuis goblin.st." price_avatars: "Prix" price_avatars_blurb: "Le taux en temps réel affiché à côté des montants." - over_mixnet: "Via le mixnet" + over_mixnet: "Via Tor" direct_connection: "Connexion directe" grin_node: "Nœud grin" grin_node_blurb: "Synchronisation des blocs et diffusion de votre transaction sur le réseau. Ce sont des données de chaîne publiques, identiques pour tous, et non liées à votre identité." @@ -632,7 +632,7 @@ goblin: title: "Appairage" intro: "Ce à quoi votre solde et vos montants sont comparés." pair_with: "Apparier avec" - rates_note: "Les cours sont récupérés via le mixnet Nym, uniquement tant qu'un appairage est actif — désactivé, aucune requête de cours ne quitte votre appareil." + rates_note: "Les cours sont récupérés via Tor, uniquement tant qu'un appairage est actif — désactivé, aucune requête de cours ne quitte votre appareil." relays: title: "Relais" intro: "Les messages de paiement sont répliqués sur tous les relais ci-dessous ; un seul relais joignable suffit pour recevoir." @@ -674,7 +674,7 @@ goblin: private_money_head: "Argent privé" private_money_body: "Goblin est un portefeuille pour grin — de l'argent numérique sans montants ni adresses sur sa chaîne." send_like_message_head: "Envoyer comme un message" - send_like_message_body: "Payez un username ou un npub et cela arrive comme un message chiffré de bout en bout via nostr et le mixnet Nym — personne entre les deux ne voit le montant ni les personnes impliquées." + send_like_message_body: "Payez un username ou un npub et cela arrive comme un message chiffré de bout en bout via nostr et Tor — personne entre les deux ne voit le montant ni les personnes impliquées." yours_alone_head: "À vous seul" yours_alone_body: "Clés, noms et historique vivent sur cet appareil. Construit sur le portefeuille GRIM." get_started: "Commencer" @@ -725,8 +725,8 @@ goblin: kicker: "ÉTAPE 3 SUR 3 · IDENTITÉ" title: "Votre identité de paiement" key_being_made: "clé en cours de création…" - connected_nym: "connecté via Nym" - connecting_nym: "connexion via Nym…" + connected_nym: "connecté via Tor" + connecting_nym: "connexion via Tor…" fresh_key_blurb: "Une clé de paiement qui ne fait pas partie de votre seed — renouvelable à tout moment, sans toucher à vos fonds." clean_slate_blurb: "Envie de repartir à zéro ? Remplacez par une toute nouvelle clé à tout moment — le nouveau vous n'est pas lié à l'ancien. Même portefeuille, nouveau visage." pick_username: "Choisir un nom d'utilisateur — facultatif" @@ -734,7 +734,7 @@ goblin: username_field_hint: "votrenom" working: "En cours…" claim_username: "Réserver le nom d'utilisateur" - available_when_connected: "Disponible une fois le mixnet connecté — ou passez et réservez plus tard." + available_when_connected: "Disponible une fois Tor connecté — ou passez et réservez plus tard." youre: "Vous êtes %{name}" claimed_title: "%{name} est à vous" claimed_blurb: "Vos amis peuvent désormais vous payer par votre nom. Tout est prêt — ouvrez votre portefeuille." @@ -792,11 +792,11 @@ goblin: row_they_pay: "Ils paient" row_they_pay_val: "Seulement s'ils approuvent" row_delivery: "Livraison" - row_delivery_val: "Chiffré NIP-44, via Nym" + row_delivery_val: "Chiffré NIP-44, via Tor" row_network_fee: "Frais de réseau" row_network_fee_val: "Déduit de votre solde" row_privacy: "Confidentialité" - row_privacy_val: "Mimblewimble + Nym" + row_privacy_val: "Mimblewimble + Tor" send_request_btn: "Envoyer la demande" request_approve_hint: "Ils recevront une demande à approuver" hold_to_send: "Maintenir pour envoyer" diff --git a/locales/ru.yml b/locales/ru.yml index 8ea3dbb..607f8ea 100644 --- a/locales/ru.yml +++ b/locales/ru.yml @@ -359,9 +359,9 @@ keyboard: goblin: home: anonymous: "Аноним" - connected_nym: "Подключено через Nym" - nym_ready: "Nym готов · реле…" - connecting_nym: "Подключение к Nym…" + connected_nym: "Подключено через Tor" + nym_ready: "Tor готов · реле…" + connecting_nym: "Подключение к Tor…" cant_reach_node: "Нет связи с узлом" node_synced: "Узел синхронизирован" syncing: "Синхронизация…" @@ -416,7 +416,7 @@ goblin: fee_none: "Нет" network_fee: "Сетевая комиссия" privacy: "Приватность" - privacy_value: "Mimblewimble + Nym" + privacy_value: "Mimblewimble + Tor" transaction: "Транзакция" cancel_request: "Отменить запрос" cancel_send: "Отменить платёж" @@ -474,7 +474,7 @@ goblin: switch_wallet: "Сменить кошелёк" advanced: "Дополнительно" privacy: "Приватность" - mixnet_routing: "Маршрутизация через mixnet" + mixnet_routing: "Маршрутизация через Tor" messages_lookups: "Сообщения и поиск" auto_accept: "Автоприём" pairing: "Валюта цены" @@ -497,7 +497,7 @@ goblin: goblin: "Goblin" build: "Сборка %{build}" network: "Сеть" - network_value: "MW + mixnet Nym + nostr" + network_value: "MW + Tor + nostr" third_party: "Сторонние" grim: "GRIM (исходный кошелёк)" grin_node: "Узел Grin" @@ -617,14 +617,14 @@ goblin: hide_qr: "Скрыть QR" privacy: title: "Сетевая приватность" - intro: "Goblin отправляет приватный трафик через mixnet Nym — сеть из пяти переходов, скрывающую, кто с кем общается, чтобы реле не могло связать платёж с вами." + intro: "Goblin отправляет приватный трафик через Tor, который скрывает ваш IP от реле — шифрование скрывает остальное, чтобы реле не могло связать платёж с вами." payments: "Платежи" payments_blurb: "Каждое nostr-сообщение, несущее slatepack." usernames: "usernames" usernames_blurb: "Поиск имён NIP-05 к и от goblin.st." price_avatars: "Цена" price_avatars_blurb: "Текущий курс рядом с суммами." - over_mixnet: "Через mixnet" + over_mixnet: "Через Tor" direct_connection: "Прямое соединение" grin_node: "Узел Grin" grin_node_blurb: "Синхронизация блоков и трансляция транзакции в сеть. Это публичные данные цепочки, одинаковые для всех, и они не связаны с вашей личностью." @@ -632,7 +632,7 @@ goblin: title: "Привязка" intro: "К чему привязаны отображаемые баланс и суммы." pair_with: "Привязать к" - rates_note: "Курсы загружаются через mixnet Nym только при включённой привязке — выключено означает, что запрос курса не покидает устройство." + rates_note: "Курсы загружаются через Tor только при включённой привязке — выключено означает, что запрос курса не покидает устройство." relays: title: "Реле" intro: "Сообщения о платежах дублируются на каждое реле ниже; для получения достаточно одного доступного реле." @@ -674,7 +674,7 @@ goblin: private_money_head: "Приватные деньги" private_money_body: "Goblin — кошелёк для grin: цифровая наличность без сумм и адресов в её цепочке." send_like_message_head: "Отправляйте как сообщение" - send_like_message_body: "Заплатите на username или npub, и платёж придёт как сквозно зашифрованное сообщение через nostr и mixnet Nym — никто посередине не увидит сумму или участников." + send_like_message_body: "Заплатите на username или npub, и платёж придёт как сквозно зашифрованное сообщение через nostr и Tor — никто посередине не увидит сумму или участников." yours_alone_head: "Только ваше" yours_alone_body: "Ключи, имена и история живут на этом устройстве. На базе кошелька GRIM." get_started: "Начать" @@ -725,8 +725,8 @@ goblin: kicker: "ШАГ 3 ИЗ 3 · ЛИЧНОСТЬ" title: "Ваша платёжная личность" key_being_made: "ключ создаётся…" - connected_nym: "подключено через Nym" - connecting_nym: "подключение через Nym…" + connected_nym: "подключено через Tor" + connecting_nym: "подключение через Tor…" fresh_key_blurb: "Платёжный ключ, не связанный с seed-фразой — меняйте его в любой момент, не трогая средства." clean_slate_blurb: "Хотите начать с чистого листа? Подставьте совершенно новый ключ в любой момент — новый вы не связан со старым. Тот же кошелёк, новое лицо." pick_username: "Выберите имя — необязательно" @@ -734,7 +734,7 @@ goblin: username_field_hint: "yourname" working: "Обработка…" claim_username: "Занять имя" - available_when_connected: "Доступно после подключения mixnet — или пропустите и займите позже." + available_when_connected: "Доступно после подключения Tor — или пропустите и займите позже." youre: "Вы %{name}" claimed_title: "%{name} теперь ваше" claimed_blurb: "Друзья теперь могут платить вам по имени. Всё готово — откройте кошелёк." @@ -792,11 +792,11 @@ goblin: row_they_pay: "Они платят" row_they_pay_val: "Только если они одобрят" row_delivery: "Доставка" - row_delivery_val: "Зашифровано NIP-44, через Nym" + row_delivery_val: "Зашифровано NIP-44, через Tor" row_network_fee: "Сетевая комиссия" row_network_fee_val: "Списывается с вашего баланса" row_privacy: "Приватность" - row_privacy_val: "Mimblewimble + Nym" + row_privacy_val: "Mimblewimble + Tor" send_request_btn: "Отправить запрос" request_approve_hint: "Они получат запрос на одобрение" hold_to_send: "Удерживайте для отправки" diff --git a/locales/tr.yml b/locales/tr.yml index 6e8d4fe..92bd64b 100644 --- a/locales/tr.yml +++ b/locales/tr.yml @@ -359,9 +359,9 @@ keyboard: goblin: home: anonymous: "Anonim" - connected_nym: "Nym üzerinden bağlı" - nym_ready: "Nym hazır · relaylar…" - connecting_nym: "Nym'e bağlanılıyor…" + connected_nym: "Tor üzerinden bağlı" + nym_ready: "Tor hazır · relaylar…" + connecting_nym: "Tor'a bağlanılıyor…" cant_reach_node: "Düğüme ulaşılamıyor" node_synced: "Düğüm eşitlendi" syncing: "Eşitleniyor…" @@ -416,7 +416,7 @@ goblin: fee_none: "Yok" network_fee: "Ağ ücreti" privacy: "Gizlilik" - privacy_value: "Mimblewimble + Nym" + privacy_value: "Mimblewimble + Tor" transaction: "İşlem" cancel_request: "İsteği iptal et" cancel_send: "Ödemeyi iptal et" @@ -474,7 +474,7 @@ goblin: switch_wallet: "Cüzdan değiştir" advanced: "Gelişmiş" privacy: "Gizlilik" - mixnet_routing: "Mixnet yönlendirme" + mixnet_routing: "Tor yönlendirme" messages_lookups: "Mesajlar ve aramalar" auto_accept: "Otomatik kabul" pairing: "Fiyat para birimi" @@ -497,7 +497,7 @@ goblin: goblin: "Goblin" build: "Sürüm %{build}" network: "Ağ" - network_value: "MW + Nym mixnet + nostr" + network_value: "MW + Tor + nostr" third_party: "Üçüncü taraf" grim: "GRIM (üst kaynak cüzdan)" grin_node: "Grin düğümü" @@ -617,14 +617,14 @@ goblin: hide_qr: "QR gizle" privacy: title: "Ağ gizliliği" - intro: "Goblin özel trafiğini Nym mixnet üzerinden gönderir — kimin kiminle konuştuğunu gizleyen beş atlamalı bir ağ, böylece bir relay bir ödemeyi sana bağlayamaz." + intro: "Goblin özel trafiğini Tor üzerinden gönderir ve senin IP adresini relaydan gizler — şifreleme de gerisini gizler, böylece bir relay bir ödemeyi sana bağlayamaz." payments: "Ödemeler" payments_blurb: "Slatepack taşıyan her nostr mesajı." usernames: "usernamelar" usernames_blurb: "goblin.st'ye ve oradan NIP-05 ad aramaları." price_avatars: "Fiyat" price_avatars_blurb: "Tutarların yanında gösterilen anlık kur." - over_mixnet: "Mixnet üzerinden" + over_mixnet: "Tor üzerinden" direct_connection: "Doğrudan bağlantı" grin_node: "Grin düğümü" grin_node_blurb: "Blok eşitleme ve işlemini ağa yayma. Bu, herkes için aynı olan genel zincir verisidir ve kimliğinle ilişkilendirilmez." @@ -632,7 +632,7 @@ goblin: title: "Eşleştirme" intro: "Bakiyenin ve tutarların neye göre gösterildiği." pair_with: "Eşleştir" - rates_note: "Kurlar yalnızca bir eşleştirme açıkken Nym mixnet üzerinden alınır — kapalıysa cihazından hiçbir kur isteği çıkmaz." + rates_note: "Kurlar yalnızca bir eşleştirme açıkken Tor üzerinden alınır — kapalıysa cihazından hiçbir kur isteği çıkmaz." relays: title: "Relaylar" intro: "Ödeme mesajları aşağıdaki her relay'e yansıtılır; almak için ulaşılabilir tek bir relay yeterlidir." @@ -674,7 +674,7 @@ goblin: private_money_head: "Özel para" private_money_body: "Goblin, grin için bir cüzdan — zincirinde tutar ya da adres bulunmayan dijital nakit." send_like_message_head: "Mesaj gibi gönder" - send_like_message_body: "Bir username ya da npub'a öde, nostr ve Nym mixnet üzerinden uçtan uca şifreli bir mesaj olarak ulaşır — aradaki hiç kimse tutarı ya da kimlerin dahil olduğunu göremez." + send_like_message_body: "Bir username ya da npub'a öde, nostr ve Tor üzerinden uçtan uca şifreli bir mesaj olarak ulaşır — aradaki hiç kimse tutarı ya da kimlerin dahil olduğunu göremez." yours_alone_head: "Yalnızca senin" yours_alone_body: "Anahtarlar, adlar ve geçmiş bu cihazda yaşar. GRIM cüzdanı üzerine kuruludur." get_started: "Başla" @@ -725,8 +725,8 @@ goblin: kicker: "ADIM 3 / 3 · KİMLİK" title: "Ödeme kimliğin" key_being_made: "anahtar oluşturuluyor…" - connected_nym: "Nym üzerinden bağlı" - connecting_nym: "Nym üzerinden bağlanılıyor…" + connected_nym: "Tor üzerinden bağlı" + connecting_nym: "Tor üzerinden bağlanılıyor…" fresh_key_blurb: "Seed'inin parçası olmayan bir ödeme anahtarı — paranı hiç ellemeden istediğin an döndür." clean_slate_blurb: "Temiz bir sayfa mı istiyorsun? İstediğin zaman yepyeni bir anahtar tak — yeni sen eskisine bağlı değil. Aynı cüzdan, yeni yüz." pick_username: "Bir kullanıcı adı seç — isteğe bağlı" @@ -734,7 +734,7 @@ goblin: username_field_hint: "adınız" working: "Çalışıyor…" claim_username: "Kullanıcı adı al" - available_when_connected: "Mixnet bağlandığında müsait — ya da atla ve sonra al." + available_when_connected: "Tor bağlandığında müsait — ya da atla ve sonra al." youre: "Sen %{name}'sin" claimed_title: "%{name} artık senin" claimed_blurb: "Arkadaşların artık sana adınla ödeme yapabilir. Her şey hazır — cüzdanını aç." @@ -792,11 +792,11 @@ goblin: row_they_pay: "Onlar öder" row_they_pay_val: "Yalnızca onaylarlarsa" row_delivery: "Teslimat" - row_delivery_val: "NIP-44 şifreli, Nym üzerinden" + row_delivery_val: "NIP-44 şifreli, Tor üzerinden" row_network_fee: "Ağ ücreti" row_network_fee_val: "Bakiyenden düşülür" row_privacy: "Gizlilik" - row_privacy_val: "Mimblewimble + Nym" + row_privacy_val: "Mimblewimble + Tor" send_request_btn: "İstek gönder" request_approve_hint: "Onaylamaları için bir istek alacaklar" hold_to_send: "Göndermek için basılı tut" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 0b132ff..20cbff3 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -359,9 +359,9 @@ keyboard: goblin: home: anonymous: "匿名" - connected_nym: "已通过 Nym 连接" - nym_ready: "Nym 就绪 · 连接中继…" - connecting_nym: "正在连接 Nym…" + connected_nym: "已通过 Tor 连接" + nym_ready: "Tor 就绪 · 连接中继…" + connecting_nym: "正在连接 Tor…" cant_reach_node: "无法连接节点" node_synced: "节点已同步" syncing: "同步中…" @@ -416,7 +416,7 @@ goblin: fee_none: "无" network_fee: "网络费用" privacy: "隐私" - privacy_value: "Mimblewimble + Nym" + privacy_value: "Mimblewimble + Tor" transaction: "交易" cancel_request: "取消请求" cancel_send: "取消付款" @@ -474,7 +474,7 @@ goblin: switch_wallet: "切换钱包" advanced: "高级" privacy: "隐私" - mixnet_routing: "mixnet 路由" + mixnet_routing: "Tor 路由" messages_lookups: "消息和查询" auto_accept: "自动接受" pairing: "价格货币" @@ -497,7 +497,7 @@ goblin: goblin: "Goblin" build: "构建 %{build}" network: "网络" - network_value: "MW + Nym mixnet + nostr" + network_value: "MW + Tor + nostr" third_party: "第三方" grim: "GRIM(上游钱包)" grin_node: "Grin 节点" @@ -617,14 +617,14 @@ goblin: hide_qr: "隐藏二维码" privacy: title: "网络隐私" - intro: "Goblin 通过 Nym mixnet 发送其私密流量 — 这是一个五跳网络,可隐藏通信双方的身份,使中继无法将付款关联到你。" + intro: "Goblin 通过 Tor 发送其私密流量,向中继隐藏你的 IP — 加密隐藏其余部分,使中继无法将付款关联到你。" payments: "付款" payments_blurb: "每条携带 slatepack 的 nostr 消息。" usernames: "用户名" usernames_blurb: "往返 goblin.st 的 NIP-05 名称查询。" price_avatars: "价格" price_avatars_blurb: "金额旁显示的实时法币汇率。" - over_mixnet: "经由 mixnet" + over_mixnet: "经由 Tor" direct_connection: "直接连接" grin_node: "Grin 节点" grin_node_blurb: "区块同步及向网络广播你的交易。这是公开的链上数据,对所有人都一样,且不与你的身份关联。" @@ -632,7 +632,7 @@ goblin: title: "配对" intro: "你的余额和金额以何种货币显示。" pair_with: "配对货币" - rates_note: "汇率仅在开启配对时通过 Nym mixnet 获取 — 关闭后不会有任何汇率请求离开你的设备。" + rates_note: "汇率仅在开启配对时通过 Tor 获取 — 关闭后不会有任何汇率请求离开你的设备。" relays: title: "中继" intro: "付款消息会镜像到下方每个中继;只要有一个可达的中继即可收款。" @@ -674,7 +674,7 @@ goblin: private_money_head: "私密货币" private_money_body: "Goblin 是一个 grin 钱包 — 链上无金额、无地址的数字现金。" send_like_message_head: "像发消息一样付款" - send_like_message_body: "向 username 或 npub 付款,款项会作为端到端加密消息通过 nostr 和 Nym mixnet 送达 — 中间任何人都看不到金额或参与者。" + send_like_message_body: "向 username 或 npub 付款,款项会作为端到端加密消息通过 nostr 和 Tor 送达 — 中间任何人都看不到金额或参与者。" yours_alone_head: "完全属于你" yours_alone_body: "密钥、用户名和历史记录都存于本设备。基于 GRIM 钱包构建。" get_started: "开始使用" @@ -725,8 +725,8 @@ goblin: kicker: "步骤 3 / 3 · 身份" title: "你的付款身份" key_being_made: "正在生成密钥…" - connected_nym: "已通过 Nym 连接" - connecting_nym: "正在通过 Nym 连接…" + connected_nym: "已通过 Tor 连接" + connecting_nym: "正在通过 Tor 连接…" fresh_key_blurb: "一个不属于助记词的支付密钥——可随时轮换以保护隐私,且不影响你的资金。" clean_slate_blurb: "想要全新开始?随时换上一个全新密钥 — 新的你与旧的毫无关联。同一个钱包,焕然一新。" pick_username: "选择用户名 — 可选" @@ -734,7 +734,7 @@ goblin: username_field_hint: "你的用户名" working: "处理中…" claim_username: "注册用户名" - available_when_connected: "mixnet 连接后可用 — 或跳过,稍后注册。" + available_when_connected: "Tor 连接后可用 — 或跳过,稍后注册。" youre: "你是 %{name}" claimed_title: "%{name} 已归你所有" claimed_blurb: "朋友现在可以用你的用户名向你付款。一切就绪——打开钱包吧。" @@ -792,11 +792,11 @@ goblin: row_they_pay: "对方支付" row_they_pay_val: "仅当对方同意时" row_delivery: "传输" - row_delivery_val: "NIP-44 加密,经由 Nym" + row_delivery_val: "NIP-44 加密,经由 Tor" row_network_fee: "网络费用" row_network_fee_val: "从你的余额中扣除" row_privacy: "隐私" - row_privacy_val: "Mimblewimble + Nym" + row_privacy_val: "Mimblewimble + Tor" send_request_btn: "发送请求" request_approve_hint: "对方将收到一条待同意的请求" hold_to_send: "长按发送" diff --git a/src/gui/views/goblin/mod.rs b/src/gui/views/goblin/mod.rs index 0011297..c256c02 100644 --- a/src/gui/views/goblin/mod.rs +++ b/src/gui/views/goblin/mod.rs @@ -795,9 +795,9 @@ impl GoblinWalletView { ui.label( // Relay-gated: "Connected over Nym" only once a // relay is live on the current tunnel generation. - RichText::new(if crate::nym::transport_ready() { + RichText::new(if crate::tor::transport_ready() { t!("goblin.home.connected_nym") - } else if crate::nym::is_ready() { + } else if crate::tor::is_ready() { t!("goblin.home.nym_ready") } else { t!("goblin.home.connecting_nym") @@ -2412,9 +2412,9 @@ impl GoblinWalletView { // tunnel being warm is not enough — a relay must actually carry // our traffic on the current exit. Otherwise show the tunnel is // up but relays are still connecting/reconnecting. - let mixnet = if crate::nym::transport_ready() { + let mixnet = if crate::tor::transport_ready() { t!("goblin.home.connected_nym") - } else if crate::nym::is_ready() { + } else if crate::tor::is_ready() { t!("goblin.home.nym_ready") } else { t!("goblin.home.connecting_nym") @@ -2435,7 +2435,7 @@ impl GoblinWalletView { .font(FontId::new(12.0, fonts::regular())) .color(t.surface_text_mute), ); - if !crate::nym::transport_ready() || !connected { + if !crate::tor::transport_ready() || !connected { ui.ctx() .request_repaint_after(std::time::Duration::from_millis(600)); } diff --git a/src/gui/views/goblin/onboarding.rs b/src/gui/views/goblin/onboarding.rs index 6a90880..ea1e3cb 100644 --- a/src/gui/views/goblin/onboarding.rs +++ b/src/gui/views/goblin/onboarding.rs @@ -804,7 +804,7 @@ impl OnboardingContent { ui.label( // Relay-gated readiness: "connected over Nym" only once a // relay is actually live, not merely when the tunnel is warm. - RichText::new(if crate::nym::transport_ready() { + RichText::new(if crate::tor::transport_ready() { t!("goblin.onboarding.identity.connected_nym") } else { t!("goblin.onboarding.identity.connecting_nym") diff --git a/src/http/price.rs b/src/http/price.rs index 0dd931c..4915d2f 100644 --- a/src/http/price.rs +++ b/src/http/price.rs @@ -24,7 +24,7 @@ use std::collections::{HashMap, HashSet}; use std::time::{Duration, SystemTime, UNIX_EPOCH}; use crate::AppConfig; -use crate::nym; +use crate::tor; /// Cache refresh interval (seconds). const REFRESH_SECS: i64 = 300; @@ -154,7 +154,7 @@ pub fn eager_refresh() { .build() .unwrap(); rt.block_on(async { - let generation = nym::tunnel_generation(); + let generation = tor::tunnel_generation(); let mut ok = false; for attempt in 1..=PROBE_ATTEMPTS { match tokio::time::timeout(PROBE_TIMEOUT, fetch_rate(&vs)).await { @@ -175,8 +175,8 @@ pub fn eager_refresh() { // generation we probed: the exit is up but blackholing our HTTP. Condemn // it so a fresh exit is selected in seconds, not minutes. Guarded to the // probed generation so a reselect that already happened is never hit. - if !ok && nym::is_ready() && nym::tunnel_generation() == generation { - nym::condemn_exit(generation); + if !ok && tor::is_ready() && tor::tunnel_generation() == generation { + tor::condemn_exit(generation); } }); FETCHING.write().remove(&vs); @@ -191,7 +191,7 @@ async fn fetch_rate(vs: &str) -> Option { // CoinGecko rejects requests without a User-Agent (403). A static, // non-identifying UA is fine over the mixnet. let headers = vec![("User-Agent".to_string(), "goblin-wallet".to_string())]; - let body = nym::http_request("GET", url, None, headers).await?; + let body = tor::http_request("GET", url, None, headers).await?; let parsed: Option = serde_json::from_str::(&body) .ok() .and_then(|doc| doc.get("grin")?.get(vs)?.as_f64()); diff --git a/src/lib.rs b/src/lib.rs index 3a78cf1..ace2130 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -38,8 +38,14 @@ mod http; pub mod logger; mod node; pub mod nostr; +/// The old Nym-mixnet transport, DORMANT since the Tor swap. Retained on disk but +/// only compiled with `--features nym` (its nym-sdk deps link a different +/// libsqlite3-sys than arti and cannot coexist with Tor in one binary). Deletion +/// is a later phase. +#[cfg(feature = "nym")] pub mod nym; mod settings; +pub mod tor; mod wallet; /// Upstream GRIM version the fork is based on (third-party credit). @@ -117,11 +123,12 @@ pub fn start(options: NativeOptions, app_creator: eframe::AppCreator) -> eframe: // would panic on the first TLS handshake. nym uses its own explicit provider, // so this only steers our relay/HTTP TLS. Idempotent (Err if already set). let _ = rustls::crypto::ring::default_provider().install_default(); - // Pre-warm the in-process Nym mixnet tunnel FIRST, before i18n/node setup, so - // the mixnet bootstrap (the long pole on cold start) overlaps everything else - // and price/NIP-05/nostr are ready at first use. All of Goblin's outbound - // traffic egresses through it; nothing clearnet. - nym::warm_up(); + // Pre-warm the embedded Tor client FIRST, before i18n/node setup, so the Tor + // bootstrap (the long pole on cold start) overlaps everything else and + // price/NIP-05/nostr are ready at first use. All of Goblin's relay + HTTP + // traffic egresses through Tor; the Grin node stays on the clear internet + // exactly as before (its lazy warm-on-activity polling is untouched). + tor::warm_up(); // Seed the price cache from disk so the amount preview can paint an instant // (stale-marked) fiat value while the first live fetch is still in flight. crate::http::price::seed_from_disk(); diff --git a/src/nostr/client.rs b/src/nostr/client.rs index 3125a80..d71a587 100644 --- a/src/nostr/client.rs +++ b/src/nostr/client.rs @@ -35,7 +35,7 @@ use crate::nostr::relays::MAX_DM_RELAYS; use crate::nostr::types::*; use crate::nostr::wrapv3; use crate::nostr::{NostrConfig, NostrIdentity, NostrStore}; -use crate::nym::NymWebSocketTransport; +use crate::tor::TorWebSocketTransport; use crate::wallet::Wallet; use crate::wallet::types::WalletTask; @@ -61,10 +61,10 @@ const FETCH_TIMEOUT: Duration = Duration::from_secs(30); const SEND_TIMEOUT: Duration = Duration::from_secs(40); /// Money-path safety: a payment/control DM is only reported "sent" once a relay /// is confirmed to actually hold the gift wrap. A transport-write success is NOT -/// proof of delivery — over the scoped Nym exit a multi-fragment wrap can trail -/// its local "sent" by many seconds to minutes (exit backpressure / gateway -/// bandwidth), so reporting on the write alone silently loses payments. Total -/// budget to confirm via read-back before surfacing failure to the caller. +/// proof of delivery — over the transport a wrap can trail its local "sent" by +/// seconds (transport buffering / a slow relay), so reporting on the write alone +/// silently loses payments. Total budget to confirm via read-back before +/// surfacing failure to the caller. const CONFIRM_TIMEOUT: Duration = Duration::from_secs(30); /// Per-attempt read-back timeout while confirming (short, so one dead relay /// doesn't consume the whole confirm budget in a single poll). @@ -615,13 +615,12 @@ impl NostrService { let event_id = res.val; // SILENT-LOSS GUARD (money-path safety). `send_*_to` returns success the - // moment the gift wrap is written to the (mixnet) transport sink — NOT - // when a relay has actually stored it. Over the scoped Nym exit a - // multi-fragment wrap can trail its local "sent" by many seconds to - // minutes (exit backpressure / gateway bandwidth), so a bare success is a - // FALSE "sent" that silently loses the payment. Require a genuine - // read-back: poll the target relays for the event id (it may still be - // egressing right after send) until one confirms it holds the wrap, or the + // moment the gift wrap is written to the transport sink — NOT when a relay + // has actually stored it. Over the transport a wrap can trail its local + // "sent" by seconds (transport buffering / a slow relay), so a bare success + // is a FALSE "sent" that silently loses the payment. Require a genuine + // read-back: poll the target relays for the event id (it may still be in + // flight right after send) until one confirms it holds the wrap, or the // CONFIRM_TIMEOUT budget is spent — then surface failure so the caller // retries / falls back instead of dropping the payment. let confirm_filter = Filter::new().id(event_id).limit(1); @@ -870,32 +869,27 @@ async fn run_service(svc: Arc, wallet: Wallet) { let client = Client::builder() .signer(svc.keys.clone()) - .websocket_transport(NymWebSocketTransport) + .websocket_transport(TorWebSocketTransport) .build(); - // Wait for the in-process Nym mixnet tunnel before any network work - // (relay dials, pool refresh, NIP-11 probes). `warm_up()` starts it at - // launch, but a fast wallet-open can beat the cold mixnet bootstrap — and - // dialing before it's up drops every relay into nostr-sdk's backing-off - // reconnect, leaving the wallet on "Connecting…" long after the mixnet is - // actually ready. Once it's warm this returns immediately. - for i in 0..60u32 { - if crate::nym::is_ready() { + // Wait for the embedded Tor client before any network work (relay dials, pool + // refresh, NIP-11 probes). `warm_up()` starts it at launch, but a fast + // wallet-open can beat the cold Tor bootstrap — and dialing before it's up + // drops every relay into nostr-sdk's backing-off reconnect, leaving the wallet + // on "Connecting…" long after Tor is actually ready. Once it's bootstrapped + // this returns immediately. + for i in 0..240u32 { + if crate::tor::is_ready() { if i > 0 { - info!( - "nostr: Nym tunnel ready after ~{}ms, dialing relays", - i * 500 - ); + info!("nostr: Tor ready after ~{}ms, dialing relays", i * 500); } break; } tokio::time::sleep(Duration::from_millis(500)).await; } - // We are now a relay consumer: arm nymproc's relay-reachability governance of - // exit health for our lifetime, so a DNS-ok-but-relay-dead exit gets - // condemned. Disarmed when the loop exits (see below), so plain HTTP-only - // usage of the tunnel never condemns an otherwise-healthy exit. - crate::nym::set_relay_consumer(true); - // Refresh the relay candidate pool cache (gist over Nym) when stale. + // We are now a relay consumer (API parity with the old transport; inert under + // Tor, which manages its own circuit health). Disarmed when the loop exits. + crate::tor::set_relay_consumer(true); + // Refresh the relay candidate pool cache (gist over Tor) when stale. tokio::spawn(crate::nostr::pool::refresh_if_stale()); // Select this identity's advertised relay set if it hasn't one yet. ensure_advertised_set(&svc).await; @@ -906,59 +900,19 @@ async fn run_service(svc: Arc, wallet: Wallet) { svc.npub(), relays ); - // Prewarm mix-dns for the hosts we're about to (or will soon) hit — the - // relays being dialed, the NIP-05 name authority (Claim username), and the - // price API — so those resolutions are already cached by the time the user - // acts, rather than each paying a cold mixnet round trip inline. The node host - // is NOT here — it never rides the mixnet. - // - // Unlike before this no longer silently SKIPS when the tunnel isn't up yet - // (the cold-start case that used to leave the first relay dial to a cold DoT - // round trip): it WAITS for the tunnel, prewarms, then keeps the entries hot - // by re-prewarming on a cadence below the DNS cache TTL floor, so known/stable - // hosts are refreshed in the background before they can expire. - { - let mut hosts: Vec = relays - .iter() - .filter_map(|r| nostr_sdk::Url::parse(r).ok()) - .filter_map(|u| u.host_str().map(|h| h.to_string())) - .collect(); - // The name authority, both from this service's config and the process-wide - // configured home domain (they're normally the same; dedup below folds it). - hosts.push(svc.config.read().home_domain()); - hosts.push(crate::nostr::nip05::home_domain()); - hosts.push("api.coingecko.com".to_string()); - hosts.retain(|h| !h.is_empty()); - hosts.sort(); - hosts.dedup(); - tokio::spawn(async move { - // Wait out the cold start rather than skipping the prewarm entirely. - let Some(tunnel) = crate::nym::nymproc::wait_for_tunnel(Duration::from_secs(60)).await - else { - return; - }; - crate::nym::dns::prewarm(&tunnel, &hosts).await; - // Keep the entries warm: re-prewarm every 45s (below the 60s TTL - // floor) so a stable host never expires out of the cache between - // uses. Picks up the current tunnel each cycle, so it survives exit - // reselects. - loop { - tokio::time::sleep(Duration::from_secs(45)).await; - if let Some(t) = crate::nym::nymproc::tunnel() { - crate::nym::dns::prewarm(&t, &hosts).await; - } - } - }); - } + // (No DNS prewarm here: unlike the old mixnet path, arti resolves relay and + // HTTP hostnames internally as part of the circuit dial — there is no + // separate in-tunnel DoT round trip to warm. The node host was never on this + // path and still isn't — it never rides the private transport.) for relay in &relays { if let Err(e) = client.add_relay(relay.clone()).await { warn!("nostr: add relay {relay} failed: {e}"); } } - // The tunnel generation these relays are being dialed on. If the exit is - // later reselected (generation bumped by nymproc), the status loop drops - // these now-dead sockets and re-dials through the fresh tunnel. - let mut dial_gen = crate::nym::tunnel_generation(); + // The transport generation these relays are being dialed on. With Tor this is + // stable (arti rebuilds circuits transparently), so the reselect-driven + // re-dial below simply never fires — the status loop still re-checks liveness. + let mut dial_gen = crate::tor::tunnel_generation(); let connect_started = std::time::Instant::now(); client.connect().await; { @@ -1000,7 +954,7 @@ async fn run_service(svc: Arc, wallet: Wallet) { // window as soon as the exit is proven to carry relay traffic, // independent of the up-to-30s catch-up fetch below (a slow // catch-up must not get a good exit wrongly condemned). - crate::nym::report_relay_live(report_gen); + crate::tor::report_relay_live(report_gen); return; } if svc_probe.shutdown.load(Ordering::SeqCst) @@ -1080,7 +1034,7 @@ async fn run_service(svc: Arc, wallet: Wallet) { // actual connected+subscribed relay on THIS tunnel generation, not merely a // warm tunnel — and so nymproc's relay-readiness window closes successfully. if connected { - crate::nym::report_relay_live(dial_gen); + crate::tor::report_relay_live(dial_gen); } let mut notifications = client.notifications(); @@ -1123,7 +1077,7 @@ async fn run_service(svc: Arc, wallet: Wallet) { // subscription — a reselect thus transparently restores // receive+send. (An individual relay bounce with the exit still // healthy is left to nostr-sdk's own auto-reconnect + resubscribe.) - let generation = crate::nym::tunnel_generation(); + let generation = crate::tor::tunnel_generation(); if generation != dial_gen { info!("nostr: tunnel reselected (gen {dial_gen} -> {generation}); re-dialing relays over the new exit"); redial_on_new_tunnel(&client, &relays, &filter).await; @@ -1135,9 +1089,9 @@ async fn run_service(svc: Arc, wallet: Wallet) { // a live relay closes/keeps-open nymproc's readiness window; all // relays down for too long condemns the exit and reselects. if connected { - crate::nym::report_relay_live(dial_gen); + crate::tor::report_relay_live(dial_gen); } else { - crate::nym::report_relay_down(dial_gen); + crate::tor::report_relay_down(dial_gen); } let now = unix_time(); if now - last_heartbeat >= 30 { @@ -1181,7 +1135,7 @@ async fn run_service(svc: Arc, wallet: Wallet) { // No longer a relay consumer: disarm relay-reachability governance so the // idle tunnel isn't condemned for "no relay" once we stop dialing. - crate::nym::set_relay_consumer(false); + crate::tor::set_relay_consumer(false); { let mut w_client = svc.client.write(); *w_client = None; diff --git a/src/nostr/nip05.rs b/src/nostr/nip05.rs index fc104a0..6cd28f5 100644 --- a/src/nostr/nip05.rs +++ b/src/nostr/nip05.rs @@ -22,7 +22,7 @@ use serde_json::Value; use sha2::{Digest, Sha256}; use crate::nostr::relays::HOME_NIP05_DOMAIN; -use crate::nym; +use crate::tor; use parking_lot::RwLock; /// The active name-authority "home" domain, mirrored here from the wallet config @@ -102,7 +102,7 @@ pub async fn resolve(name: &str, domain: &str) -> Option { domain, urlencode(name) ); - let body = nym::http_request("GET", url, None, vec![]).await?; + let body = tor::http_request("GET", url, None, vec![]).await?; parse_well_known(&body, name) } @@ -120,7 +120,7 @@ pub async fn name_by_pubkey(domain: &str, pubkey_hex: &str) -> Option { domain, urlencode(pubkey_hex) ); - let body = nym::http_request("GET", url, None, vec![]).await?; + let body = tor::http_request("GET", url, None, vec![]).await?; let doc: Value = serde_json::from_str(&body).ok()?; doc.get("name") .and_then(|v| v.as_str()) @@ -159,7 +159,7 @@ pub async fn check(pubkey: &PublicKey, name: &str, domain: &str) -> Nip05Check { domain, urlencode(name) ); - let Some(body) = nym::http_request("GET", url, None, vec![]).await else { + let Some(body) = tor::http_request("GET", url, None, vec![]).await else { return Nip05Check::Unreachable; }; check_body(&body, pubkey, name) @@ -218,7 +218,7 @@ pub async fn check_availability(server: &str, name: &str) -> Availability { server.trim_end_matches('/'), urlencode(name) ); - let body = match nym::http_request("GET", url, None, vec![]).await { + let body = match tor::http_request("GET", url, None, vec![]).await { Some(b) => b, None => return Availability::Unknown, }; @@ -284,7 +284,7 @@ pub async fn register(server: &str, name: &str, keys: &Keys) -> RegisterResult { ("Authorization".to_string(), auth), ("Content-Type".to_string(), "application/json".to_string()), ]; - let Some(resp) = nym::http_request("POST", url, Some(body), headers).await else { + let Some(resp) = tor::http_request("POST", url, Some(body), headers).await else { return RegisterResult::Network; }; let Ok(doc) = serde_json::from_str::(&resp) else { @@ -313,7 +313,7 @@ pub async fn unregister(server: &str, name: &str, keys: &Keys) -> Result<(), Str return Err("couldn't sign the request".to_string()); }; let headers = vec![("Authorization".to_string(), auth)]; - match nym::http_request("DELETE", url, None, headers).await { + match tor::http_request("DELETE", url, None, headers).await { Some(resp) if resp.contains("\"released\":true") => Ok(()), Some(resp) => Err(serde_json::from_str::(&resp) .ok() @@ -328,7 +328,7 @@ pub async fn unregister(server: &str, name: &str, keys: &Keys) -> Result<(), Str pub async fn fetch_profile(server: &str, name: &str) -> Option> { let server = server.trim_end_matches('/'); let url = format!("{}/api/v1/profile/{}", server, urlencode(name)); - let (code, raw) = nym::http_request_bytes("GET", url, None, vec![]).await?; + let (code, raw) = tor::http_request_bytes("GET", url, None, vec![]).await?; if code == 404 { return Some(None); } @@ -347,7 +347,7 @@ pub async fn fetch_avatar(server: &str, hash: &str) -> Option> { } let server = server.trim_end_matches('/'); let url = format!("{}/api/v1/avatar/{}.png", server, hash); - let (code, raw) = nym::http_request_bytes("GET", url, None, vec![]).await?; + let (code, raw) = tor::http_request_bytes("GET", url, None, vec![]).await?; if code != 200 || raw.len() > 1_048_576 || !raw.starts_with(&[0x89, b'P', b'N', b'G']) { return None; } diff --git a/src/nostr/pool.rs b/src/nostr/pool.rs index 356996a..2cd8034 100644 --- a/src/nostr/pool.rs +++ b/src/nostr/pool.rs @@ -66,7 +66,7 @@ const PINNED_POOL: &str = r#"{ "notes": "Goblin wallet relay candidate pool. Clients verify each entry locally (NIP-11 probe) before use. Requirements: max_message_length >= 131072, no payment or auth required for writes, tolerates NIP-59 backdating. The optional per-relay 'exit' is that operator's co-located scoped mixnet exit (Recipient address): a MixnetStream the wallet dials directly to reach the relay with no public DNS and no public IPR — the fast money path.", "min_message_length": 131072, "relays": [ - { "url": "wss://relay.floonet.dev", "roles": ["dm", "discovery"], "vetted": "2026-07-02", "exit": "EqbUPt7aYkar2CTmjBVnyWaKzb2WT8NdojUGXU4mrfNG.AF5YCD8hgEUqByamrPqZz72h7GE599LbqQrhaew9bBip@HfyUPUv4z8uMQoZYuZGMWf6oe2vaKBVPrfgHk6WvwFPe" }, + { "url": "wss://relay.floonet.dev", "roles": ["dm", "discovery"], "vetted": "2026-07-02", "exit": "EqbUPt7aYkar2CTmjBVnyWaKzb2WT8NdojUGXU4mrfNG.AF5YCD8hgEUqByamrPqZz72h7GE599LbqQrhaew9bBip@HfyUPUv4z8uMQoZYuZGMWf6oe2vaKBVPrfgHk6WvwFPe", "onion": "m2ji5o6p6qapd4ies4wua64skjx2emd6lrp7hhvrib33ogveyihopryd.onion" }, { "url": "wss://relay.primal.net", "roles": ["dm"], "vetted": "2026-07-01" }, { "url": "wss://relay.damus.io", "roles": ["dm"], "vetted": "2026-07-01" }, { "url": "wss://nos.lol", "roles": ["dm"], "vetted": "2026-07-01" }, @@ -103,6 +103,16 @@ pub struct PoolRelay { /// it is meant to replace. #[serde(default)] pub exit: Option, + /// This relay's pinned `.onion` address (`.onion`, optional `:port`), + /// when its operator fronts the relay with a Tor onion service. The wallet + /// dials this over embedded Tor and speaks PLAIN websocket to it (the onion + /// connection is already encrypted+authenticated end to end). Absent → the + /// relay is reached over a Tor exit to its clearnet host instead. Added beside + /// `exit` the same tolerant way (no `deny_unknown_fields`, `version` stays 1), + /// so OLDER builds simply ignore it — no schema break, no flag day. Carried in + /// the pinned pool so the money-path relay's onion bootstraps OFFLINE. + #[serde(default)] + pub onion: Option, } impl PoolRelay { @@ -189,6 +199,27 @@ impl RelayPool { .iter() .any(|r| r.exit.as_deref().is_some_and(|e| !e.trim().is_empty())) } + + /// The pinned `.onion` for `url`, if the pool advertises one (url compared + /// modulo a trailing slash). `None` → reach the relay over a Tor exit to its + /// clearnet host. This is how the wallet learns the money-path relay's onion + /// (see [`PoolRelay::onion`]). + pub fn onion_for(&self, url: &str) -> Option { + let want = url.trim_end_matches('/'); + self.relays + .iter() + .find(|r| r.url.trim_end_matches('/') == want) + .and_then(|r| r.onion.clone()) + .filter(|o| !o.trim().is_empty()) + } + + /// Whether ANY relay in the pool pins an `.onion`. Used to prefer a pool that + /// carries the money-path onion (see [`load`]). + pub fn has_onion(&self) -> bool { + self.relays + .iter() + .any(|r| r.onion.as_deref().is_some_and(|o| !o.trim().is_empty())) + } } /// Disk path of the cached pool file. @@ -202,12 +233,12 @@ pub fn load() -> RelayPool { std::fs::read_to_string(cache_path()) .ok() .and_then(|raw| RelayPool::parse(&raw)) - // A cache written by a pre-exit build parses fine but hides the - // scoped-exit money path (and the current primary relay) for up to - // CACHE_MAX_AGE_SECS after an app update — relay connects then ride - // the slow public-IPR path for days. The pinned pool is newer than - // any exit-less file, so prefer it until the next gist refresh. - .filter(RelayPool::has_exit) + // A cache written by a pre-Tor build parses fine but hides the onion + // money path (and the current primary relay) for up to CACHE_MAX_AGE_SECS + // after an app update — relay connects then have no onion to dial for days. + // The pinned pool is newer than any onion-less file, so prefer it until the + // next gist refresh. + .filter(RelayPool::has_onion) .unwrap_or_else(|| RelayPool::parse(PINNED_POOL).expect("pinned pool parses")) } @@ -226,17 +257,17 @@ pub async fn refresh_if_stale() { .and_then(|t| t.elapsed().ok()) .map(|age| age.as_secs() < CACHE_MAX_AGE_SECS) .unwrap_or(false) - // An exit-less cache predates the current pool shape (see `load`, + // An onion-less cache predates the current pool shape (see `load`, // which already ignores it) — replace it now instead of serving the // pinned fallback for the rest of the file's 7 days. && std::fs::read_to_string(&path) .ok() .and_then(|raw| RelayPool::parse(&raw)) - .is_some_and(|p| p.has_exit()); + .is_some_and(|p| p.has_onion()); if fresh { return; } - let Some(raw) = crate::nym::http_request("GET", POOL_URL.to_string(), None, vec![]).await + let Some(raw) = crate::tor::http_request("GET", POOL_URL.to_string(), None, vec![]).await else { warn!("relay pool: refresh fetch failed, keeping current pool"); return; @@ -305,7 +336,7 @@ pub async fn probe(url: &str) -> bool { let headers = vec![("Accept".to_string(), "application/nostr+json".to_string())]; let ok = tokio::time::timeout( PROBE_TIMEOUT, - crate::nym::http_request("GET", http_url, None, headers), + crate::tor::http_request("GET", http_url, None, headers), ) .await .ok() @@ -385,6 +416,15 @@ mod tests { assert_eq!(dm.len(), 10); assert!(dm.iter().any(|r| r.url == "wss://relay.floonet.dev")); assert!(dm.iter().all(|r| r.vetted.is_some())); + // The money-path relay pins its .onion so the Tor transport bootstraps + // OFFLINE, before any network; every other relay is onion-less (reached + // over a Tor exit). + assert!(pool.has_onion()); + assert_eq!( + pool.onion_for("wss://relay.floonet.dev"), + Some("m2ji5o6p6qapd4ies4wua64skjx2emd6lrp7hhvrib33ogveyihopryd.onion".to_string()) + ); + assert!(pool.onion_for("wss://nos.lol").is_none()); let disc = pool.discovery_relays(); // relay.floonet.dev carries both roles; the two indexers // are discovery-only. @@ -505,6 +545,7 @@ mod tests { roles: vec!["dm".to_string()], vetted: vetted.then(|| "2026-07-01".to_string()), exit: None, + onion: None, }; vec![ mk("wss://a.example", false), @@ -530,6 +571,7 @@ mod tests { roles: vec!["dm".to_string()], vetted: Some("2026-07-01".to_string()), exit: None, + onion: None, }); let order = weighted_order("wss://relay.goblin.st", &with_goblin, |_| 0); assert_eq!(order.len(), 4); diff --git a/src/tor/engine.rs b/src/tor/engine.rs new file mode 100644 index 0000000..36890fe --- /dev/null +++ b/src/tor/engine.rs @@ -0,0 +1,282 @@ +// Copyright 2026 The Goblin Developers +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Embedded Tor (arti) client — the DIALING half only. Copied from our sister +//! wallet GRIM's proven, shipping engine (`grim/src/tor/`), stripped to what +//! Goblin needs: connect OUT to the relay's `.onion` (and to clearnet HTTP hosts +//! through a Tor exit). Goblin never HOSTS an onion service (GRIM's receiving +//! half), so the onion-service hosting, keystore-seeding and reverse-proxy code +//! is dropped. +//! +//! Two technical choices are inherited VERBATIM from GRIM because it already paid +//! for them: **arti 0.43** across the arti family, and the **native-tls Tor +//! runtime** ([`TokioNativeTlsRuntime`]) — deliberately NOT rustls, to sidestep +//! the rustls/ring crypto-provider conflict Goblin fought during the Nym era. +//! +//! The arti client runs on its OWN dedicated tokio runtime (created once, kept +//! alive for the process). `TorClient::connect()` returns a [`DataStream`] that +//! is `AsyncRead + AsyncWrite`; that byte source is handed to the websocket layer +//! ([`super::transport`]) and the HTTP layer ([`super`]), each driven by their +//! own caller runtime — a `DataStream` is runtime-agnostic once the client's +//! circuit tasks are running on the arti runtime. + +use std::sync::Arc; +use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; +use std::time::{Duration, Instant}; +use std::{fs, thread}; + +use arti_client::config::TorClientConfigBuilder; +use arti_client::{DataStream, TorClient, TorClientConfig}; +use lazy_static::lazy_static; +use log::{error, info, warn}; +use parking_lot::RwLock; +use tor_rtcompat::SpawnExt; +use tor_rtcompat::tokio::TokioNativeTlsRuntime; + +/// The Tor runtime type — native-tls, matching GRIM (never rustls). +type Runtime = TokioNativeTlsRuntime; +/// The concrete arti client type. +pub type Client = TorClient; + +/// How long a single cold Tor bootstrap may take before we declare it failed and +/// let a later `warm_up()`/`wait_ready()` retry. A cold bootstrap with no cached +/// consensus can take tens of seconds; a warm one (cached dir) is a few. +const BOOTSTRAP_TIMEOUT: Duration = Duration::from_secs(90); + +lazy_static! { + /// Process-lifetime Tor state. The dedicated arti runtime lives here so its + /// worker threads (which drive every circuit) persist for the whole process. + static ref TOR: Tor = Tor::new(); +} + +struct Tor { + /// The dedicated arti runtime (native-tls). All arti tasks run on this. + runtime: Runtime, + /// The bootstrapped client, once it is up. + client: RwLock>>, + /// Guards the background bootstrap so `warm_up()` is idempotent. + launching: AtomicBool, +} + +impl Tor { + fn new() -> Self { + Self { + runtime: TokioNativeTlsRuntime::create().expect("create tor runtime"), + client: RwLock::new(None), + launching: AtomicBool::new(false), + } + } +} + +// --- Readiness signals (re-pointed from `nym::nymproc`, same semantics) ------- + +/// Set once arti has bootstrapped (mirrors `TUNNEL_GEN != 0`); cheap to poll. +static READY: AtomicBool = AtomicBool::new(false); + +/// Monotonic "transport generation". With Tor there is no exit-reselect churn — +/// arti rebuilds circuits transparently under the `DataStream` — so this simply +/// becomes 1 once bootstrapped and stays there. The relay-gated readiness logic +/// (copied from nym) still works: a relay-liveness report tagged with an older +/// generation can never mark a newer transport ready. +static TUNNEL_GEN: AtomicU64 = AtomicU64::new(0); + +/// The generation on which the nostr client currently has a relay connected AND +/// subscribed, or 0 for "no relay live". A single atomic so [`transport_ready`] +/// can compare it to `TUNNEL_GEN` in one shot. +static RELAY_LIVE_GEN: AtomicU64 = AtomicU64::new(0); + +/// Whether a nostr consumer currently wants relays over Tor. Kept for API parity +/// with the nym transport (the UI/service bracket it); Tor needs no exit-health +/// governance, so it is otherwise inert. +static RELAY_CONSUMER: AtomicBool = AtomicBool::new(false); + +/// Pre-warm the embedded Tor client in the background so relays / NIP-05 / price +/// are ready by first use. Idempotent — a call while a bootstrap is in flight, or +/// once one has succeeded, is a no-op. +pub fn warm_up() { + if TOR.client.read().is_some() { + return; + } + if TOR.launching.swap(true, Ordering::SeqCst) { + return; + } + thread::spawn(|| { + bootstrap_once(); + TOR.launching.store(false, Ordering::SeqCst); + }); +} + +/// Whether the embedded Tor client has bootstrapped. Cheap and cached — safe to +/// poll from the UI each frame. Distinct from a relay being connected (see +/// [`transport_ready`]): Tor can be up while no relay yet rides it. +pub fn is_ready() -> bool { + READY.load(Ordering::Relaxed) +} + +/// The current transport generation. The nostr client reads this right before it +/// dials so it can tag its relay-liveness reports. +pub fn tunnel_generation() -> u64 { + TUNNEL_GEN.load(Ordering::Acquire) +} + +/// Relay-gated readiness — the AUTHORITATIVE "ready to receive/send over Tor" +/// signal, distinct from the bootstrap-only [`is_ready`]. True only when Tor is +/// bootstrapped AND a required relay is connected+subscribed on the CURRENT +/// generation, so the UI never shows a false "Connected". +pub fn transport_ready() -> bool { + let generation = TUNNEL_GEN.load(Ordering::Acquire); + generation != 0 && RELAY_LIVE_GEN.load(Ordering::Acquire) == generation && is_ready() +} + +/// Client → transport report: a relay is connected+subscribed on `generation`. +/// `fetch_max` so a late report for an older generation can never move liveness +/// backwards over a newer one. +pub fn report_relay_live(generation: u64) { + RELAY_LIVE_GEN.fetch_max(generation, Ordering::AcqRel); +} + +/// Client → transport report: no relay is currently live on `generation`. Clears +/// liveness only when `generation` is still the live one. +pub fn report_relay_down(generation: u64) { + let _ = RELAY_LIVE_GEN.compare_exchange(generation, 0, Ordering::AcqRel, Ordering::Acquire); +} + +/// Bracket a nostr consumer's lifetime (API parity with the nym transport). Inert +/// for Tor — arti manages its own circuit health — but kept so the service's +/// existing calls compile unchanged. +pub fn set_relay_consumer(active: bool) { + RELAY_CONSUMER.store(active, Ordering::Release); +} + +/// External condemnation request (API parity with the nym transport). Under Tor +/// there is no exit to abandon — arti rebuilds circuits itself — so this is a +/// logged no-op rather than triggering a reselect. +pub fn condemn_exit(generation: u64) { + if generation != 0 { + warn!("tor: condemn_exit(gen {generation}) is a no-op (arti rebuilds circuits itself)"); + } +} + +/// The bootstrapped client, if it is up. Cloning the `Arc` is cheap. +pub fn client() -> Option> { + TOR.client.read().clone() +} + +/// Wait until the embedded Tor client has bootstrapped, starting it if nothing +/// has yet (lazy init on first use). Returns `false` once `timeout` lapses. +pub async fn wait_ready(timeout: Duration) -> bool { + warm_up(); + let deadline = Instant::now() + timeout; + loop { + if is_ready() { + return true; + } + if Instant::now() >= deadline { + return false; + } + tokio::time::sleep(Duration::from_millis(250)).await; + } +} + +/// Open a Tor stream to `host:port`. `host` may be a `.onion` address (dialed as +/// a real onion connection — no exit node) or a clearnet host (dialed through a +/// Tor exit). Returns a [`DataStream`] (`AsyncRead + AsyncWrite`) — the byte +/// source the websocket / HTTP layers wrap. The caller is responsible for its own +/// connect timeout. +pub async fn connect(host: &str, port: u16) -> Result { + let client = client().ok_or_else(|| "tor client not bootstrapped".to_string())?; + client + .connect((host, port)) + .await + .map_err(|e| format!("tor connect to {host}:{port} failed: {e}")) +} + +/// Build the arti client config: fs-backed state + cache in Goblin's base dir, +/// and — crucially — `allow_onion_addrs(true)` so `.onion` targets are dialable +/// (this plus the `onion-service-client` cargo feature is what enables onion +/// connections). Matches GRIM's `build_config`, minus the bridge plumbing Goblin +/// does not use. +fn build_config() -> TorClientConfig { + let mut builder = + TorClientConfigBuilder::from_directories(super::state_path(), super::cache_path()); + builder.address_filter().allow_onion_addrs(true); + builder.build().expect("build tor client config") +} + +/// One bootstrap attempt, driven on the arti runtime (GRIM's proven pattern: +/// spawn the bootstrap on arti's runtime, poll a flag from this thread). On +/// success the client is published and the readiness signals flip. +fn bootstrap_once() { + // Ensure the state/cache dirs exist (arti creates them, but on a fresh device + // the parent must be present first). + let _ = fs::create_dir_all(super::state_path()); + let _ = fs::create_dir_all(super::cache_path()); + + let config = build_config(); + let client = match TorClient::with_runtime(TOR.runtime.clone()) + .config(config) + .create_unbootstrapped() + { + Ok(c) => c, + Err(e) => { + error!("tor: could not create client: {e}"); + return; + } + }; + + let started = Instant::now(); + let bootstrapping = Arc::new(AtomicBool::new(true)); + let success = Arc::new(AtomicBool::new(false)); + let bootstrapping_t = bootstrapping.clone(); + let success_t = success.clone(); + let c = client.clone(); + let spawned = TOR.runtime.spawn(async move { + match tokio::time::timeout(BOOTSTRAP_TIMEOUT, c.bootstrap()).await { + Ok(Ok(())) => success_t.store(true, Ordering::Relaxed), + Ok(Err(e)) => error!("tor: bootstrap error: {e}"), + Err(_) => error!( + "tor: bootstrap timed out after {}s", + BOOTSTRAP_TIMEOUT.as_secs() + ), + } + bootstrapping_t.store(false, Ordering::Relaxed); + }); + if spawned.is_err() { + error!("tor: could not spawn bootstrap task"); + return; + } + // Wait for the bootstrap task to finish. + while bootstrapping.load(Ordering::Relaxed) { + thread::sleep(Duration::from_millis(500)); + } + if !success.load(Ordering::Relaxed) { + return; + } + + // `create_unbootstrapped()` already hands back an `Arc`, so store it + // as-is (no extra wrapping). + TOR.client.write().replace(client); + // A NEW transport is live: publish generation 1 (relay-liveness left over from + // a prior generation is instantly stale) and flip the bootstrap-ready flag. + TUNNEL_GEN.store(1, Ordering::Release); + READY.store(true, Ordering::Release); + info!( + "tor: bootstrapped and ready in {}ms (gen 1)", + started.elapsed().as_millis() + ); + // Eager price fetch the moment Tor is ready (mirrors what the old mixnet + // bootstrap did): prefetch the pairing's rate so the amount preview has a live + // value by first use. One-shot — bootstrap_once only reaches here once. + std::thread::spawn(crate::http::price::eager_refresh); +} diff --git a/src/tor/mod.rs b/src/tor/mod.rs new file mode 100644 index 0000000..80f4963 --- /dev/null +++ b/src/tor/mod.rs @@ -0,0 +1,301 @@ +// Copyright 2026 The Goblin Developers +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Embedded-Tor transport. Everything Goblin sends over the network — nostr relay +//! websockets and every HTTP request (NIP-05, price, relay pool, avatars) — rides +//! Tor, embedded in-process (arti), copied from our sister wallet GRIM's proven, +//! shipping engine. The wallet dials the relay's pinned `.onion` over Tor and +//! speaks PLAIN websocket to it (the onion connection is already encrypted + +//! authenticated end to end — the `.onion` address IS the relay's public key — so +//! a TLS wrapper is redundant and the relay backend does not serve it). Relays +//! WITHOUT a pinned onion (e.g. a recipient's arbitrary DM relay) are reached over +//! a Tor exit to their clearnet host, with the usual TLS for `wss://`. +//! +//! This replaces the Nym-mixnet transport (`crate::nym`, left dormant): Tor is +//! free, unmetered, has no token or grant to expire, and GRIM has already proven +//! the whole embedded path on desktop and Android. +//! +//! The Grin blockchain node is NOT routed here — it stays on the clear internet +//! exactly as before; it never sees who pays whom. + +mod engine; +mod transport; + +pub use engine::{ + Client, client, condemn_exit, connect, is_ready, report_relay_down, report_relay_live, + set_relay_consumer, transport_ready, tunnel_generation, wait_ready, warm_up, +}; +pub use transport::TorWebSocketTransport; + +use std::path::PathBuf; +use std::sync::Arc; +use std::time::Duration; + +use bytes::Bytes; +use http_body_util::{BodyExt, Full}; +use hyper_util::rt::TokioIo; +use log::{debug, warn}; +use tokio::io::{AsyncRead, AsyncWrite}; + +use crate::Settings; + +/// How long a single HTTP exchange (one redirect hop) may take end to end. +const HTTP_TIMEOUT: Duration = Duration::from_secs(60); + +/// How long to wait for the embedded Tor client to bootstrap before giving up on +/// a request. A cold Tor bootstrap can take tens of seconds; a warm one is fast. +const TUNNEL_WAIT: Duration = Duration::from_secs(60); + +/// Redirect hops to follow before giving up. +const MAX_REDIRECTS: usize = 5; + +// --- Tor data directories ----------------------------------------------------- + +/// Base Tor data directory (`/tor`). +fn base_path() -> PathBuf { + Settings::base_path(Some("tor".to_string())) +} + +/// Tor state directory (consensus, guards, …). Used by [`engine`]. +pub(crate) fn state_path() -> String { + let mut base = base_path(); + base.push("state"); + base.to_str().unwrap().to_string() +} + +/// Tor cache directory (directory documents). Used by [`engine`]. +pub(crate) fn cache_path() -> String { + let mut base = base_path(); + base.push("cache"); + base.to_str().unwrap().to_string() +} + +// --- Onion resolution --------------------------------------------------------- + +/// The pinned `.onion` `(host, port)` for a relay `url`, if one is configured. +/// The `GOBLIN_TOR_ONION` env override (for ad-hoc testing) wins; otherwise the +/// pool's per-relay `onion` field ([`crate::nostr::pool::RelayPool::onion_for`]). +/// `None` → this relay has no onion and is reached over a Tor exit to its clearnet +/// host instead (see [`transport`]). +pub(crate) fn onion_for(url: &str) -> Option<(String, u16)> { + if let Ok(env) = std::env::var("GOBLIN_TOR_ONION") { + let env = env.trim(); + if !env.is_empty() { + return parse_onion(env); + } + } + crate::nostr::pool::load() + .onion_for(url) + .and_then(|o| parse_onion(&o)) +} + +/// Parse an onion target `host[:port]` → `(host, port)`. Defaults to port 80 +/// (plain ws over the onion). Tolerant of a `ws://`/`http://` prefix and a +/// trailing slash so the pinned string may be written either way. +fn parse_onion(s: &str) -> Option<(String, u16)> { + let s = s + .trim() + .trim_start_matches("ws://") + .trim_start_matches("http://") + .trim_end_matches('/'); + if s.is_empty() { + return None; + } + match s.rsplit_once(':') { + Some((host, port)) if !port.is_empty() && port.chars().all(|c| c.is_ascii_digit()) => { + Some((host.to_string(), port.parse().ok()?)) + } + _ => Some((s.to_string(), 80)), + } +} + +// --- HTTP over Tor ------------------------------------------------------------ + +/// An HTTP request routed over Tor: dial the host over Tor (an onion via a real +/// onion circuit, a clearnet host via a Tor exit — arti resolves the name +/// internally, so nothing leaks a clearnet DNS lookup), then rustls (webpki +/// roots) for https, then HTTP/1.1. Follows redirects. Returns `(status, body)`. +/// +/// For now clearnet-over-Tor is fine for the small lookups (names at goblin.st, +/// relay hints, pool refresh, price, avatars); pinning those behind onions is a +/// later pass. +pub async fn http_request_bytes( + method: &str, + url: String, + body: Option>, + headers: Vec<(String, String)>, +) -> Option<(u16, Vec)> { + if !wait_ready(TUNNEL_WAIT).await { + warn!("tor http: client not bootstrapped, dropping request"); + return None; + } + let mut url = url::Url::parse(&url).ok()?; + let mut method = method.to_uppercase(); + let mut body = body; + for _ in 0..=MAX_REDIRECTS { + let (status, resp_body, location) = tokio::time::timeout( + HTTP_TIMEOUT, + request_once(&method, &url, body.clone(), &headers), + ) + .await + .map_err(|_| warn!("tor http: request to {} timed out", redacted(&url))) + .ok()??; + match location { + Some(loc) => { + url = url.join(&loc).ok()?; + // 303 (and legacy 301/302) turn into a bodiless GET; 307/308 replay. + if matches!(status, 301..=303) { + method = "GET".to_string(); + body = None; + } + debug!( + "tor http: following {status} redirect to {}", + redacted(&url) + ); + } + None => return Some((status, resp_body)), + } + } + warn!("tor http: too many redirects for {}", redacted(&url)); + None +} + +/// String-bodied convenience wrapper around [`http_request_bytes`]. +pub async fn http_request( + method: &str, + url: String, + body: Option, + headers: Vec<(String, String)>, +) -> Option { + http_request_bytes(method, url, body.map(|b| b.into_bytes()), headers) + .await + .map(|(_, raw)| String::from_utf8_lossy(&raw).to_string()) +} + +/// Host without path/query, for logs (never log full URLs). +fn redacted(url: &url::Url) -> String { + url.host_str().unwrap_or("").to_string() +} + +/// A single HTTP/1.1 exchange over Tor. Returns the status, the collected body +/// and, for 3xx responses, the `Location` target. +async fn request_once( + method: &str, + url: &url::Url, + body: Option>, + headers: &[(String, String)], +) -> Option<(u16, Vec, Option)> { + let host = url.host_str()?.to_string(); + let https = url.scheme() == "https"; + let port = url.port().unwrap_or(if https { 443 } else { 80 }); + + let tcp = connect(&host, port) + .await + .map_err(|e| warn!("tor http: connect to {host} failed: {e}")) + .ok()?; + let io: Box = if https { + Box::new(tls_connect(&host, tcp).await?) + } else { + Box::new(tcp) + }; + + let (mut sender, conn) = hyper::client::conn::http1::handshake(TokioIo::new(io)) + .await + .map_err(|e| warn!("tor http: handshake with {host} failed: {e}")) + .ok()?; + // Drive the connection in the background for this one exchange. + tokio::spawn(async move { + let _ = conn.await; + }); + + let m = hyper::Method::from_bytes(method.as_bytes()).ok()?; + let path = match url.query() { + Some(q) => format!("{}?{q}", url.path()), + None => url.path().to_string(), + }; + let host_header = if (https && port == 443) || (!https && port == 80) { + host.clone() + } else { + format!("{host}:{port}") + }; + let mut req = hyper::Request::builder() + .method(m) + .uri(path) + .header(hyper::header::HOST, host_header) + .header(hyper::header::USER_AGENT, "goblin-wallet"); + for (k, v) in headers { + req = req.header(k, v); + } + let req = req + .body(Full::new(Bytes::from(body.unwrap_or_default()))) + .ok()?; + + let resp = sender + .send_request(req) + .await + .map_err(|e| warn!("tor http: request to {host} failed: {e}")) + .ok()?; + let status = resp.status().as_u16(); + let location = if resp.status().is_redirection() { + resp.headers() + .get(hyper::header::LOCATION) + .and_then(|v| v.to_str().ok()) + .map(|s| s.to_string()) + } else { + None + }; + let bytes = resp.into_body().collect().await.ok()?.to_bytes().to_vec(); + Some((status, bytes, location)) +} + +/// Everything hyper (and the TLS layer) needs from a Tor-carried stream, boxable +/// for the plain-http / https split. +pub(crate) trait Stream: AsyncRead + AsyncWrite + Send + Unpin {} +impl Stream for T {} + +lazy_static::lazy_static! { + /// Shared rustls client config (webpki roots; ring provider installed at + /// startup — see lib.rs), reused by every clearnet-over-Tor https handshake. + /// Never the platform verifier — it panics on Android outside a full app + /// context. + static ref TLS_CONFIG: Arc = { + let mut roots = rustls::RootCertStore::empty(); + roots.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned()); + Arc::new( + rustls::ClientConfig::builder() + .with_root_certificates(roots) + .with_no_client_auth(), + ) + }; +} + +/// The shared rustls client config (cheap `Arc` bump). +pub(crate) fn tls_config() -> Arc { + TLS_CONFIG.clone() +} + +/// TLS-wrap a Tor-carried TCP stream with rustls + webpki roots. The certificate +/// is validated against the HOSTNAME, so a hostile Tor exit cannot MITM a +/// clearnet https fetch. +async fn tls_connect(host: &str, stream: S) -> Option> +where + S: AsyncRead + AsyncWrite + Send + Unpin, +{ + let server_name = rustls::pki_types::ServerName::try_from(host.to_string()).ok()?; + tokio_rustls::TlsConnector::from(tls_config()) + .connect(server_name, stream) + .await + .map_err(|e| warn!("tor http: tls handshake with {host} failed: {e}")) + .ok() +} diff --git a/src/tor/transport.rs b/src/tor/transport.rs new file mode 100644 index 0000000..216f394 --- /dev/null +++ b/src/tor/transport.rs @@ -0,0 +1,194 @@ +// Copyright 2026 The Goblin Developers +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! WebSocket transport for the Nostr relay pool routed over embedded Tor. +//! ANCHOR: a relay whose pool entry pins an `.onion` +//! ([`crate::nostr::pool::PoolRelay::onion`]) is dialed straight to that onion +//! over Tor — a real onion circuit, no exit node — and spoken to in PLAIN +//! websocket ([`tokio_tungstenite::client_async`]). The onion connection is +//! already encrypted AND authenticated end to end (the `.onion` address IS the +//! relay's public key), so a TLS wrapper is redundant and the relay backend does +//! not serve it. EXIT PATH (every relay without a pinned onion — e.g. a +//! recipient's arbitrary DM relay a send fans out to): dial the relay's clearnet +//! host over a Tor exit and run the usual hostname-validated TLS + websocket +//! ([`tokio_tungstenite::client_async_tls`]) for `wss://`. Either way the payload +//! and in-flight destination never touch the clear, and the wallet's own IP is +//! never exposed. + +use std::pin::Pin; +use std::task::{Context, Poll}; +use std::time::{Duration, Instant}; + +use async_wsocket::futures_util::{Sink, SinkExt, StreamExt}; +use async_wsocket::{ConnectionMode, Message}; +use nostr_relay_pool::transport::error::TransportError; +use nostr_relay_pool::transport::websocket::{WebSocketSink, WebSocketStream, WebSocketTransport}; +use nostr_sdk::Url; +use nostr_sdk::util::BoxedFuture; +use tokio_tungstenite::tungstenite::Message as TgMessage; + +/// A backend transport error (failures outside the websocket layer) carrying +/// `msg` as its display text. +fn terr(msg: impl Into) -> TransportError { + TransportError::backend(std::io::Error::other(msg.into())) +} + +/// Nostr websocket transport over embedded Tor. +#[derive(Debug, Clone, Copy, Default)] +pub struct TorWebSocketTransport; + +impl WebSocketTransport for TorWebSocketTransport { + fn support_ping(&self) -> bool { + true + } + + fn connect<'a>( + &'a self, + url: &'a Url, + _mode: &'a ConnectionMode, + timeout: Duration, + ) -> BoxedFuture<'a, Result<(WebSocketSink, WebSocketStream), TransportError>> { + Box::pin(async move { + let host = url + .host_str() + .ok_or_else(|| terr("relay url has no host"))? + .to_string(); + + // The embedded Tor client must be bootstrapped before any dial. + if !crate::tor::wait_ready(timeout).await { + return Err(terr("tor client not bootstrapped")); + } + + // MONEY-PATH ANCHOR: when the pool pins this relay's `.onion`, dial it + // directly over Tor and speak PLAIN websocket — the onion connection is + // already encrypted+authenticated end to end (the `.onion` IS the + // relay's public key), so no TLS on top. + if let Some((onion, port)) = crate::tor::onion_for(url.as_str()) { + let t = Instant::now(); + let stream = tokio::time::timeout(timeout, crate::tor::connect(&onion, port)) + .await + .map_err(|_| terr("tor onion connect timeout"))? + .map_err(terr)?; + // PLAIN ws over the onion (client_async, NOT client_async_tls). The + // handshake targets the onion host itself. + let ws_url = format!("ws://{onion}/"); + let (ws, _response) = tokio::time::timeout( + timeout, + tokio_tungstenite::client_async(ws_url.as_str(), stream), + ) + .await + .map_err(|_| terr("websocket handshake timeout (onion)"))? + .map_err(|e| terr(format!("websocket handshake failed (onion): {e}")))?; + log::info!( + "[timing] tor: relay {host} CONNECTED via onion — stream+ws {}ms", + t.elapsed().as_millis() + ); + return Ok(split_ws(ws)); + } + + // EXIT PATH: no pinned onion → reach the relay's clearnet host over a + // Tor exit, with the usual TLS + websocket for wss (SNI = the relay + // host). This is what lets a send fan out to a recipient's arbitrary + // public DM relays over Tor. + let port = url.port().unwrap_or(match url.scheme() { + "ws" => 80, + _ => 443, + }); + let t = Instant::now(); + let stream = tokio::time::timeout(timeout, crate::tor::connect(&host, port)) + .await + .map_err(|_| terr("tor connect timeout"))? + .map_err(terr)?; + let (ws, _response) = tokio::time::timeout( + timeout, + tokio_tungstenite::client_async_tls(url.as_str(), stream), + ) + .await + .map_err(|_| terr("websocket handshake timeout"))? + .map_err(|e| terr(format!("websocket handshake failed: {e}")))?; + log::info!( + "[timing] tor: relay {host} CONNECTED via exit — tls+ws {}ms", + t.elapsed().as_millis() + ); + Ok(split_ws(ws)) + }) + } +} + +/// Split a websocket into the pool's boxed sink/stream halves — shared by the +/// onion and exit dial paths, so everything above the byte transport is identical +/// whichever egress carried the connection. +fn split_ws(ws: tokio_tungstenite::WebSocketStream) -> (WebSocketSink, WebSocketStream) +where + S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + Unpin + 'static, +{ + let (tx, rx) = ws.split(); + + let sink: WebSocketSink = Box::new(TorSink(tx)) as WebSocketSink; + let stream: WebSocketStream = Box::pin(rx.filter_map(|msg| async move { + match msg { + Ok(tg) => tg_to_message(tg).map(Ok), + Err(e) => Some(Err(TransportError::backend(e))), + } + })) as WebSocketStream; + + (sink, stream) +} + +/// Convert a tungstenite message into an async-wsocket pool message. +/// Returns `None` for raw frames (never surfaced while reading). +fn tg_to_message(msg: TgMessage) -> Option { + match msg { + TgMessage::Text(text) => Some(Message::Text(text.to_string())), + TgMessage::Binary(data) => Some(Message::Binary(data.to_vec())), + TgMessage::Ping(data) => Some(Message::Ping(data.to_vec())), + TgMessage::Pong(data) => Some(Message::Pong(data.to_vec())), + TgMessage::Close(_) => Some(Message::Close(None)), + TgMessage::Frame(_) => None, + } +} + +/// Sink adapter converting pool messages into tungstenite messages. +struct TorSink(S); + +impl Sink for TorSink +where + S: Sink + Send + Unpin, +{ + type Error = TransportError; + + fn poll_ready(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.0) + .poll_ready_unpin(cx) + .map_err(TransportError::backend) + } + + fn start_send(mut self: Pin<&mut Self>, item: Message) -> Result<(), Self::Error> { + Pin::new(&mut self.0) + .start_send_unpin(TgMessage::from(item)) + .map_err(TransportError::backend) + } + + fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.0) + .poll_flush_unpin(cx) + .map_err(TransportError::backend) + } + + fn poll_close(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + Pin::new(&mut self.0) + .poll_close_unpin(cx) + .map_err(TransportError::backend) + } +} diff --git a/src/wallet/e2e.rs b/src/wallet/e2e.rs index 3ba8132..1cf034c 100644 --- a/src/wallet/e2e.rs +++ b/src/wallet/e2e.rs @@ -175,9 +175,9 @@ mod tests { // The app installs these at startup (src/lib.rs); a bare test must too. let _ = rustls::crypto::ring::default_provider().install_default(); - crate::nym::warm_up(); + crate::tor::warm_up(); assert!( - wait_until("nym tunnel is_ready", 180, crate::nym::is_ready), + wait_until("nym tunnel is_ready", 180, crate::tor::is_ready), "nym tunnel never came up" ); @@ -470,14 +470,14 @@ mod tests { "money relay {RELAY} advertises no scoped exit in the pool; the split money path cannot be verified" ); - crate::nym::warm_up(); + crate::tor::warm_up(); assert!( - wait_until("nym tunnel is_ready", 180, crate::nym::is_ready), + wait_until("nym tunnel is_ready", 180, crate::tor::is_ready), "nym tunnel never came up" ); println!( "[fe2e] nym ready; tunnel_generation={}", - crate::nym::tunnel_generation() + crate::tor::tunnel_generation() ); // One external node for BOTH wallets: the money path splits at the RELAY