diff --git a/Cargo.lock b/Cargo.lock index bd995166..5c71a460 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,24 +17,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", - "zeroize", -] - [[package]] name = "ahash" version = "0.8.11" @@ -47,74 +29,6 @@ dependencies = [ "zerocopy 0.7.35", ] -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "amplify" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add3e79c9c3e33209e1676562e0fda882bc20701f52870ba162d9f046b7d8b0b" -dependencies = [ - "amplify_derive", - "amplify_num", - "ascii", - "wasm-bindgen", -] - -[[package]] -name = "amplify_derive" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87df0f28e6eb1f2d355f29ba6793fa9ca643967528609608d5cbd70bd68f9d1" -dependencies = [ - "amplify_syn", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "amplify_num" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99bcb75a2982047f733547042fc3968c0f460dfcf7d90b90dea3b2744580e9ad" -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", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - [[package]] name = "anyhow" version = "1.0.97" @@ -127,124 +41,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "arti-client" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "886e16f6550ba95bc44ec8706705d4eecfda59118bf0cb1355f34d45b041b5d2" -dependencies = [ - "async-trait", - "cfg-if", - "derive-deftly", - "derive_builder_fork_arti", - "derive_more", - "educe", - "fs-mistrust", - "futures", - "hostname-validator", - "humantime", - "humantime-serde", - "libc", - "postage", - "rand", - "safelog", - "serde", - "thiserror 1.0.69", - "tor-async-utils", - "tor-basic-utils", - "tor-chanmgr", - "tor-circmgr", - "tor-config", - "tor-dirmgr", - "tor-error", - "tor-guardmgr", - "tor-hsclient", - "tor-hscrypto", - "tor-keymgr", - "tor-linkspec", - "tor-llcrypto", - "tor-netdir", - "tor-netdoc", - "tor-persist", - "tor-proto", - "tor-rtcompat", - "tracing", - "void", -] - -[[package]] -name = "ascii" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" - -[[package]] -name = "async-compression" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cf008e5e1a9e9e22a7d3c9a4992e21a350290069e36d8fb72304ed17e8f2d2" -dependencies = [ - "flate2", - "futures-core", - "futures-io", - "memchr", - "pin-project-lite", -] - -[[package]] -name = "async-trait" -version = "0.1.88" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "async_executors" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a982d2f86de6137cc05c9db9a915a19886c97911f9790d04f174cede74be01a5" -dependencies = [ - "blanket", - "futures-core", - "futures-task", - "futures-util", - "pin-project", - "rustc_version", - "tokio", -] - -[[package]] -name = "asynchronous-codec" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" -dependencies = [ - "bytes", - "futures-sink", - "futures-util", - "memchr", - "pin-project-lite", -] - -[[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.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" -dependencies = [ - "bytemuck", -] - [[package]] name = "autocfg" version = "1.4.0" @@ -261,17 +57,11 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide 0.7.4", + "miniz_oxide", "object", "rustc-demangle", ] -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - [[package]] name = "base58ck" version = "0.1.0" @@ -294,12 +84,6 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - [[package]] name = "bech32" version = "0.11.0" @@ -405,80 +189,12 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blanket" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0b121a9fe0df916e362fb3271088d071159cdf11db0e4182d02152850756eff" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bounded-vec-deque" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2225b558afc76c596898f5f1b3fc35cfce0eb1b13635cbd7d1b2a7177dc10ccd" - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "by_address" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" - -[[package]] -name = "bytemuck" -version = "1.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "bytes" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -[[package]] -name = "caret" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c979a125c4d00f63d49b648530a952c6cc42e3387cc96f41f9a4687ee6b9273" - [[package]] name = "cc" version = "1.2.16" @@ -500,68 +216,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ac8be588b1de2b7f1537ed39ba453a388d2cce60ce78ef5db449f71bebe58ba" -[[package]] -name = "chrono" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "serde", - "windows-link", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", - "zeroize", -] - -[[package]] -name = "coarsetime" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" -dependencies = [ - "libc", - "wasix", - "wasm-bindgen", -] - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - [[package]] name = "corepc-client" version = "0.6.1" @@ -602,3234 +256,579 @@ dependencies = [ ] [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "errno" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", + "windows-sys 0.59.0", ] [[package]] -name = "crc32fast" -version = "1.4.2" +name = "fallible-iterator" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] -name = "crossbeam-queue" -version = "0.3.12" +name = "fallible-streaming-iterator" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] -name = "crossbeam-utils" -version = "0.8.21" +name = "fastrand" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] -name = "crypto-bigint" -version = "0.5.5" +name = "getrandom" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "getrandom" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ - "generic-array", - "typenum", + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] -name = "ctr" -version = "0.9.2" +name = "gimli" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] -name = "curve25519-dalek" -version = "4.1.3" +name = "hashbrown" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest", - "fiat-crypto", - "rustc_version", - "subtle", - "zeroize", + "ahash", ] [[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" +name = "hashlink" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", + "hashbrown", ] [[package]] -name = "darling" -version = "0.14.4" +name = "hermit-abi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] -name = "darling" -version = "0.20.10" +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" -dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", -] +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "darling_core" -version = "0.14.4" +name = "hex-conservative" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "arrayvec", ] [[package]] -name = "darling_core" -version = "0.20.10" +name = "hex-conservative" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "4afe881d0527571892c4034822e59bb10c6c991cce6abe8199b6f5cf10766f55" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.11.1", - "syn 2.0.100", + "arrayvec", ] [[package]] -name = "darling_macro" -version = "0.14.4" +name = "hex_lit" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] +checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" [[package]] -name = "darling_macro" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" -dependencies = [ - "darling_core 0.20.10", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "data-encoding" -version = "2.8.0" +name = "itoa" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] -name = "der" -version = "0.7.9" +name = "jsonrpc" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "3662a38d341d77efecb73caf01420cfa5aa63c0253fd7bc05289ef9f6616e1bf" dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", + "base64 0.13.1", + "minreq", + "serde", + "serde_json", ] [[package]] -name = "derive-adhoc" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5283ac2881753c76c0892406705553f0d9ab30649f81e18964d3408f4501edb8" +name = "kyoto-cbf" +version = "0.9.0" dependencies = [ - "derive-adhoc-macros", - "heck 0.4.1", + "bip324", + "bitcoin", + "corepc-node", + "hex", + "rusqlite", + "tempfile", + "tokio", + "tracing", + "tracing-subscriber", ] [[package]] -name = "derive-adhoc-macros" -version = "0.7.3" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c21b673a9b8c78c34908e6fcb42b922e11c4df2de5237f1c3f58d3285904a84b" -dependencies = [ - "heck 0.4.1", - "itertools 0.11.0", - "proc-macro-crate", - "proc-macro2", - "quote", - "sha3", - "strum 0.25.0", - "syn 1.0.109", - "void", -] +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] -name = "derive-deftly" -version = "0.14.6" +name = "libc" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ea84d0109517cc2253d4a679bdda1e8989e9bd86987e9e4f75ffdda0095fd1" -dependencies = [ - "derive-deftly-macros", - "heck 0.5.0", -] +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] -name = "derive-deftly-macros" -version = "0.14.6" +name = "libsqlite3-sys" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357422a457ccb850dc8f1c1680e0670079560feaad6c2e247e3f345c4fab8a3f" +checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" dependencies = [ - "heck 0.5.0", - "indexmap 2.8.0", - "itertools 0.14.0", - "proc-macro-crate", - "proc-macro2", - "quote", - "sha3", - "strum 0.26.3", - "syn 2.0.100", - "void", + "cc", + "pkg-config", + "vcpkg", ] [[package]] -name = "derive_builder_core_fork_arti" -version = "0.11.2" +name = "linux-raw-sys" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c1b715c79be6328caa9a5e1a387a196ea503740f0722ec3dd8f67a9e72314d" -dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" [[package]] -name = "derive_builder_fork_arti" -version = "0.11.2" +name = "lock_api" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3eae24d595f4d0ecc90a9a5a6d11c2bd8dafe2375ec4a1ec63250e5ade7d228" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ - "derive_builder_macro_fork_arti", + "autocfg", + "scopeguard", ] [[package]] -name = "derive_builder_macro_fork_arti" -version = "0.11.2" +name = "log" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69887769a2489cd946bf782eb2b1bb2cb7bc88551440c94a765d4f040c08ebf3" -dependencies = [ - "derive_builder_core_fork_arti", - "syn 1.0.109", -] +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] -name = "derive_more" -version = "0.99.19" +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.100", + "adler", ] [[package]] -name = "digest" -version = "0.10.7" +name = "minreq" +version = "2.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "567496f13503d6cae8c9f961f34536850275f396307d7a6b981eef1464032f53" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", + "log", + "serde", + "serde_json", ] [[package]] -name = "directories" -version = "5.0.1" +name = "mio" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ - "dirs-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", ] [[package]] -name = "dirs" -version = "5.0.1" +name = "nu-ansi-term" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ - "dirs-sys", + "overload", + "winapi", ] [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "num_cpus" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ + "hermit-abi", "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", ] [[package]] -name = "displaydoc" -version = "0.2.5" +name = "object" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", + "memchr", ] [[package]] -name = "downcast-rs" -version = "1.2.1" +name = "once_cell" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] -name = "dyn-clone" -version = "1.0.19" +name = "overload" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] -name = "ecdsa" -version = "0.16.9" +name = "parking_lot" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", + "lock_api", + "parking_lot_core", ] [[package]] -name = "ed25519" -version = "2.2.3" +name = "parking_lot_core" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ - "pkcs8", - "signature", + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", ] [[package]] -name = "ed25519-dalek" -version = "2.1.1" +name = "pin-project-lite" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" -dependencies = [ - "curve25519-dalek", - "ed25519", - "merlin", - "rand_core", - "serde", - "sha2", - "subtle", - "zeroize", -] +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] -name = "educe" -version = "0.4.23" +name = "pkg-config" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" -dependencies = [ - "enum-ordinalize", - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] -name = "either" -version = "1.15.0" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy 0.8.23", +] [[package]] -name = "elliptic-curve" -version = "0.13.8" +name = "proc-macro2" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", + "unicode-ident", ] [[package]] -name = "enum-ordinalize" -version = "3.1.15" +name = "quote" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ - "num-bigint", - "num-traits", "proc-macro2", - "quote", - "syn 2.0.100", ] [[package]] -name = "equivalent" -version = "1.0.2" +name = "r-efi" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" [[package]] -name = "errno" -version = "0.3.10" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "windows-sys 0.59.0", + "rand_chacha", + "rand_core", ] [[package]] -name = "event-listener" -version = "5.4.0" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", + "ppv-lite86", + "rand_core", ] [[package]] -name = "fallible-iterator" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -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" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "ff" -version = "0.13.1" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "rand_core", - "subtle", + "getrandom 0.2.15", ] [[package]] -name = "fiat-crypto" -version = "0.2.9" +name = "redox_syscall" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +dependencies = [ + "bitflags", +] [[package]] -name = "figment" -version = "0.10.19" +name = "rusqlite" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" +checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" dependencies = [ - "atomic 0.6.0", - "serde", - "toml", - "uncased", - "version_check", + "bitflags", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", ] [[package]] -name = "filetime" -version = "0.2.25" +name = "rustc-demangle" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] -name = "flate2" -version = "1.0.35" +name = "rustix" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" dependencies = [ - "crc32fast", - "miniz_oxide 0.8.5", + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", ] [[package]] -name = "fluid-let" -version = "1.0.0" +name = "ryu" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749cff877dc1af878a0b31a41dd221a753634401ea0ef2f87b62d3171522485a" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] -name = "fnv" -version = "1.0.7" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "fs-mistrust" -version = "0.7.13" +name = "secp256k1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43de34e45ddb3fc314aeae5c5b078b8e3549980cd45836f8364d7cca8d85aead" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "derive_builder_fork_arti", - "dirs", - "libc", - "once_cell", - "pwd-grp", + "bitcoin_hashes 0.14.0", + "rand", + "secp256k1-sys", "serde", - "thiserror 1.0.69", - "walkdir", ] [[package]] -name = "fslock" -version = "0.2.1" +name = "secp256k1-sys" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" dependencies = [ - "libc", - "winapi", + "cc", ] [[package]] -name = "funty" -version = "2.0.0" +name = "serde" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] [[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" +name = "serde_derive" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", -] - -[[package]] -name = "futures-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" -dependencies = [ - "futures-io", - "rustls", - "rustls-pki-types", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "glob-match" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985c9503b412198aa4197559e9a318524ebc4519c229bfa05a535828c950b9d" - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core", - "subtle", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" - -[[package]] -name = "hashlink" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" -dependencies = [ - "hashbrown 0.14.5", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-conservative" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "hex-conservative" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afe881d0527571892c4034822e59bb10c6c991cce6abe8199b6f5cf10766f55" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "hex_lit" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", + "syn", ] [[package]] -name = "hostname-validator" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" - -[[package]] -name = "http" -version = "1.3.1" +name = "serde_json" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "bytes", - "fnv", "itoa", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "humantime" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" - -[[package]] -name = "humantime-serde" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" -dependencies = [ - "humantime", - "serde", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" -dependencies = [ - "equivalent", - "hashbrown 0.15.0", -] - -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "generic-array", -] - -[[package]] -name = "inventory" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab08d7cd2c5897f2c949e5383ea7c7db03fb19130ffcfbf7eda795137ae3cb83" -dependencies = [ - "rustversion", -] - -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "js-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "jsonrpc" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3662a38d341d77efecb73caf01420cfa5aa63c0253fd7bc05289ef9f6616e1bf" -dependencies = [ - "base64 0.13.1", - "minreq", - "serde", - "serde_json", -] - -[[package]] -name = "keccak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "kyoto-cbf" -version = "0.9.0" -dependencies = [ - "arti-client", - "bip324", - "bitcoin", - "corepc-node", - "hex", - "rusqlite", - "tempfile", - "tokio", - "tor-rtcompat", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin 0.9.8", -] - -[[package]] -name = "libc" -version = "0.2.171" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" - -[[package]] -name = "libm" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" - -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags", - "libc", - "redox_syscall", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "memmap2" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" -dependencies = [ - "libc", -] - -[[package]] -name = "merlin" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" -dependencies = [ - "byteorder", - "keccak", - "rand_core", - "zeroize", -] - -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" -dependencies = [ - "adler2", -] - -[[package]] -name = "minreq" -version = "2.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567496f13503d6cae8c9f961f34536850275f396307d7a6b981eef1464032f53" -dependencies = [ - "log", - "serde", - "serde_json", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "p384" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[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", - "sha2", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared", - "rand", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[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", - "parking_lot", - "pin-project", - "static_assertions", - "thiserror 1.0.69", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy 0.8.23", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "priority-queue" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6af7c37f3487fd85d8e576b32095e1fe8c4860472f035d25472f1223b5026c88" -dependencies = [ - "autocfg", - "equivalent", - "indexmap 2.8.0", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.8", -] - -[[package]] -name = "proc-macro2" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "pwd-grp" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6955c41fd7e4283bdf6ff3e7218b7e3f8ef24c4236b31d22be050f4cfd5e2a2c" -dependencies = [ - "derive-adhoc", - "libc", - "paste", - "thiserror 1.0.69", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.15", -] - -[[package]] -name = "redox_syscall" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.15", - "libredox", - "thiserror 1.0.69", -] - -[[package]] -name = "regex" -version = "1.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.3.9", - "regex-syntax 0.7.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.7.5", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" - -[[package]] -name = "retry-error" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb501c6079c6e2a1c9761b76ddb12ecb6818b8773748f5e0394b95f838e4a38" - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - -[[package]] -name = "ring" -version = "0.17.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9b823fa29b721a59671b41d6b06e66b29e0628e207e8b1c3ceeda701ec928d" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.15", - "libc", - "untrusted 0.9.0", - "windows-sys 0.52.0", -] - -[[package]] -name = "rsa" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" -dependencies = [ - "const-oid", - "digest", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core", - "sha2", - "signature", - "spki", - "subtle", - "zeroize", -] - -[[package]] -name = "rusqlite" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" -dependencies = [ - "bitflags", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink", - "libsqlite3-sys", - "smallvec", - "time", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", -] - -[[package]] -name = "rustls" -version = "0.23.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" -dependencies = [ - "log", - "once_cell", - "ring 0.17.12", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-pki-types" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" - -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring 0.17.12", - "rustls-pki-types", - "untrusted 0.9.0", -] - -[[package]] -name = "rustversion" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "safelog" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabd7492c13678058e680f161cf94ba34d9d9e48419d1fbc6c21a32926c23764" -dependencies = [ - "derive_more", - "educe", - "either", - "fluid-let", - "thiserror 1.0.69", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "sanitize-filename" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed72fbaf78e6f2d41744923916966c4fbe3d7c74e3037a8ee482f1115572603" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "secp256k1" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" -dependencies = [ - "bitcoin_hashes 0.14.0", - "rand", - "secp256k1-sys", - "serde", -] - -[[package]] -name = "secp256k1-sys" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" -dependencies = [ - "cc", -] - -[[package]] -name = "semver" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" - -[[package]] -name = "serde" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-value" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" -dependencies = [ - "ordered-float", - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "serde_ignored" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "566da67d80e92e009728b3731ff0e5360cb181432b8ca73ea30bb1d170700d76" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_json" -version = "1.0.140" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_spanned" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_with" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e47d95bc83ed33b2ecf84f4187ad1ab9685d18ff28db000c99deac8ce180e3" -dependencies = [ - "base64 0.21.7", - "chrono", - "hex", - "indexmap 1.9.3", - "serde", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3cee93715c2e266b9338b7544da68a9f24e227722ba482bd1c024367c77c65" -dependencies = [ - "darling 0.20.10", - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest", - "keccak", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shellexpand" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" -dependencies = [ - "dirs", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest", - "rand_core", -] - -[[package]] -name = "simple_asn1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror 2.0.12", - "time", -] - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "slotmap" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" -dependencies = [ - "version_check", -] - -[[package]] -name = "smallvec" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" - -[[package]] -name = "socket2" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "ssh-cipher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" -dependencies = [ - "cipher", - "ssh-encoding", -] - -[[package]] -name = "ssh-encoding" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" -dependencies = [ - "base64ct", - "pem-rfc7468", - "sha2", -] - -[[package]] -name = "ssh-key" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b86f5297f0f04d08cabaa0f6bff7cb6aec4d9c3b49d87990d63da9d9156a8c3" -dependencies = [ - "p256", - "p384", - "p521", - "rand_core", - "rsa", - "sec1", - "sha2", - "signature", - "ssh-cipher", - "ssh-encoding", - "subtle", - "zeroize", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" -dependencies = [ - "strum_macros 0.25.3", -] - -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros 0.26.4", -] - -[[package]] -name = "strum_macros" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.100", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.100", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tempfile" -version = "3.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488960f40a3fd53d72c2a29a58722561dee8afdd175bd88e3db4677d7b2ba600" -dependencies = [ - "fastrand", - "getrandom 0.3.2", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" -dependencies = [ - "thiserror-impl 2.0.12", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ac3f5b6856e931e15e07b478e98c8045239829a65f9156d4fa7e7788197a5ef" -dependencies = [ - "displaydoc", -] - -[[package]] -name = "tokio" -version = "1.38.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-macros" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "tokio-util" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" -dependencies = [ - "bytes", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.22.24", -] - -[[package]] -name = "toml_datetime" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" -dependencies = [ - "indexmap 1.9.3", - "toml_datetime", - "winnow 0.4.1", -] - -[[package]] -name = "toml_edit" -version = "0.22.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" -dependencies = [ - "indexmap 2.8.0", - "serde", - "serde_spanned", - "toml_datetime", - "winnow 0.7.4", -] - -[[package]] -name = "tor-async-utils" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5ed48271284a3330ccc56c26fb1ea39809ee01ffa1bf5ac489d4f209af261c" -dependencies = [ - "futures", - "pin-project", - "postage", - "void", -] - -[[package]] -name = "tor-basic-utils" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d5540689cf480f756cc8f1e119312f7540571019372aead6618a8426eade246" -dependencies = [ - "hex", - "libc", - "paste", - "rand", - "rand_chacha", - "slab", - "thiserror 1.0.69", -] - -[[package]] -name = "tor-bytes" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb7c20efbe7d64b4def319686d821195436502d6410f7b71331f59f8d5efdb8" -dependencies = [ - "bytes", - "digest", - "educe", - "getrandom 0.2.15", - "thiserror 1.0.69", - "tor-error", - "tor-llcrypto", - "zeroize", -] - -[[package]] -name = "tor-cell" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee15a1aa7e6477603ae824299cefe71644dcfe042ff7d691f5ba16f3b714335" -dependencies = [ - "bitflags", - "bytes", - "caret", - "derive_more", - "educe", - "paste", - "rand", - "smallvec", - "thiserror 1.0.69", - "tor-basic-utils", - "tor-bytes", - "tor-cert", - "tor-error", - "tor-hscrypto", - "tor-linkspec", - "tor-llcrypto", - "tor-units", -] - -[[package]] -name = "tor-cert" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfd7ebbc2949ab942c6aada0f781293fbe673b25ccbd2ca6f5782859aaf8e13" -dependencies = [ - "caret", - "derive_more", - "digest", - "thiserror 1.0.69", - "tor-bytes", - "tor-checkable", - "tor-llcrypto", -] - -[[package]] -name = "tor-chanmgr" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c32e75d36e98b6acb48899d57153f9052b6807a02ea135906d2c0df25dc72d2" -dependencies = [ - "async-trait", - "derive_builder_fork_arti", - "derive_more", - "educe", - "futures", - "postage", - "rand", - "safelog", - "serde", - "thiserror 1.0.69", - "tor-async-utils", - "tor-basic-utils", - "tor-cell", - "tor-config", - "tor-error", - "tor-linkspec", - "tor-llcrypto", - "tor-netdir", - "tor-proto", - "tor-rtcompat", - "tor-socksproto", - "tor-units", - "tracing", - "void", -] - -[[package]] -name = "tor-checkable" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8dfe7eb05cc1ae7f791e77e8cb7b06ba3ea55078708de8b9e7c844db5914b5e" -dependencies = [ - "humantime", - "signature", - "thiserror 1.0.69", - "tor-llcrypto", -] - -[[package]] -name = "tor-circmgr" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91cf25545a75b676a63eea222f18e244a0868c77a935e47f92770ce24266dff" -dependencies = [ - "amplify", - "async-trait", - "bounded-vec-deque", - "cfg-if", - "derive_builder_fork_arti", - "derive_more", - "downcast-rs", - "dyn-clone", - "educe", - "futures", - "humantime-serde", - "itertools 0.13.0", - "once_cell", - "pin-project", - "rand", - "retry-error", - "safelog", - "serde", - "static_assertions", - "thiserror 1.0.69", - "tor-async-utils", - "tor-basic-utils", - "tor-chanmgr", - "tor-config", - "tor-error", - "tor-guardmgr", - "tor-linkspec", - "tor-netdir", - "tor-netdoc", - "tor-persist", - "tor-proto", - "tor-protover", - "tor-relay-selection", - "tor-rtcompat", - "tracing", - "void", - "weak-table", -] - -[[package]] -name = "tor-config" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d8d6e14add774f3d674b9a82a074ccb74d97f7dc36b0d4b69b27de10741d543" -dependencies = [ - "derive-deftly", - "derive_builder_fork_arti", - "directories", - "educe", - "either", - "figment", - "fs-mistrust", - "itertools 0.13.0", - "once_cell", - "paste", - "regex", - "serde", - "serde-value", - "serde_ignored", - "shellexpand", - "strum 0.26.3", - "thiserror 1.0.69", - "toml", - "tor-basic-utils", - "tor-error", - "tracing", - "void", -] - -[[package]] -name = "tor-consdiff" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2386f515bfb8136fe98f36b11814840c87f5adefbc4f6651ac8d5f1da691e3" -dependencies = [ - "digest", - "hex", - "thiserror 1.0.69", - "tor-llcrypto", -] - -[[package]] -name = "tor-dirclient" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad6e8fdf689898d2ae2f231bccd216874ca104afb8cf482043a3cf05a0a914a" -dependencies = [ - "async-compression", - "base64ct", - "derive_more", - "futures", - "hex", - "http", - "httparse", - "httpdate", - "itertools 0.13.0", - "memchr", - "thiserror 1.0.69", - "tor-circmgr", - "tor-error", - "tor-hscrypto", - "tor-linkspec", - "tor-llcrypto", - "tor-netdoc", - "tor-proto", - "tor-rtcompat", - "tracing", -] - -[[package]] -name = "tor-dirmgr" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "181d24e558f2658edac01d2bff615233c2b1be3e17c43d279cc431c7b0da50db" -dependencies = [ - "async-trait", - "base64ct", - "derive_builder_fork_arti", - "derive_more", - "digest", - "educe", - "event-listener", - "fs-mistrust", - "fslock", - "futures", - "hex", - "humantime", - "humantime-serde", - "itertools 0.13.0", - "memmap2", - "once_cell", - "paste", - "postage", - "rand", - "rusqlite", - "safelog", - "scopeguard", - "serde", - "signature", - "strum 0.26.3", - "thiserror 1.0.69", - "time", - "tor-async-utils", - "tor-basic-utils", - "tor-checkable", - "tor-circmgr", - "tor-config", - "tor-consdiff", - "tor-dirclient", - "tor-error", - "tor-guardmgr", - "tor-llcrypto", - "tor-netdir", - "tor-netdoc", - "tor-persist", - "tor-proto", - "tor-rtcompat", - "tracing", -] - -[[package]] -name = "tor-error" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a79f001b29df4aaf5d6e295d0bb33c8d41a56c20ddfa13e743eee4cf9a1ec37" -dependencies = [ - "backtrace", - "derive_more", - "futures", - "once_cell", - "paste", - "retry-error", - "static_assertions", - "strum 0.26.3", - "thiserror 1.0.69", - "tracing", -] - -[[package]] -name = "tor-guardmgr" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5dfa3fb64dcfedec532b64d908cc82bca90f464bd5f7c33134cf39b1098590e" -dependencies = [ - "amplify", - "base64ct", - "derive-deftly", - "derive_builder_fork_arti", - "derive_more", - "dyn-clone", - "educe", - "futures", - "humantime", - "humantime-serde", - "itertools 0.13.0", - "num_enum", - "pin-project", - "postage", - "rand", - "safelog", - "serde", - "strum 0.26.3", - "thiserror 1.0.69", - "tor-async-utils", - "tor-basic-utils", - "tor-config", - "tor-error", - "tor-linkspec", - "tor-llcrypto", - "tor-netdir", - "tor-netdoc", - "tor-persist", - "tor-proto", - "tor-relay-selection", - "tor-rtcompat", - "tor-units", - "tracing", -] - -[[package]] -name = "tor-hsclient" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f1dab25ffb362623aa88797fef88773923266e097f49a83b4b52164ed1f2e69" -dependencies = [ - "async-trait", - "derive-deftly", - "derive_more", - "educe", - "either", - "futures", - "itertools 0.13.0", - "postage", - "rand", - "retry-error", - "safelog", - "slotmap", - "strum 0.26.3", - "thiserror 1.0.69", - "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-netdir", - "tor-netdoc", - "tor-persist", - "tor-proto", - "tor-rtcompat", - "tracing", -] - -[[package]] -name = "tor-hscrypto" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0c27b58747f3fc84e7b966a8cefaf6e9e99ebac5c7847e6512649dc666c3fb" -dependencies = [ - "data-encoding", - "derive_more", - "digest", - "itertools 0.13.0", - "paste", - "rand", - "safelog", - "signature", - "subtle", - "thiserror 1.0.69", - "tor-basic-utils", - "tor-bytes", - "tor-error", - "tor-llcrypto", - "tor-units", -] - -[[package]] -name = "tor-keymgr" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "716a106ea48bf42637772efada6e1e87bf4744fce554f462a180f97103a0df9b" -dependencies = [ - "amplify", - "arrayvec", - "derive-deftly", - "derive_builder_fork_arti", - "derive_more", - "downcast-rs", - "dyn-clone", - "fs-mistrust", - "glob-match", - "humantime", - "inventory", - "itertools 0.13.0", - "rand", - "serde", - "ssh-key", - "thiserror 1.0.69", - "tor-basic-utils", - "tor-config", - "tor-error", - "tor-hscrypto", - "tor-llcrypto", - "tor-persist", - "walkdir", - "zeroize", -] - -[[package]] -name = "tor-linkspec" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbabe4129e25731af3529f2b188127f91da8d3d199ac49f9a07ef7c3e3dd7b7e" -dependencies = [ - "base64ct", - "by_address", - "caret", - "derive-deftly", - "derive_builder_fork_arti", - "derive_more", - "hex", - "itertools 0.13.0", - "safelog", - "serde", - "serde_with", - "strum 0.26.3", - "thiserror 1.0.69", - "tor-basic-utils", - "tor-bytes", - "tor-config", - "tor-llcrypto", - "tor-protover", -] - -[[package]] -name = "tor-llcrypto" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "903b2fe40c169afdb5d82c4f235e6cefc4413ea4b786580f5dd4caad6d390008" -dependencies = [ - "aes", - "base64ct", - "ctr", - "curve25519-dalek", - "derive_more", - "digest", - "ed25519-dalek", - "educe", - "getrandom 0.2.15", - "hex", - "rand_core", - "rsa", - "safelog", - "serde", - "sha1", - "sha2", - "sha3", - "signature", - "simple_asn1", - "subtle", - "thiserror 1.0.69", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "tor-log-ratelim" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884ea729860d6283cc6a9e37053ed19e300ea401dfb873f1ce40ce1c6e42e3f8" -dependencies = [ - "futures", - "humantime", - "once_cell", - "thiserror 1.0.69", - "tor-error", - "tor-rtcompat", - "tracing", - "weak-table", -] - -[[package]] -name = "tor-netdir" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8c382ef5af3632fd534f33953282046649155287e97bbf2469f2a8d25aaab17" -dependencies = [ - "bitflags", - "derive_more", - "digest", - "futures", - "hex", - "humantime", - "itertools 0.13.0", - "num_enum", - "rand", + "memchr", + "ryu", "serde", - "static_assertions", - "strum 0.26.3", - "thiserror 1.0.69", - "time", - "tor-basic-utils", - "tor-error", - "tor-hscrypto", - "tor-linkspec", - "tor-llcrypto", - "tor-netdoc", - "tor-protover", - "tor-units", - "tracing", - "typed-index-collections", ] [[package]] -name = "tor-netdoc" -version = "0.21.0" +name = "sharded-slab" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a1d54c3d922798d1e64d989c574f63306ec6fa0de1d3094b58642edfc5bbc7" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ - "amplify", - "base64ct", - "bitflags", - "cipher", - "derive_builder_fork_arti", - "derive_more", - "digest", - "educe", - "hex", - "humantime", - "itertools 0.13.0", - "once_cell", - "phf", - "rand", - "serde", - "serde_with", - "signature", - "smallvec", - "subtle", - "thiserror 1.0.69", - "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", - "weak-table", - "zeroize", + "lazy_static", ] [[package]] -name = "tor-persist" -version = "0.21.0" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115ecf2214ee6187a435c34f62f9ccbc648bc17c2ed71cfed6a15b3c1b300421" -dependencies = [ - "derive-deftly", - "derive_more", - "filetime", - "fs-mistrust", - "fslock", - "futures", - "itertools 0.13.0", - "paste", - "sanitize-filename", - "serde", - "serde_json", - "thiserror 1.0.69", - "tor-async-utils", - "tor-basic-utils", - "tor-error", - "tracing", - "void", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "tor-proto" -version = "0.21.0" +name = "signal-hook-registry" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a4c0767336e8473b11a2b7e2fc6c9acdfc1ea773fb64aeec472f34d3c6e963" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ - "asynchronous-codec", - "bitvec", - "bytes", - "cipher", - "coarsetime", - "derive_builder_fork_arti", - "derive_more", - "digest", - "educe", - "futures", - "hkdf", - "hmac", - "pin-project", - "rand", - "rand_core", - "safelog", - "subtle", - "thiserror 1.0.69", - "tokio", - "tokio-util", - "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-rtcompat", - "tor-rtmock", - "tor-units", - "tracing", - "typenum", - "visibility", - "void", - "zeroize", + "libc", ] [[package]] -name = "tor-protover" -version = "0.21.0" +name = "smallvec" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" + +[[package]] +name = "socket2" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c8e197673623de48822e5c1bd3490a80b111b2c77f5645c68ecd325ff8c4ae" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ - "caret", - "thiserror 1.0.69", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "tor-relay-selection" -version = "0.21.0" +name = "syn" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931da6c638af01f2a177343c222a0b19a76b2b7375ec3b1672cf2c3a30f52776" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ - "rand", - "serde", - "tor-basic-utils", - "tor-linkspec", - "tor-netdir", - "tor-netdoc", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "tor-rtcompat" -version = "0.21.0" +name = "tempfile" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46171d63c376aa62109c95e870233650bca2c014ac4f72153e49f3b116d6d75c" +checksum = "488960f40a3fd53d72c2a29a58722561dee8afdd175bd88e3db4677d7b2ba600" dependencies = [ - "async-trait", - "async_executors", - "coarsetime", - "derive_more", - "educe", - "futures", - "futures-rustls", - "paste", - "pin-project", - "rustls-pki-types", - "thiserror 1.0.69", - "tokio", - "tokio-util", - "tor-error", - "tracing", - "x509-signature", + "fastrand", + "getrandom 0.3.2", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] -name = "tor-rtmock" -version = "0.21.0" +name = "thread_local" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c0a1752e7c85a43b15c784d1f317fe2efd025d720bb3e680bf34db5ea4e5f64" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ - "amplify", - "async-trait", - "backtrace", - "derive-deftly", - "derive_more", - "educe", - "futures", - "humantime", - "itertools 0.13.0", - "pin-project", - "priority-queue", - "slotmap", - "strum 0.26.3", - "thiserror 1.0.69", - "tor-async-utils", - "tor-error", - "tor-rtcompat", - "tracing", - "tracing-test", - "void", + "cfg-if", + "once_cell", ] [[package]] -name = "tor-socksproto" -version = "0.21.0" +name = "tokio" +version = "1.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8639f64c9567571a0e309c922191df947572d28f3ffd79e3c7833d50e5facf" +checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" dependencies = [ - "caret", - "subtle", - "thiserror 1.0.69", - "tor-bytes", - "tor-error", + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", ] [[package]] -name = "tor-units" -version = "0.21.0" +name = "tokio-macros" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2432e20a3ceea2b30292bd77727feeeab1b2af0e446208889ca5a351400afbb" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ - "derive_more", - "thiserror 1.0.69", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -3851,7 +850,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] @@ -3881,78 +880,20 @@ version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ - "matchers", "nu-ansi-term", - "once_cell", - "regex", "sharded-slab", "smallvec", "thread_local", - "tracing", "tracing-core", "tracing-log", ] -[[package]] -name = "tracing-test" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" -dependencies = [ - "tracing-core", - "tracing-subscriber", - "tracing-test-macro", -] - -[[package]] -name = "tracing-test-macro" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" -dependencies = [ - "quote", - "syn 2.0.100", -] - -[[package]] -name = "typed-index-collections" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183496e014253d15abbe6235677b1392dba2d40524c88938991226baa38ac7c4" - -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - -[[package]] -name = "uncased" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-ident" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - [[package]] name = "valuable" version = "0.1.1" @@ -3971,33 +912,6 @@ 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", - "quote", - "syn 2.0.100", -] - -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -4013,89 +927,6 @@ dependencies = [ "wit-bindgen-rt", ] -[[package]] -name = "wasix" -version = "0.12.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" -dependencies = [ - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.100", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", -] - -[[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.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "which" version = "3.1.1" @@ -4121,36 +952,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-link" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" - [[package]] name = "windows-sys" version = "0.48.0" @@ -4299,24 +1106,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" -dependencies = [ - "memchr", -] - [[package]] name = "wit-bindgen-rt" version = "0.39.0" @@ -4326,37 +1115,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "x25519-dalek" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" -dependencies = [ - "curve25519-dalek", - "rand_core", - "serde", - "zeroize", -] - -[[package]] -name = "x509-signature" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb2bc2a902d992cd5f471ee3ab0ffd6603047a4207384562755b9d6de977518" -dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", -] - [[package]] name = "zerocopy" version = "0.7.35" @@ -4383,7 +1141,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] @@ -4394,25 +1152,5 @@ checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", -] - -[[package]] -name = "zeroize" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index ce3f2ea6..a29fb718 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,18 +31,10 @@ tokio = { version = "1", default-features = false, features = [ # Optional dependencies rusqlite = { version = "0.31.0", features = ["bundled"], optional = true } -arti-client = { version = "0.21.0", features = [ - "rustls", - "tokio", - "onion-service-client", - "experimental-api", -], default-features = false, optional = true } -tor-rtcompat = { version = "0.21.0", features = ["tokio"], optional = true } [features] default = ["database"] database = ["rusqlite"] -tor = ["arti-client", "tor-rtcompat"] filter-control = [] [dev-dependencies] @@ -73,11 +65,6 @@ path = "example/testnet4.rs" name = "rescan" path = "example/rescan.rs" -[[example]] -name = "tor" -path = "example/tor.rs" -required-features = ["tor"] - [[example]] name = "managed" path = "example/managed.rs" diff --git a/README.md b/README.md index d87df858..6976db64 100644 --- a/README.md +++ b/README.md @@ -101,8 +101,6 @@ async fn main() { The `kyoto` core library with default features supports an MSRV of Rust 1.63. -While connections over the Tor protocol are supported by the feature `tor`, the dependencies required cannot support the MSRV. As such, no MSRV guarantees will be made when using Tor, and the feature should be considered experimental. - ## Integration Testing The preferred workflow is by using `just`. If you do not have `just` installed, check out the [installation page](https://just.systems/man/en/chapter_4.html). diff --git a/example/tor.rs b/example/tor.rs deleted file mode 100644 index 5c7b1fb9..00000000 --- a/example/tor.rs +++ /dev/null @@ -1,111 +0,0 @@ -//! Kyoto allows for use of the Tor protocol to connect to peers. -//! To do so, the `arti` project is used to build a Tor client. -//! Enable Tor connections via the `tor` feature. - -use kyoto::{ - Client, ConnectionType, Event, HeaderCheckpoint, Log, Network, NodeBuilder, - PeerStoreSizeConfig, TorClient, TorClientConfig, TrustedPeer, -}; -use std::collections::HashSet; -use std::str::FromStr; - -const PEER_ONION: [u8; 32] = [ - 122, 158, 138, 248, 80, 128, 65, 182, 7, 162, 120, 132, 58, 231, 181, 235, 247, 78, 128, 81, - 77, 117, 148, 234, 156, 5, 51, 150, 136, 144, 21, 22, -]; -const RECOVERY_HEIGHT: u32 = 220_000; -const ADDR: &str = "tb1qmfjfv35csd200t0cfpckvx4ccw6w7ytkvga2gn"; -const NETWORK: Network = Network::Signet; - -#[tokio::main] -async fn main() { - // Add third-party logging - let subscriber = tracing_subscriber::FmtSubscriber::new(); - tracing::subscriber::set_global_default(subscriber).unwrap(); - // Start a TorClient - let tor = TorClient::create_bootstrapped(TorClientConfig::default()) - .await - .unwrap(); - // Add Bitcoin scripts to scan the blockchain for - let address = bitcoin::Address::from_str(ADDR) - .unwrap() - .require_network(NETWORK) - .unwrap() - .into(); - let mut addresses = HashSet::new(); - addresses.insert(address); - // If you don't have any checkpoint stored yet, you can use a predefined header. - let anchor = HeaderCheckpoint::closest_checkpoint_below_height(RECOVERY_HEIGHT, NETWORK); - // Define a peer to connect to - let peer = TrustedPeer::from_tor_v3(PEER_ONION); - // Create a new node builder - let builder = NodeBuilder::new(NETWORK); - // Add node preferences and build the node/client - let (node, client) = builder - // Add the peer - .add_peer(peer) - // The Bitcoin scripts to monitor - .add_scripts(addresses) - // Only scan blocks strictly after an anchor checkpoint - .anchor_checkpoint(anchor) - // The number of connections we would like to maintain - .required_peers(2) - // We only maintain a list of 256 peers in memory - .peer_db_size(PeerStoreSizeConfig::Limit(256)) - // Connect to peers over Tor - .connection_type(ConnectionType::Tor(tor)) - // Build without the default databases - .build() - .unwrap(); - // Run the node - tokio::task::spawn(async move { node.run().await }); - - let Client { - requester, - mut log_rx, - mut warn_rx, - mut event_rx, - } = client; - // Continually listen for events until the node is synced to its peers. - loop { - tokio::select! { - event = event_rx.recv() => { - if let Some(event) = event { - match event { - Event::Synced(update) => { - tracing::info!("Synced chain up to block {}",update.tip().height); - tracing::info!("Chain tip: {}",update.tip().hash); - // Request information from the node - let fee = requester.broadcast_min_feerate().await.unwrap(); - tracing::info!("Minimum transaction broadcast fee rate: {}", fee); - break; - }, - Event::Block(indexed_block) => { - let hash = indexed_block.block.block_hash(); - tracing::info!("Received block: {}", hash); - }, - Event::BlocksDisconnected(_) => { - tracing::warn!("Some blocks were reorganized") - }, - } - } - } - log = log_rx.recv() => { - if let Some(log) = log { - match log { - Log::Dialog(d)=> tracing::info!("{d}"), - Log::StateChange(node_state) => tracing::info!("{node_state}"), - Log::ConnectionsMet => tracing::info!("All required connections met"), - _ => (), - } - } - } - warn = warn_rx.recv() => { - if let Some(warn) = warn { - tracing::warn!("{warn}"); - } - } - } - } - let _ = requester.shutdown().await; -} diff --git a/src/builder.rs b/src/builder.rs index 24430dc8..f7735847 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -11,11 +11,12 @@ use crate::db::error::SqlInitializationError; #[cfg(feature = "database")] use crate::db::sqlite::{headers::SqliteHeaderDb, peers::SqlitePeerDb}; use crate::network::dns::{DnsResolver, DNS_RESOLVER_PORT}; +use crate::network::ConnectionType; use crate::{ chain::checkpoints::HeaderCheckpoint, db::traits::{HeaderStore, PeerStore}, }; -use crate::{ConnectionType, FilterSyncPolicy, LogLevel, PeerStoreSizeConfig, TrustedPeer}; +use crate::{FilterSyncPolicy, LogLevel, PeerStoreSizeConfig, TrustedPeer}; #[cfg(feature = "database")] /// The default node returned from the [`NodeBuilder`](crate::core). @@ -149,12 +150,6 @@ impl NodeBuilder { self } - /// Set the desired communication channel. Either directly over TCP or over the Tor network. - pub fn connection_type(mut self, connection_type: ConnectionType) -> Self { - self.config.connection_type = connection_type; - self - } - /// Set the time duration a peer has to respond to a message from the local node. /// /// ## Note @@ -193,6 +188,15 @@ impl NodeBuilder { self } + /// Route network traffic through a Tor daemon using a Socks5 proxy. Currently, proxies + /// must be reachable by IP address. + pub fn socks5_proxy(mut self, proxy: impl Into) -> Self { + let ip_addr = proxy.into(); + let connection = ConnectionType::Socks5Proxy(ip_addr); + self.config.connection_type = connection; + self + } + /// Stop the node from downloading and checking compact block filters until an explicit command by the client is made. /// This is only useful if the scripts to check for may not be known do to some expensive computation, like in a silent /// payments context. diff --git a/src/config.rs b/src/config.rs index f41b9a52..b0ecd8e8 100644 --- a/src/config.rs +++ b/src/config.rs @@ -3,7 +3,8 @@ use std::{collections::HashSet, path::PathBuf, time::Duration}; use bitcoin::ScriptBuf; use crate::{ - chain::checkpoints::HeaderCheckpoint, network::dns::DnsResolver, ConnectionType, + chain::checkpoints::HeaderCheckpoint, + network::{dns::DnsResolver, ConnectionType}, FilterSyncPolicy, LogLevel, PeerStoreSizeConfig, TrustedPeer, }; diff --git a/src/lib.rs b/src/lib.rs index 1046a91b..de8a81d3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -76,8 +76,6 @@ //! `database`: use the default `rusqlite` database implementations. Default and recommend feature. //! //! `filter-control`: check filters and request blocks directly. Recommended for silent payments or strict chain ordering implementations. -//! -//! `tor` *No MSRV guarantees*: connect to nodes over the Tor network. #![warn(missing_docs)] pub mod chain; @@ -116,11 +114,6 @@ use std::collections::HashSet; use std::net::{IpAddr, SocketAddr}; -#[cfg(feature = "tor")] -pub use arti_client::{TorClient, TorClientConfig}; -#[cfg(feature = "tor")] -use tor_rtcompat::PreferredRuntime; - // Re-exports #[doc(inline)] pub use chain::checkpoints::{ @@ -320,21 +313,6 @@ impl TrustedPeer { } } - /// Create a new peer from a TorV3 service and port. - #[cfg(feature = "tor")] - pub fn new_from_tor_v3( - public_key: [u8; 32], - port: Option, - services: ServiceFlags, - ) -> Self { - let address = AddrV2::TorV3(public_key); - Self { - address, - port, - known_services: services, - } - } - /// Create a new trusted peer using the default port for the network. pub fn from_ip(ip_addr: impl Into) -> Self { let address = match ip_addr.into() { @@ -362,17 +340,6 @@ impl TrustedPeer { } } - /// Create a new peer from a TorV3 service. - #[cfg(feature = "tor")] - pub fn from_tor_v3(public_key: [u8; 32]) -> Self { - let address = AddrV2::TorV3(public_key); - Self { - address, - port: None, - known_services: ServiceFlags::NONE, - } - } - /// The IP address of the trusted peer. pub fn address(&self) -> AddrV2 { self.address.clone() @@ -422,18 +389,6 @@ impl From for TrustedPeer { } } -/// How to connect to peers on the peer-to-peer network -#[derive(Default, Clone)] -#[non_exhaustive] -pub enum ConnectionType { - /// Version one peer-to-peer connections - #[default] - ClearNet, - /// Connect to peers over Tor - #[cfg(feature = "tor")] - Tor(TorClient), -} - /// Configure how many peers will be stored. #[derive(Debug, Default, Clone)] pub enum PeerStoreSizeConfig { diff --git a/src/network/error.rs b/src/network/error.rs index 18b3a5a3..f511b39e 100644 --- a/src/network/error.rs +++ b/src/network/error.rs @@ -29,7 +29,7 @@ impl_sourceless_error!(PeerReadError); // TODO: (@leonardo) Should the error variants wrap inner errors for richer information ? #[derive(Debug)] -pub enum PeerError { +pub(crate) enum PeerError { ConnectionFailed, MessageEncryption, MessageSerialization, @@ -39,6 +39,7 @@ pub enum PeerError { DisconnectCommand, Reader, UnreachableSocketAddr, + Socks5(Socks5Error), } impl core::fmt::Display for PeerError { @@ -68,12 +69,50 @@ impl core::fmt::Display for PeerError { PeerError::MessageEncryption => { write!(f, "encrypting a serialized message failed.") } + PeerError::Socks5(err) => { + write!(f, "could not connect via Socks5 proxy: {err}") + } } } } impl_sourceless_error!(PeerError); +#[derive(Debug, Clone)] +pub(crate) enum Socks5Error { + WrongVersion, + AuthRequired, + ConnectionTimeout, + ConnectionFailed, + IO, +} + +impl core::fmt::Display for Socks5Error { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + match self { + Socks5Error::WrongVersion => write!(f, "server responded with an unsupported version."), + Socks5Error::AuthRequired => write!(f, "server requires authentication."), + Socks5Error::ConnectionTimeout => write!(f, "connection to server timed out."), + Socks5Error::ConnectionFailed => write!( + f, + "the server could not connect to the requested destination." + ), + Socks5Error::IO => write!( + f, + "reading or writing to the TCP stream failed unexpectedly." + ), + } + } +} + +impl_sourceless_error!(Socks5Error); + +impl From for Socks5Error { + fn from(_value: std::io::Error) -> Self { + Socks5Error::IO + } +} + #[derive(Debug)] pub(crate) enum DnsBootstrapError { NotEnoughPeersError, diff --git a/src/network/mod.rs b/src/network/mod.rs index 60e3ebb1..ac37746a 100644 --- a/src/network/mod.rs +++ b/src/network/mod.rs @@ -1,10 +1,21 @@ +use std::{ + net::{IpAddr, SocketAddr}, + time::Duration, +}; + use bitcoin::{ consensus::Decodable, io::Read, - p2p::{message::CommandString, Magic}, + p2p::{address::AddrV2, message::CommandString, Magic}, }; -use std::time::Duration; -use tokio::time::Instant; +use socks::create_socks5; +use tokio::{ + io::{AsyncRead, AsyncWrite}, + net::TcpStream, + time::Instant, +}; + +use error::PeerError; pub(crate) mod counter; pub(crate) mod dns; @@ -16,14 +27,18 @@ pub(crate) mod peer; pub(crate) mod peer_map; #[allow(dead_code)] pub(crate) mod reader; -#[cfg(feature = "tor")] -pub(crate) mod tor; +pub(crate) mod socks; pub(crate) mod traits; pub const PROTOCOL_VERSION: u32 = 70016; pub const KYOTO_VERSION: &str = "0.8.0"; pub const RUST_BITCOIN_VERSION: &str = "0.32.4"; + const THIRTY_MINS: u64 = 60 * 30; +const CONNECTION_TIMEOUT: u64 = 2; + +pub(crate) type StreamReader = Box; +pub(crate) type StreamWriter = Box; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub(crate) struct PeerId(pub(crate) u32); @@ -86,6 +101,57 @@ impl LastBlockMonitor { } } +#[derive(Debug, Clone, Copy, Default)] +pub(crate) enum ConnectionType { + #[default] + ClearNet, + Socks5Proxy(SocketAddr), +} + +impl ConnectionType { + pub(crate) fn can_connect(&self, addr: &AddrV2) -> bool { + match &self { + Self::ClearNet => matches!(addr, AddrV2::Ipv4(_) | AddrV2::Ipv6(_)), + Self::Socks5Proxy(_) => matches!(addr, AddrV2::Ipv4(_) | AddrV2::Ipv6(_)), + } + } + + pub(crate) async fn connect( + &self, + addr: AddrV2, + port: u16, + ) -> Result<(StreamReader, StreamWriter), PeerError> { + let socket_addr = match addr { + AddrV2::Ipv4(ip) => IpAddr::V4(ip), + AddrV2::Ipv6(ip) => IpAddr::V6(ip), + _ => return Err(PeerError::UnreachableSocketAddr), + }; + match &self { + Self::ClearNet => { + let timeout = tokio::time::timeout( + Duration::from_secs(CONNECTION_TIMEOUT), + TcpStream::connect((socket_addr, port)), + ) + .await + .map_err(|_| PeerError::ConnectionFailed)?; + let tcp_stream = timeout.map_err(|_| PeerError::ConnectionFailed)?; + let (reader, writer) = tcp_stream.into_split(); + Ok((Box::new(reader), Box::new(writer))) + } + Self::Socks5Proxy(proxy) => { + let socks5_timeout = tokio::time::timeout( + Duration::from_secs(CONNECTION_TIMEOUT), + create_socks5(*proxy, socket_addr, port), + ) + .await + .map_err(|_| PeerError::ConnectionFailed)?; + let (reader, writer) = socks5_timeout.map_err(PeerError::Socks5)?; + Ok((reader, writer)) + } + } + } +} + pub(crate) struct V1Header { magic: Magic, _command: CommandString, diff --git a/src/network/parsers.rs b/src/network/parsers.rs index 07ba35e2..7bd12371 100644 --- a/src/network/parsers.rs +++ b/src/network/parsers.rs @@ -8,8 +8,8 @@ use tokio::io::AsyncReadExt; use crate::prelude::FutureResult; use super::error::PeerReadError; -use super::traits::{MessageParser, StreamReader}; use super::V1Header; +use super::{traits::MessageParser, StreamReader}; const MAX_MESSAGE_BYTES: u32 = 1024 * 1024 * 32; @@ -24,9 +24,9 @@ impl V1MessageParser { } async fn do_read_message(&mut self) -> Result, PeerReadError> { - let mut stream = self.stream.lock().await; let mut message_buf = vec![0_u8; 24]; - let _ = stream + let _ = self + .stream .read_exact(&mut message_buf) .await .map_err(|_| PeerReadError::ReadBuffer)?; @@ -42,7 +42,8 @@ impl V1MessageParser { return Err(PeerReadError::Deserialization); } let mut contents_buf = vec![0_u8; header.length as usize]; - let _ = stream + let _ = self + .stream .read_exact(&mut contents_buf) .await .map_err(|_| PeerReadError::ReadBuffer)?; @@ -70,9 +71,9 @@ impl V2MessageParser { } async fn do_read_message(&mut self) -> Result, PeerReadError> { - let mut stream = self.stream.lock().await; let mut len_buf = [0; 3]; - let _ = stream + let _ = self + .stream .read_exact(&mut len_buf) .await .map_err(|_| PeerReadError::ReadBuffer)?; @@ -81,7 +82,8 @@ impl V2MessageParser { return Err(PeerReadError::TooManyMessages); } let mut response_message = vec![0; message_len]; - let _ = stream + let _ = self + .stream .read_exact(&mut response_message) .await .map_err(|_| PeerReadError::ReadBuffer)?; diff --git a/src/network/peer.rs b/src/network/peer.rs index bb2a5be9..41654de6 100644 --- a/src/network/peer.rs +++ b/src/network/peer.rs @@ -23,17 +23,11 @@ use crate::{ }; use super::{ - counter::MessageCounter, - error::PeerError, - parsers::V1MessageParser, - reader::Reader, - traits::{MessageGenerator, StreamReader, StreamWriter}, - PeerId, PeerTimeoutConfig, + counter::MessageCounter, error::PeerError, parsers::V1MessageParser, reader::Reader, + traits::MessageGenerator, PeerId, PeerTimeoutConfig, StreamReader, StreamWriter, }; -#[cfg(not(feature = "tor"))] use super::outbound_messages::V2OutboundMessage; -#[cfg(not(feature = "tor"))] use super::parsers::V2MessageParser; const MESSAGE_TIMEOUT: u64 = 2; @@ -79,22 +73,16 @@ impl Peer { pub async fn run( &mut self, - reader: StreamReader, - writer: StreamWriter, + mut reader: StreamReader, + mut writer: StreamWriter, ) -> Result<(), PeerError> { let start_time = Instant::now(); let (tx, mut rx) = mpsc::channel(32); - let mut lock = writer.lock().await; - let writer = lock.deref_mut(); - // If a peer signals for V2 we will use it, otherwise just use plaintext. - #[cfg(not(feature = "tor"))] let (message_mutex, mut peer_reader) = if self.services.has(ServiceFlags::P2P_V2) { - let mut lock = reader.lock().await; - let read_lock = lock.deref_mut(); let handshake_result = tokio::time::timeout( Duration::from_secs(HANDSHAKE_TIMEOUT), - self.try_handshake(writer, read_lock), + self.try_handshake(&mut writer, &mut reader), ) .await .map_err(|_| PeerError::HandshakeFailed)?; @@ -108,7 +96,6 @@ impl Peer { let (decryptor, encryptor) = handshake_result?; let message_mutex: MutexMessageGenerator = Mutex::new(Box::new(V2OutboundMessage::new(self.network, encryptor))); - drop(lock); let reader = Reader::new(V2MessageParser::new(reader, decryptor), tx); (message_mutex, reader) } else { @@ -118,19 +105,10 @@ impl Peer { (message_mutex, reader) }; - // V2 handshakes fail frequently over Tor and messages are encrypted over relays anyway. - #[cfg(feature = "tor")] - let (message_mutex, mut peer_reader) = { - let outbound_messages = V1OutboundMessage::new(self.network); - let message_mutex: MutexMessageGenerator = Mutex::new(Box::new(outbound_messages)); - let reader = Reader::new(V1MessageParser::new(reader, self.network), tx); - (message_mutex, reader) - }; - let mut message_lock = message_mutex.lock().await; let outbound_messages = message_lock.deref_mut(); let message = outbound_messages.version_message(None)?; - self.write_bytes(writer, message).await?; + self.write_bytes(&mut writer, message).await?; self.message_counter.sent_version(); let read_handle = tokio::spawn(async move { peer_reader @@ -163,7 +141,7 @@ impl Peer { if let Ok(peer_message) = peer_message { match peer_message { Some(message) => { - match self.handle_peer_message(message, writer, outbound_messages).await { + match self.handle_peer_message(message, &mut writer, outbound_messages).await { Ok(()) => continue, Err(e) => { match e { @@ -182,7 +160,7 @@ impl Peer { node_message = self.main_thread_recv.recv() => { match node_message { Some(message) => { - match self.main_thread_request(message, writer, outbound_messages).await { + match self.main_thread_request(message, &mut writer, outbound_messages).await { Ok(()) => continue, Err(e) => { match e { diff --git a/src/network/peer_map.rs b/src/network/peer_map.rs index fcc5d8ff..7b79c6a4 100644 --- a/src/network/peer_map.rs +++ b/src/network/peer_map.rs @@ -25,17 +25,13 @@ use crate::{ db::{traits::PeerStore, PeerStatus, PersistedPeer}, dialog::Dialog, error::PeerManagerError, - network::{ - dns::DnsResolver, - error::PeerError, - peer::Peer, - traits::{ClearNetConnection, NetworkConnector}, - PeerId, PeerTimeoutConfig, - }, + network::{dns::DnsResolver, error::PeerError, peer::Peer, PeerId, PeerTimeoutConfig}, prelude::{default_port_from_network, Median, Netgroup}, - ConnectionType, PeerStoreSizeConfig, TrustedPeer, Warning, + PeerStoreSizeConfig, TrustedPeer, Warning, }; +use super::ConnectionType; + const MAX_TRIES: usize = 50; // Preferred peers to connect to based on the user configuration @@ -62,7 +58,7 @@ pub(crate) struct PeerMap { mtx: Sender, map: HashMap, db: Arc>, - connector: Arc>, + connector: ConnectionType, whitelist: Whitelist, dialog: Arc, target_db_size: PeerStoreSizeConfig, @@ -86,14 +82,6 @@ impl PeerMap

{ height_monitor: Arc>, dns_resolver: DnsResolver, ) -> Self { - let connector: Arc> = match connection_type { - ConnectionType::ClearNet => Arc::new(Mutex::new(ClearNetConnection::new())), - #[cfg(feature = "tor")] - ConnectionType::Tor(client) => { - use crate::network::tor::TorConnection; - Arc::new(Mutex::new(TorConnection::new(client))) - } - }; Self { current_id: PeerId(0), heights: height_monitor, @@ -101,7 +89,7 @@ impl PeerMap

{ mtx, map: HashMap::new(), db: Arc::new(Mutex::new(db)), - connector, + connector: connection_type, whitelist, dialog, target_db_size, @@ -176,15 +164,15 @@ impl PeerMap

{ Arc::clone(&self.dialog), self.timeout_config, ); - let mut connector = self.connector.lock().await; - if !connector.can_connect(&loaded_peer.addr) { + if !self.connector.can_connect(&loaded_peer.addr) { return Err(PeerError::UnreachableSocketAddr); } crate::log!( self.dialog, format!("Connecting to {:?}:{}", loaded_peer.addr, loaded_peer.port) ); - let (reader, writer) = connector + let (reader, writer) = self + .connector .connect(loaded_peer.addr.clone(), loaded_peer.port) .await?; let handle = tokio::spawn(async move { peer.run(reader, writer).await }); diff --git a/src/network/socks.rs b/src/network/socks.rs new file mode 100644 index 00000000..6ff255ce --- /dev/null +++ b/src/network/socks.rs @@ -0,0 +1,94 @@ +// Partial implementation of RFC 1928, Socks5 protocol +// ref: https://datatracker.ietf.org/doc/html/rfc1928#section-1 + +use std::{ + net::{IpAddr, SocketAddr}, + time::Duration, +}; + +use tokio::{ + io::{AsyncReadExt, AsyncWriteExt}, + net::TcpStream, +}; + +use crate::network::{StreamReader, StreamWriter}; + +use super::error::Socks5Error; + +const CONNECTION_TIMEOUT: u64 = 2; +const VERSION: u8 = 5; +const NOAUTH: u8 = 0; +const METHODS: u8 = 1; +const CMD_CONNECT: u8 = 1; +const RESPONSE_SUCCESS: u8 = 0; +const RSV: u8 = 0; +const ADDR_TYPE_IPV4: u8 = 1; +const ADDR_TYPE_IPV6: u8 = 4; + +pub(crate) async fn create_socks5( + proxy: SocketAddr, + ip_addr: IpAddr, + port: u16, +) -> Result<(StreamReader, StreamWriter), Socks5Error> { + // Connect to the proxy, likely a local Tor daemon. + let timeout = tokio::time::timeout( + Duration::from_secs(CONNECTION_TIMEOUT), + TcpStream::connect(proxy), + ) + .await + .map_err(|_| Socks5Error::ConnectionTimeout)?; + // Format the destination IP address and port according to the Socks5 spec + let dest_ip_bytes = match ip_addr { + IpAddr::V4(ipv4) => ipv4.octets().to_vec(), + IpAddr::V6(ipv6) => ipv6.octets().to_vec(), + }; + let dest_port_bytes = port.to_be_bytes(); + let ip_type_byte = match ip_addr { + IpAddr::V4(_) => ADDR_TYPE_IPV4, + IpAddr::V6(_) => ADDR_TYPE_IPV6, + }; + // Begin the handshake by requesting a connection to the proxy. + let mut tcp_stream = timeout.map_err(|_| Socks5Error::ConnectionFailed)?; + tcp_stream.write_all(&[VERSION, METHODS, NOAUTH]).await?; + // Read the response from the proxy + let mut buf = [0_u8; 2]; + tcp_stream.read_exact(&mut buf).await?; + if buf[0] != VERSION { + return Err(Socks5Error::WrongVersion); + } + if buf[1] != NOAUTH { + return Err(Socks5Error::AuthRequired); + } + // Write the request to the proxy to connect to our destination + tcp_stream + .write_all(&[VERSION, CMD_CONNECT, RSV, ip_type_byte]) + .await?; + tcp_stream.write_all(&dest_ip_bytes).await?; + tcp_stream.write_all(&dest_port_bytes).await?; + // First 4 bytes of the response: version, success/failure, reserved byte, ip type + let mut buf = [0_u8; 4]; + tcp_stream.read_exact(&mut buf).await?; + if buf[0] != VERSION { + return Err(Socks5Error::WrongVersion); + } + if buf[1] != RESPONSE_SUCCESS { + return Err(Socks5Error::ConnectionFailed); + } + // Read off the destination of our request + match buf[3] { + ADDR_TYPE_IPV4 => { + // Read the IPv4 address and additonal two bytes for the port + let mut buf = [0_u8; 6]; + tcp_stream.read_exact(&mut buf).await?; + } + ADDR_TYPE_IPV6 => { + // Read the IPv6 address and additonal two bytes for the port + let mut buf = [0_u8; 18]; + tcp_stream.read_exact(&mut buf).await?; + } + _ => return Err(Socks5Error::ConnectionFailed), + } + // Proxy handshake is complete, the TCP reader/writer can be returned + let (reader, writer) = tcp_stream.into_split(); + Ok((Box::new(reader), Box::new(writer))) +} diff --git a/src/network/tor.rs b/src/network/tor.rs deleted file mode 100644 index 0e4898d3..00000000 --- a/src/network/tor.rs +++ /dev/null @@ -1,79 +0,0 @@ -use arti_client::{config::BoolOrAuto, DataStream, HsId, StreamPrefs, TorAddr, TorClient}; -use bitcoin::p2p::address::AddrV2; -use tokio::sync::Mutex; -use tor_rtcompat::PreferredRuntime; - -use crate::prelude::FutureResult; - -use super::{ - error::PeerError, - traits::{NetworkConnector, StreamReader, StreamWriter}, -}; - -pub(crate) struct TorConnection { - client: TorClient, -} - -impl TorConnection { - pub(crate) fn new(client: TorClient) -> Self { - Self { client } - } -} - -impl NetworkConnector for TorConnection { - fn can_connect(&self, addr: &AddrV2) -> bool { - matches!(addr, AddrV2::Ipv4(_) | AddrV2::Ipv6(_) | AddrV2::TorV3(_)) - } - - // FIXME: (@leonardo) If we receive the AddressV2Message, we wouldn't need the port parameter, and could use the `socket_addr` method too. - fn connect( - &mut self, - addr: AddrV2, - port: u16, - ) -> FutureResult<(StreamReader, StreamWriter), PeerError> { - async fn do_impl( - client: &mut TorClient, - addr: AddrV2, - port: u16, - ) -> Result<(StreamReader, StreamWriter), PeerError> { - let data_stream: DataStream = match addr { - AddrV2::Ipv4(ip_addr) => { - let tor_addr = TorAddr::dangerously_from((ip_addr, port)) - .map_err(|_e| PeerError::UnreachableSocketAddr)?; - - client - .connect(tor_addr) - .await - .map_err(|_e| PeerError::ConnectionFailed)? - } - AddrV2::Ipv6(ip_addr) => { - let tor_addr = TorAddr::dangerously_from((ip_addr, port)) - .map_err(|_e| PeerError::UnreachableSocketAddr)?; - - client - .connect(tor_addr) - .await - .map_err(|_e| PeerError::ConnectionFailed)? - } - AddrV2::TorV3(pk) => { - let hs_id = HsId::from(pk); - let tor_addr = TorAddr::from((hs_id.to_string(), port)) - .map_err(|_e| PeerError::UnreachableSocketAddr)?; - - let mut stream_prefs = StreamPrefs::default(); - stream_prefs.connect_to_onion_services(BoolOrAuto::Explicit(true)); - - client - .connect_with_prefs(tor_addr, &stream_prefs) - .await - .map_err(|_e| PeerError::ConnectionFailed)? - } - _ => return Err(PeerError::UnreachableSocketAddr), - }; - - let (reader, writer) = data_stream.split(); - Ok((Mutex::new(Box::new(reader)), Mutex::new(Box::new(writer)))) - } - Box::pin(do_impl(&mut self.client, addr, port)) - } -} diff --git a/src/network/traits.rs b/src/network/traits.rs index c456ef5e..aea14e44 100644 --- a/src/network/traits.rs +++ b/src/network/traits.rs @@ -1,29 +1,15 @@ -use core::fmt::Debug; -use std::{net::IpAddr, time::Duration}; - use bitcoin::{ p2p::{ - address::AddrV2, message::NetworkMessage, message_filter::{GetCFHeaders, GetCFilters}, }, BlockHash, Transaction, Wtxid, }; -use tokio::{ - io::{AsyncRead, AsyncWrite}, - net::TcpStream, - sync::Mutex, -}; use crate::{channel_messages::GetBlockConfig, prelude::FutureResult}; use super::error::{PeerError, PeerReadError}; -const CONNECTION_TIMEOUT: u64 = 2; - -pub(crate) type StreamReader = Mutex>; -pub(crate) type StreamWriter = Mutex>; - // Responsible for serializing messages to write over the wire, either encrypted or plaintext. pub(crate) trait MessageGenerator: Send + Sync { fn version_message(&mut self, port: Option) -> Result, PeerError>; @@ -59,68 +45,3 @@ pub(crate) trait MessageGenerator: Send + Sync { pub(crate) trait MessageParser: Send + Sync { fn read_message(&mut self) -> FutureResult, PeerReadError>; } - -// Establishes connections based on the network configuration. -pub(crate) trait NetworkConnector { - fn can_connect(&self, addr: &AddrV2) -> bool; - - fn connect( - &mut self, - addr: AddrV2, - port: u16, - ) -> FutureResult<(StreamReader, StreamWriter), PeerError>; -} - -pub(crate) struct ClearNetConnection {} - -impl ClearNetConnection { - pub(crate) fn new() -> Self { - Self {} - } -} - -impl NetworkConnector for ClearNetConnection { - fn can_connect(&self, addr: &AddrV2) -> bool { - matches!(addr, AddrV2::Ipv4(_) | AddrV2::Ipv6(_)) - } - - fn connect( - &mut self, - addr: AddrV2, - port: u16, - ) -> FutureResult<(StreamReader, StreamWriter), PeerError> { - async fn do_impl( - addr: AddrV2, - port: u16, - ) -> Result<(StreamReader, StreamWriter), PeerError> { - let socket_addr = match addr { - AddrV2::Ipv4(ip) => IpAddr::V4(ip), - AddrV2::Ipv6(ip) => IpAddr::V6(ip), - _ => return Err(PeerError::UnreachableSocketAddr), - }; - let timeout = tokio::time::timeout( - Duration::from_secs(CONNECTION_TIMEOUT), - TcpStream::connect((socket_addr, port)), - ) - .await - .map_err(|_| PeerError::ConnectionFailed)?; - match timeout { - Ok(stream) => { - let (reader, writer) = stream.into_split(); - Ok((Mutex::new(Box::new(reader)), Mutex::new(Box::new(writer)))) - } - Err(_) => Err(PeerError::ConnectionFailed), - } - } - Box::pin(do_impl(addr, port)) - } -} - -impl Debug for dyn NetworkConnector + Send + Sync { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "Generic connection. Either TCP, Tor, or something else concrete" - ) - } -}