cat / goq
clone

turns a linux box into a private steam streaming appliance: plug in, tap your key, play from another computer

test

dami etoile committed 2a0cbdf
commit
2a0cbdf0dec6c512a74a08636597150c7d341b66
parent
235542cb27b2b465fa35bf6badd8c5bc71b2d24d
author
dami etoile <dami.etoile@gmail.com>
3 files changed, +4709 -0
Aspikes/007-titan-no-copy/Cargo.lock4451++++++++++++++++++++++++++++++
Aspikes/007-titan-no-copy/Cargo.toml14+
Aspikes/007-titan-no-copy/src/main.rs244++
A spikes/007-titan-no-copy/Cargo.lock +4451 -0
@@ -0,0 +1,4451 @@
1+# This file is automatically @generated by Cargo.2+# It is not intended for manual editing.3+version = 44+5+[[package]]6+name = "aead"7+version = "0.5.2"8+source = "registry+https://github.com/rust-lang/crates.io-index"9+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"10+dependencies = [11+ "crypto-common 0.1.7",12+ "generic-array",13+]14+15+[[package]]16+name = "aes"17+version = "0.8.4"18+source = "registry+https://github.com/rust-lang/crates.io-index"19+checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"20+dependencies = [21+ "cfg-if",22+ "cipher 0.4.4",23+ "cpufeatures 0.2.17",24+]25+26+[[package]]27+name = "aes"28+version = "0.9.1"29+source = "registry+https://github.com/rust-lang/crates.io-index"30+checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138"31+dependencies = [32+ "cipher 0.5.2",33+ "cpubits",34+ "cpufeatures 0.3.0",35+]36+37+[[package]]38+name = "aes-gcm"39+version = "0.10.3"40+source = "registry+https://github.com/rust-lang/crates.io-index"41+checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1"42+dependencies = [43+ "aead",44+ "aes 0.8.4",45+ "cipher 0.4.4",46+ "ctr",47+ "ghash",48+ "subtle",49+]50+51+[[package]]52+name = "aho-corasick"53+version = "1.1.4"54+source = "registry+https://github.com/rust-lang/crates.io-index"55+checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"56+dependencies = [57+ "memchr",58+]59+60+[[package]]61+name = "allocator-api2"62+version = "0.2.21"63+source = "registry+https://github.com/rust-lang/crates.io-index"64+checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"65+66+[[package]]67+name = "android_system_properties"68+version = "0.1.5"69+source = "registry+https://github.com/rust-lang/crates.io-index"70+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"71+dependencies = [72+ "libc",73+]74+75+[[package]]76+name = "anyhow"77+version = "1.0.102"78+source = "registry+https://github.com/rust-lang/crates.io-index"79+checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"80+81+[[package]]82+name = "arc-swap"83+version = "1.9.1"84+source = "registry+https://github.com/rust-lang/crates.io-index"85+checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207"86+dependencies = [87+ "rustversion",88+]89+90+[[package]]91+name = "arrayref"92+version = "0.3.9"93+source = "registry+https://github.com/rust-lang/crates.io-index"94+checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"95+96+[[package]]97+name = "arrayvec"98+version = "0.7.7"99+source = "registry+https://github.com/rust-lang/crates.io-index"100+checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe"101+102+[[package]]103+name = "asn1-rs"104+version = "0.7.2"105+source = "registry+https://github.com/rust-lang/crates.io-index"106+checksum = "b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8"107+dependencies = [108+ "asn1-rs-derive",109+ "asn1-rs-impl",110+ "displaydoc",111+ "nom",112+ "num-traits",113+ "rusticata-macros",114+ "thiserror 2.0.18",115+ "time",116+]117+118+[[package]]119+name = "asn1-rs-derive"120+version = "0.6.0"121+source = "registry+https://github.com/rust-lang/crates.io-index"122+checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c"123+dependencies = [124+ "proc-macro2",125+ "quote",126+ "syn",127+ "synstructure",128+]129+130+[[package]]131+name = "asn1-rs-impl"132+version = "0.2.0"133+source = "registry+https://github.com/rust-lang/crates.io-index"134+checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7"135+dependencies = [136+ "proc-macro2",137+ "quote",138+ "syn",139+]140+141+[[package]]142+name = "async-trait"143+version = "0.1.89"144+source = "registry+https://github.com/rust-lang/crates.io-index"145+checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"146+dependencies = [147+ "proc-macro2",148+ "quote",149+ "syn",150+]151+152+[[package]]153+name = "async_io_stream"154+version = "0.3.3"155+source = "registry+https://github.com/rust-lang/crates.io-index"156+checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c"157+dependencies = [158+ "futures",159+ "pharos",160+ "rustc_version",161+]162+163+[[package]]164+name = "atomic-waker"165+version = "1.1.2"166+source = "registry+https://github.com/rust-lang/crates.io-index"167+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"168+169+[[package]]170+name = "attohttpc"171+version = "0.30.1"172+source = "registry+https://github.com/rust-lang/crates.io-index"173+checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9"174+dependencies = [175+ "base64",176+ "http",177+ "log",178+ "url",179+]180+181+[[package]]182+name = "autocfg"183+version = "1.5.1"184+source = "registry+https://github.com/rust-lang/crates.io-index"185+checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"186+187+[[package]]188+name = "backon"189+version = "1.6.0"190+source = "registry+https://github.com/rust-lang/crates.io-index"191+checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef"192+dependencies = [193+ "fastrand",194+ "gloo-timers",195+ "tokio",196+]197+198+[[package]]199+name = "base16ct"200+version = "1.0.0"201+source = "registry+https://github.com/rust-lang/crates.io-index"202+checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6"203+204+[[package]]205+name = "base64"206+version = "0.22.1"207+source = "registry+https://github.com/rust-lang/crates.io-index"208+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"209+210+[[package]]211+name = "base64ct"212+version = "1.8.3"213+source = "registry+https://github.com/rust-lang/crates.io-index"214+checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"215+216+[[package]]217+name = "bitflags"218+version = "2.13.0"219+source = "registry+https://github.com/rust-lang/crates.io-index"220+checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"221+222+[[package]]223+name = "blake3"224+version = "1.8.5"225+source = "registry+https://github.com/rust-lang/crates.io-index"226+checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce"227+dependencies = [228+ "arrayref",229+ "arrayvec",230+ "cc",231+ "cfg-if",232+ "constant_time_eq",233+ "cpufeatures 0.3.0",234+]235+236+[[package]]237+name = "block-buffer"238+version = "0.10.4"239+source = "registry+https://github.com/rust-lang/crates.io-index"240+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"241+dependencies = [242+ "generic-array",243+]244+245+[[package]]246+name = "block-buffer"247+version = "0.12.1"248+source = "registry+https://github.com/rust-lang/crates.io-index"249+checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa"250+dependencies = [251+ "hybrid-array",252+]253+254+[[package]]255+name = "block-padding"256+version = "0.4.2"257+source = "registry+https://github.com/rust-lang/crates.io-index"258+checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b"259+dependencies = [260+ "hybrid-array",261+]262+263+[[package]]264+name = "block2"265+version = "0.6.2"266+source = "registry+https://github.com/rust-lang/crates.io-index"267+checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"268+dependencies = [269+ "objc2",270+]271+272+[[package]]273+name = "bumpalo"274+version = "3.20.3"275+source = "registry+https://github.com/rust-lang/crates.io-index"276+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"277+278+[[package]]279+name = "byteorder"280+version = "1.5.0"281+source = "registry+https://github.com/rust-lang/crates.io-index"282+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"283+284+[[package]]285+name = "bytes"286+version = "1.12.0"287+source = "registry+https://github.com/rust-lang/crates.io-index"288+checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593"289+290+[[package]]291+name = "cbc"292+version = "0.2.1"293+source = "registry+https://github.com/rust-lang/crates.io-index"294+checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896"295+dependencies = [296+ "cipher 0.5.2",297+]298+299+[[package]]300+name = "cc"301+version = "1.2.65"302+source = "registry+https://github.com/rust-lang/crates.io-index"303+checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96"304+dependencies = [305+ "find-msvc-tools",306+ "shlex",307+]308+309+[[package]]310+name = "cesu8"311+version = "1.1.0"312+source = "registry+https://github.com/rust-lang/crates.io-index"313+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"314+315+[[package]]316+name = "cfg-if"317+version = "1.0.4"318+source = "registry+https://github.com/rust-lang/crates.io-index"319+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"320+321+[[package]]322+name = "cfg_aliases"323+version = "0.2.1"324+source = "registry+https://github.com/rust-lang/crates.io-index"325+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"326+327+[[package]]328+name = "chacha20"329+version = "0.10.0"330+source = "registry+https://github.com/rust-lang/crates.io-index"331+checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601"332+dependencies = [333+ "cfg-if",334+ "cpufeatures 0.3.0",335+ "rand_core",336+]337+338+[[package]]339+name = "chrono"340+version = "0.4.45"341+source = "registry+https://github.com/rust-lang/crates.io-index"342+checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"343+dependencies = [344+ "iana-time-zone",345+ "num-traits",346+ "serde",347+ "windows-link",348+]349+350+[[package]]351+name = "ciborium"352+version = "0.2.2"353+source = "registry+https://github.com/rust-lang/crates.io-index"354+checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"355+dependencies = [356+ "ciborium-io",357+ "ciborium-ll",358+ "serde",359+]360+361+[[package]]362+name = "ciborium-io"363+version = "0.2.2"364+source = "registry+https://github.com/rust-lang/crates.io-index"365+checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"366+367+[[package]]368+name = "ciborium-ll"369+version = "0.2.2"370+source = "registry+https://github.com/rust-lang/crates.io-index"371+checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"372+dependencies = [373+ "ciborium-io",374+ "half",375+]376+377+[[package]]378+name = "cipher"379+version = "0.4.4"380+source = "registry+https://github.com/rust-lang/crates.io-index"381+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"382+dependencies = [383+ "crypto-common 0.1.7",384+ "inout 0.1.4",385+]386+387+[[package]]388+name = "cipher"389+version = "0.5.2"390+source = "registry+https://github.com/rust-lang/crates.io-index"391+checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c"392+dependencies = [393+ "crypto-common 0.2.2",394+ "inout 0.2.2",395+]396+397+[[package]]398+name = "cmov"399+version = "0.5.4"400+source = "registry+https://github.com/rust-lang/crates.io-index"401+checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a"402+403+[[package]]404+name = "cobs"405+version = "0.3.0"406+source = "registry+https://github.com/rust-lang/crates.io-index"407+checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1"408+dependencies = [409+ "thiserror 2.0.18",410+]411+412+[[package]]413+name = "combine"414+version = "4.6.7"415+source = "registry+https://github.com/rust-lang/crates.io-index"416+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"417+dependencies = [418+ "bytes",419+ "memchr",420+]421+422+[[package]]423+name = "const-oid"424+version = "0.10.2"425+source = "registry+https://github.com/rust-lang/crates.io-index"426+checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"427+428+[[package]]429+name = "constant_time_eq"430+version = "0.4.2"431+source = "registry+https://github.com/rust-lang/crates.io-index"432+checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b"433+434+[[package]]435+name = "convert_case"436+version = "0.10.0"437+source = "registry+https://github.com/rust-lang/crates.io-index"438+checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"439+dependencies = [440+ "unicode-segmentation",441+]442+443+[[package]]444+name = "cordyceps"445+version = "0.3.4"446+source = "registry+https://github.com/rust-lang/crates.io-index"447+checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a"448+dependencies = [449+ "loom",450+ "tracing",451+]452+453+[[package]]454+name = "core-foundation"455+version = "0.9.4"456+source = "registry+https://github.com/rust-lang/crates.io-index"457+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"458+dependencies = [459+ "core-foundation-sys",460+ "libc",461+]462+463+[[package]]464+name = "core-foundation"465+version = "0.10.1"466+source = "registry+https://github.com/rust-lang/crates.io-index"467+checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"468+dependencies = [469+ "core-foundation-sys",470+ "libc",471+]472+473+[[package]]474+name = "core-foundation-sys"475+version = "0.8.7"476+source = "registry+https://github.com/rust-lang/crates.io-index"477+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"478+479+[[package]]480+name = "cpubits"481+version = "0.1.1"482+source = "registry+https://github.com/rust-lang/crates.io-index"483+checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae"484+485+[[package]]486+name = "cpufeatures"487+version = "0.2.17"488+source = "registry+https://github.com/rust-lang/crates.io-index"489+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"490+dependencies = [491+ "libc",492+]493+494+[[package]]495+name = "cpufeatures"496+version = "0.3.0"497+source = "registry+https://github.com/rust-lang/crates.io-index"498+checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"499+dependencies = [500+ "libc",501+]502+503+[[package]]504+name = "critical-section"505+version = "1.2.0"506+source = "registry+https://github.com/rust-lang/crates.io-index"507+checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"508+509+[[package]]510+name = "crossbeam-channel"511+version = "0.5.15"512+source = "registry+https://github.com/rust-lang/crates.io-index"513+checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"514+dependencies = [515+ "crossbeam-utils",516+]517+518+[[package]]519+name = "crossbeam-epoch"520+version = "0.9.18"521+source = "registry+https://github.com/rust-lang/crates.io-index"522+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"523+dependencies = [524+ "crossbeam-utils",525+]526+527+[[package]]528+name = "crossbeam-utils"529+version = "0.8.21"530+source = "registry+https://github.com/rust-lang/crates.io-index"531+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"532+533+[[package]]534+name = "crunchy"535+version = "0.2.4"536+source = "registry+https://github.com/rust-lang/crates.io-index"537+checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"538+539+[[package]]540+name = "crypto-common"541+version = "0.1.7"542+source = "registry+https://github.com/rust-lang/crates.io-index"543+checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"544+dependencies = [545+ "generic-array",546+ "typenum",547+]548+549+[[package]]550+name = "crypto-common"551+version = "0.2.2"552+source = "registry+https://github.com/rust-lang/crates.io-index"553+checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"554+dependencies = [555+ "hybrid-array",556+]557+558+[[package]]559+name = "ctap-hid-fido2"560+version = "3.5.11"561+source = "registry+https://github.com/rust-lang/crates.io-index"562+checksum = "e75cc091f4eab3642ecf7f413f71342ac2b6bc1264fba4ce166de1c2d286e3ab"563+dependencies = [564+ "aes 0.9.1",565+ "anyhow",566+ "base64",567+ "byteorder",568+ "cbc",569+ "ciborium",570+ "hex",571+ "hidapi",572+ "num",573+ "pad",574+ "ring",575+ "strum",576+ "strum_macros",577+ "x509-parser",578+]579+580+[[package]]581+name = "ctr"582+version = "0.9.2"583+source = "registry+https://github.com/rust-lang/crates.io-index"584+checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"585+dependencies = [586+ "cipher 0.4.4",587+]588+589+[[package]]590+name = "ctutils"591+version = "0.4.2"592+source = "registry+https://github.com/rust-lang/crates.io-index"593+checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e"594+dependencies = [595+ "cmov",596+]597+598+[[package]]599+name = "curve25519-dalek"600+version = "5.0.0-rc.0"601+source = "registry+https://github.com/rust-lang/crates.io-index"602+checksum = "4f359e08ca85e7bd759e1fd933ff2bccd81864c60a8fba0e259c7f822b0924bf"603+dependencies = [604+ "cfg-if",605+ "cpufeatures 0.3.0",606+ "curve25519-dalek-derive",607+ "digest 0.11.3",608+ "fiat-crypto",609+ "rand_core",610+ "rustc_version",611+ "serde",612+ "subtle",613+ "zeroize",614+]615+616+[[package]]617+name = "curve25519-dalek-derive"618+version = "0.1.1"619+source = "registry+https://github.com/rust-lang/crates.io-index"620+checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"621+dependencies = [622+ "proc-macro2",623+ "quote",624+ "syn",625+]626+627+[[package]]628+name = "darling"629+version = "0.20.11"630+source = "registry+https://github.com/rust-lang/crates.io-index"631+checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"632+dependencies = [633+ "darling_core",634+ "darling_macro",635+]636+637+[[package]]638+name = "darling_core"639+version = "0.20.11"640+source = "registry+https://github.com/rust-lang/crates.io-index"641+checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"642+dependencies = [643+ "fnv",644+ "ident_case",645+ "proc-macro2",646+ "quote",647+ "strsim",648+ "syn",649+]650+651+[[package]]652+name = "darling_macro"653+version = "0.20.11"654+source = "registry+https://github.com/rust-lang/crates.io-index"655+checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"656+dependencies = [657+ "darling_core",658+ "quote",659+ "syn",660+]661+662+[[package]]663+name = "data-encoding"664+version = "2.11.0"665+source = "registry+https://github.com/rust-lang/crates.io-index"666+checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"667+668+[[package]]669+name = "data-encoding-macro"670+version = "0.1.20"671+source = "registry+https://github.com/rust-lang/crates.io-index"672+checksum = "3259c913752a86488b501ed8680446a5ed2d5aeac6e596cb23ba3800768ea32c"673+dependencies = [674+ "data-encoding",675+ "data-encoding-macro-internal",676+]677+678+[[package]]679+name = "data-encoding-macro-internal"680+version = "0.1.18"681+source = "registry+https://github.com/rust-lang/crates.io-index"682+checksum = "ccc2776f0c61eca1ca32528f85548abd1a4be8fb53d1b21c013e4f18da1e7090"683+dependencies = [684+ "data-encoding",685+ "syn",686+]687+688+[[package]]689+name = "der"690+version = "0.8.0"691+source = "registry+https://github.com/rust-lang/crates.io-index"692+checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b"693+dependencies = [694+ "const-oid",695+ "pem-rfc7468",696+ "zeroize",697+]698+699+[[package]]700+name = "der-parser"701+version = "10.0.0"702+source = "registry+https://github.com/rust-lang/crates.io-index"703+checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6"704+dependencies = [705+ "asn1-rs",706+ "displaydoc",707+ "nom",708+ "num-bigint",709+ "num-traits",710+ "rusticata-macros",711+]712+713+[[package]]714+name = "deranged"715+version = "0.5.8"716+source = "registry+https://github.com/rust-lang/crates.io-index"717+checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"718+719+[[package]]720+name = "derive_builder"721+version = "0.20.2"722+source = "registry+https://github.com/rust-lang/crates.io-index"723+checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947"724+dependencies = [725+ "derive_builder_macro",726+]727+728+[[package]]729+name = "derive_builder_core"730+version = "0.20.2"731+source = "registry+https://github.com/rust-lang/crates.io-index"732+checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"733+dependencies = [734+ "darling",735+ "proc-macro2",736+ "quote",737+ "syn",738+]739+740+[[package]]741+name = "derive_builder_macro"742+version = "0.20.2"743+source = "registry+https://github.com/rust-lang/crates.io-index"744+checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"745+dependencies = [746+ "derive_builder_core",747+ "syn",748+]749+750+[[package]]751+name = "derive_more"752+version = "2.1.1"753+source = "registry+https://github.com/rust-lang/crates.io-index"754+checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"755+dependencies = [756+ "derive_more-impl",757+]758+759+[[package]]760+name = "derive_more-impl"761+version = "2.1.1"762+source = "registry+https://github.com/rust-lang/crates.io-index"763+checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"764+dependencies = [765+ "convert_case",766+ "proc-macro2",767+ "quote",768+ "rustc_version",769+ "syn",770+ "unicode-xid",771+]772+773+[[package]]774+name = "diatomic-waker"775+version = "0.2.3"776+source = "registry+https://github.com/rust-lang/crates.io-index"777+checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c"778+779+[[package]]780+name = "digest"781+version = "0.10.7"782+source = "registry+https://github.com/rust-lang/crates.io-index"783+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"784+dependencies = [785+ "block-buffer 0.10.4",786+ "crypto-common 0.1.7",787+]788+789+[[package]]790+name = "digest"791+version = "0.11.3"792+source = "registry+https://github.com/rust-lang/crates.io-index"793+checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"794+dependencies = [795+ "block-buffer 0.12.1",796+ "crypto-common 0.2.2",797+]798+799+[[package]]800+name = "dispatch2"801+version = "0.3.1"802+source = "registry+https://github.com/rust-lang/crates.io-index"803+checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"804+dependencies = [805+ "bitflags",806+ "block2",807+ "libc",808+ "objc2",809+]810+811+[[package]]812+name = "displaydoc"813+version = "0.2.6"814+source = "registry+https://github.com/rust-lang/crates.io-index"815+checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f"816+dependencies = [817+ "proc-macro2",818+ "quote",819+ "syn",820+]821+822+[[package]]823+name = "dlopen2"824+version = "0.8.2"825+source = "registry+https://github.com/rust-lang/crates.io-index"826+checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4"827+dependencies = [828+ "libc",829+ "once_cell",830+ "winapi",831+]832+833+[[package]]834+name = "ed25519"835+version = "3.0.0"836+source = "registry+https://github.com/rust-lang/crates.io-index"837+checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a"838+dependencies = [839+ "pkcs8",840+ "serdect",841+ "signature",842+]843+844+[[package]]845+name = "ed25519-dalek"846+version = "3.0.0-rc.0"847+source = "registry+https://github.com/rust-lang/crates.io-index"848+checksum = "b011170fe4f04665565b4110afef66774fe9ffff278f3eb5b81cc73d26e27d60"849+dependencies = [850+ "curve25519-dalek",851+ "ed25519",852+ "rand_core",853+ "serde",854+ "sha2 0.11.0",855+ "signature",856+ "subtle",857+ "zeroize",858+]859+860+[[package]]861+name = "either"862+version = "1.16.0"863+source = "registry+https://github.com/rust-lang/crates.io-index"864+checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"865+866+[[package]]867+name = "embedded-io"868+version = "0.4.0"869+source = "registry+https://github.com/rust-lang/crates.io-index"870+checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"871+872+[[package]]873+name = "embedded-io"874+version = "0.6.1"875+source = "registry+https://github.com/rust-lang/crates.io-index"876+checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"877+878+[[package]]879+name = "enum-assoc"880+version = "1.3.0"881+source = "registry+https://github.com/rust-lang/crates.io-index"882+checksum = "3ed8956bd5c1f0415200516e78ff07ec9e16415ade83c056c230d7b7ea0d55b7"883+dependencies = [884+ "proc-macro2",885+ "quote",886+ "syn",887+]888+889+[[package]]890+name = "equivalent"891+version = "1.0.2"892+source = "registry+https://github.com/rust-lang/crates.io-index"893+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"894+895+[[package]]896+name = "errno"897+version = "0.3.14"898+source = "registry+https://github.com/rust-lang/crates.io-index"899+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"900+dependencies = [901+ "libc",902+ "windows-sys 0.61.2",903+]904+905+[[package]]906+name = "fastrand"907+version = "2.4.1"908+source = "registry+https://github.com/rust-lang/crates.io-index"909+checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"910+911+[[package]]912+name = "fiat-crypto"913+version = "0.3.0"914+source = "registry+https://github.com/rust-lang/crates.io-index"915+checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24"916+917+[[package]]918+name = "find-msvc-tools"919+version = "0.1.9"920+source = "registry+https://github.com/rust-lang/crates.io-index"921+checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"922+923+[[package]]924+name = "fnv"925+version = "1.0.7"926+source = "registry+https://github.com/rust-lang/crates.io-index"927+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"928+929+[[package]]930+name = "foldhash"931+version = "0.2.0"932+source = "registry+https://github.com/rust-lang/crates.io-index"933+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"934+935+[[package]]936+name = "form_urlencoded"937+version = "1.2.2"938+source = "registry+https://github.com/rust-lang/crates.io-index"939+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"940+dependencies = [941+ "percent-encoding",942+]943+944+[[package]]945+name = "futures"946+version = "0.3.32"947+source = "registry+https://github.com/rust-lang/crates.io-index"948+checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"949+dependencies = [950+ "futures-channel",951+ "futures-core",952+ "futures-executor",953+ "futures-io",954+ "futures-sink",955+ "futures-task",956+ "futures-util",957+]958+959+[[package]]960+name = "futures-buffered"961+version = "0.2.13"962+source = "registry+https://github.com/rust-lang/crates.io-index"963+checksum = "4421cb78ee172b6b06080093479d3c50f058e7c81b7d577bbb8d118d551d4cd5"964+dependencies = [965+ "cordyceps",966+ "diatomic-waker",967+ "futures-core",968+ "pin-project-lite",969+ "spin",970+]971+972+[[package]]973+name = "futures-channel"974+version = "0.3.32"975+source = "registry+https://github.com/rust-lang/crates.io-index"976+checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"977+dependencies = [978+ "futures-core",979+ "futures-sink",980+]981+982+[[package]]983+name = "futures-core"984+version = "0.3.32"985+source = "registry+https://github.com/rust-lang/crates.io-index"986+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"987+988+[[package]]989+name = "futures-executor"990+version = "0.3.32"991+source = "registry+https://github.com/rust-lang/crates.io-index"992+checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"993+dependencies = [994+ "futures-core",995+ "futures-task",996+ "futures-util",997+]998+999+[[package]]1000+name = "futures-io"1001+version = "0.3.32"1002+source = "registry+https://github.com/rust-lang/crates.io-index"1003+checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"1004+1005+[[package]]1006+name = "futures-lite"1007+version = "2.6.1"1008+source = "registry+https://github.com/rust-lang/crates.io-index"1009+checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"1010+dependencies = [1011+ "fastrand",1012+ "futures-core",1013+ "futures-io",1014+ "parking",1015+ "pin-project-lite",1016+]1017+1018+[[package]]1019+name = "futures-macro"1020+version = "0.3.32"1021+source = "registry+https://github.com/rust-lang/crates.io-index"1022+checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"1023+dependencies = [1024+ "proc-macro2",1025+ "quote",1026+ "syn",1027+]1028+1029+[[package]]1030+name = "futures-sink"1031+version = "0.3.32"1032+source = "registry+https://github.com/rust-lang/crates.io-index"1033+checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"1034+1035+[[package]]1036+name = "futures-task"1037+version = "0.3.32"1038+source = "registry+https://github.com/rust-lang/crates.io-index"1039+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"1040+1041+[[package]]1042+name = "futures-util"1043+version = "0.3.32"1044+source = "registry+https://github.com/rust-lang/crates.io-index"1045+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"1046+dependencies = [1047+ "futures-channel",1048+ "futures-core",1049+ "futures-io",1050+ "futures-macro",1051+ "futures-sink",1052+ "futures-task",1053+ "memchr",1054+ "pin-project-lite",1055+ "slab",1056+]1057+1058+[[package]]1059+name = "generator"1060+version = "0.8.9"1061+source = "registry+https://github.com/rust-lang/crates.io-index"1062+checksum = "b3b854b0e584ead1a33f18b2fcad7cf7be18b3875c78816b753639aa501513ae"1063+dependencies = [1064+ "cc",1065+ "cfg-if",1066+ "libc",1067+ "log",1068+ "rustversion",1069+ "windows-link",1070+ "windows-result",1071+]1072+1073+[[package]]1074+name = "generic-array"1075+version = "0.14.7"1076+source = "registry+https://github.com/rust-lang/crates.io-index"1077+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"1078+dependencies = [1079+ "typenum",1080+ "version_check",1081+]1082+1083+[[package]]1084+name = "getrandom"1085+version = "0.2.17"1086+source = "registry+https://github.com/rust-lang/crates.io-index"1087+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"1088+dependencies = [1089+ "cfg-if",1090+ "js-sys",1091+ "libc",1092+ "wasi",1093+ "wasm-bindgen",1094+]1095+1096+[[package]]1097+name = "getrandom"1098+version = "0.4.3"1099+source = "registry+https://github.com/rust-lang/crates.io-index"1100+checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"1101+dependencies = [1102+ "cfg-if",1103+ "js-sys",1104+ "libc",1105+ "r-efi",1106+ "rand_core",1107+ "wasm-bindgen",1108+]1109+1110+[[package]]1111+name = "ghash"1112+version = "0.5.1"1113+source = "registry+https://github.com/rust-lang/crates.io-index"1114+checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1"1115+dependencies = [1116+ "opaque-debug",1117+ "polyval",1118+]1119+1120+[[package]]1121+name = "gloo-timers"1122+version = "0.3.0"1123+source = "registry+https://github.com/rust-lang/crates.io-index"1124+checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994"1125+dependencies = [1126+ "futures-channel",1127+ "futures-core",1128+ "js-sys",1129+ "wasm-bindgen",1130+]1131+1132+[[package]]1133+name = "h2"1134+version = "0.4.15"1135+source = "registry+https://github.com/rust-lang/crates.io-index"1136+checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155"1137+dependencies = [1138+ "atomic-waker",1139+ "bytes",1140+ "fnv",1141+ "futures-core",1142+ "futures-sink",1143+ "http",1144+ "indexmap",1145+ "slab",1146+ "tokio",1147+ "tokio-util",1148+ "tracing",1149+]1150+1151+[[package]]1152+name = "half"1153+version = "2.7.1"1154+source = "registry+https://github.com/rust-lang/crates.io-index"1155+checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"1156+dependencies = [1157+ "cfg-if",1158+ "crunchy",1159+ "zerocopy",1160+]1161+1162+[[package]]1163+name = "hashbrown"1164+version = "0.17.1"1165+source = "registry+https://github.com/rust-lang/crates.io-index"1166+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"1167+dependencies = [1168+ "allocator-api2",1169+ "equivalent",1170+ "foldhash",1171+]1172+1173+[[package]]1174+name = "heck"1175+version = "0.5.0"1176+source = "registry+https://github.com/rust-lang/crates.io-index"1177+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"1178+1179+[[package]]1180+name = "hex"1181+version = "0.4.3"1182+source = "registry+https://github.com/rust-lang/crates.io-index"1183+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"1184+1185+[[package]]1186+name = "hickory-net"1187+version = "0.26.1"1188+source = "registry+https://github.com/rust-lang/crates.io-index"1189+checksum = "e2295ed2f9c31e471e1428a8f88a3f0e1f4b27c15049592138d1eebe9c35b183"1190+dependencies = [1191+ "async-trait",1192+ "bytes",1193+ "cfg-if",1194+ "data-encoding",1195+ "futures-channel",1196+ "futures-io",1197+ "futures-util",1198+ "h2",1199+ "hickory-proto",1200+ "http",1201+ "idna",1202+ "ipnet",1203+ "jni 0.22.4",1204+ "rand",1205+ "rustls",1206+ "thiserror 2.0.18",1207+ "tinyvec",1208+ "tokio",1209+ "tokio-rustls",1210+ "tracing",1211+ "url",1212+]1213+1214+[[package]]1215+name = "hickory-proto"1216+version = "0.26.1"1217+source = "registry+https://github.com/rust-lang/crates.io-index"1218+checksum = "0bab31817bfb44672a252e97fe81cd0c18d1b2cf892108922f6818820df8c643"1219+dependencies = [1220+ "data-encoding",1221+ "idna",1222+ "ipnet",1223+ "jni 0.22.4",1224+ "once_cell",1225+ "prefix-trie",1226+ "rand",1227+ "ring",1228+ "thiserror 2.0.18",1229+ "tinyvec",1230+ "tracing",1231+ "url",1232+]1233+1234+[[package]]1235+name = "hickory-resolver"1236+version = "0.26.1"1237+source = "registry+https://github.com/rust-lang/crates.io-index"1238+checksum = "f0d58d28879ceecde6607729660c2667a081ccdc082e082675042793960f178c"1239+dependencies = [1240+ "cfg-if",1241+ "futures-util",1242+ "hickory-net",1243+ "hickory-proto",1244+ "ipconfig",1245+ "ipnet",1246+ "jni 0.22.4",1247+ "moka",1248+ "ndk-context",1249+ "once_cell",1250+ "parking_lot",1251+ "rand",1252+ "resolv-conf",1253+ "rustls",1254+ "smallvec",1255+ "system-configuration",1256+ "thiserror 2.0.18",1257+ "tokio",1258+ "tokio-rustls",1259+ "tracing",1260+]1261+1262+[[package]]1263+name = "hidapi"1264+version = "2.6.6"1265+source = "registry+https://github.com/rust-lang/crates.io-index"1266+checksum = "c78dadfc12f865bc3fcac3897e64533b930737ceb9ef245c8277de98d0b010e9"1267+dependencies = [1268+ "cc",1269+ "cfg-if",1270+ "libc",1271+ "pkg-config",1272+ "windows-sys 0.61.2",1273+]1274+1275+[[package]]1276+name = "http"1277+version = "1.4.2"1278+source = "registry+https://github.com/rust-lang/crates.io-index"1279+checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425"1280+dependencies = [1281+ "bytes",1282+ "itoa",1283+]1284+1285+[[package]]1286+name = "http-body"1287+version = "1.0.1"1288+source = "registry+https://github.com/rust-lang/crates.io-index"1289+checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"1290+dependencies = [1291+ "bytes",1292+ "http",1293+]1294+1295+[[package]]1296+name = "http-body-util"1297+version = "0.1.3"1298+source = "registry+https://github.com/rust-lang/crates.io-index"1299+checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"1300+dependencies = [1301+ "bytes",1302+ "futures-core",1303+ "http",1304+ "http-body",1305+ "pin-project-lite",1306+]1307+1308+[[package]]1309+name = "httparse"1310+version = "1.10.1"1311+source = "registry+https://github.com/rust-lang/crates.io-index"1312+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"1313+1314+[[package]]1315+name = "httpdate"1316+version = "1.0.3"1317+source = "registry+https://github.com/rust-lang/crates.io-index"1318+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"1319+1320+[[package]]1321+name = "hybrid-array"1322+version = "0.4.12"1323+source = "registry+https://github.com/rust-lang/crates.io-index"1324+checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da"1325+dependencies = [1326+ "typenum",1327+]1328+1329+[[package]]1330+name = "hyper"1331+version = "1.10.1"1332+source = "registry+https://github.com/rust-lang/crates.io-index"1333+checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498"1334+dependencies = [1335+ "atomic-waker",1336+ "bytes",1337+ "futures-channel",1338+ "futures-core",1339+ "h2",1340+ "http",1341+ "http-body",1342+ "httparse",1343+ "httpdate",1344+ "itoa",1345+ "pin-project-lite",1346+ "smallvec",1347+ "tokio",1348+ "want",1349+]1350+1351+[[package]]1352+name = "hyper-rustls"1353+version = "0.27.9"1354+source = "registry+https://github.com/rust-lang/crates.io-index"1355+checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f"1356+dependencies = [1357+ "http",1358+ "hyper",1359+ "hyper-util",1360+ "rustls",1361+ "tokio",1362+ "tokio-rustls",1363+ "tower-service",1364+]1365+1366+[[package]]1367+name = "hyper-util"1368+version = "0.1.20"1369+source = "registry+https://github.com/rust-lang/crates.io-index"1370+checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"1371+dependencies = [1372+ "base64",1373+ "bytes",1374+ "futures-channel",1375+ "futures-util",1376+ "http",1377+ "http-body",1378+ "hyper",1379+ "ipnet",1380+ "libc",1381+ "percent-encoding",1382+ "pin-project-lite",1383+ "socket2",1384+ "tokio",1385+ "tower-service",1386+ "tracing",1387+]1388+1389+[[package]]1390+name = "iana-time-zone"1391+version = "0.1.65"1392+source = "registry+https://github.com/rust-lang/crates.io-index"1393+checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"1394+dependencies = [1395+ "android_system_properties",1396+ "core-foundation-sys",1397+ "iana-time-zone-haiku",1398+ "js-sys",1399+ "log",1400+ "wasm-bindgen",1401+ "windows-core",1402+]1403+1404+[[package]]1405+name = "iana-time-zone-haiku"1406+version = "0.1.2"1407+source = "registry+https://github.com/rust-lang/crates.io-index"1408+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"1409+dependencies = [1410+ "cc",1411+]1412+1413+[[package]]1414+name = "icu_collections"1415+version = "2.2.0"1416+source = "registry+https://github.com/rust-lang/crates.io-index"1417+checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"1418+dependencies = [1419+ "displaydoc",1420+ "potential_utf",1421+ "utf8_iter",1422+ "yoke",1423+ "zerofrom",1424+ "zerovec",1425+]1426+1427+[[package]]1428+name = "icu_locale_core"1429+version = "2.2.0"1430+source = "registry+https://github.com/rust-lang/crates.io-index"1431+checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"1432+dependencies = [1433+ "displaydoc",1434+ "litemap",1435+ "tinystr",1436+ "writeable",1437+ "zerovec",1438+]1439+1440+[[package]]1441+name = "icu_normalizer"1442+version = "2.2.0"1443+source = "registry+https://github.com/rust-lang/crates.io-index"1444+checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"1445+dependencies = [1446+ "icu_collections",1447+ "icu_normalizer_data",1448+ "icu_properties",1449+ "icu_provider",1450+ "smallvec",1451+ "zerovec",1452+]1453+1454+[[package]]1455+name = "icu_normalizer_data"1456+version = "2.2.0"1457+source = "registry+https://github.com/rust-lang/crates.io-index"1458+checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"1459+1460+[[package]]1461+name = "icu_properties"1462+version = "2.2.0"1463+source = "registry+https://github.com/rust-lang/crates.io-index"1464+checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"1465+dependencies = [1466+ "icu_collections",1467+ "icu_locale_core",1468+ "icu_properties_data",1469+ "icu_provider",1470+ "zerotrie",1471+ "zerovec",1472+]1473+1474+[[package]]1475+name = "icu_properties_data"1476+version = "2.2.0"1477+source = "registry+https://github.com/rust-lang/crates.io-index"1478+checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"1479+1480+[[package]]1481+name = "icu_provider"1482+version = "2.2.0"1483+source = "registry+https://github.com/rust-lang/crates.io-index"1484+checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"1485+dependencies = [1486+ "displaydoc",1487+ "icu_locale_core",1488+ "writeable",1489+ "yoke",1490+ "zerofrom",1491+ "zerotrie",1492+ "zerovec",1493+]1494+1495+[[package]]1496+name = "ident_case"1497+version = "1.0.1"1498+source = "registry+https://github.com/rust-lang/crates.io-index"1499+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"1500+1501+[[package]]1502+name = "identity-hash"1503+version = "0.1.0"1504+source = "registry+https://github.com/rust-lang/crates.io-index"1505+checksum = "dfdd7caa900436d8f13b2346fe10257e0c05c1f1f9e351f4f5d57c03bd5f45da"1506+1507+[[package]]1508+name = "idna"1509+version = "1.1.0"1510+source = "registry+https://github.com/rust-lang/crates.io-index"1511+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"1512+dependencies = [1513+ "idna_adapter",1514+ "smallvec",1515+ "utf8_iter",1516+]1517+1518+[[package]]1519+name = "idna_adapter"1520+version = "1.2.2"1521+source = "registry+https://github.com/rust-lang/crates.io-index"1522+checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"1523+dependencies = [1524+ "icu_normalizer",1525+ "icu_properties",1526+]1527+1528+[[package]]1529+name = "igd-next"1530+version = "0.17.1"1531+source = "registry+https://github.com/rust-lang/crates.io-index"1532+checksum = "de7238d487a9aff61f81b5ab41c0a841532a115a398b5fa92a2fadd0885e2581"1533+dependencies = [1534+ "attohttpc",1535+ "bytes",1536+ "futures",1537+ "http",1538+ "http-body-util",1539+ "hyper",1540+ "hyper-util",1541+ "log",1542+ "rand",1543+ "tokio",1544+ "url",1545+ "xmltree",1546+]1547+1548+[[package]]1549+name = "indexmap"1550+version = "2.14.0"1551+source = "registry+https://github.com/rust-lang/crates.io-index"1552+checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"1553+dependencies = [1554+ "equivalent",1555+ "hashbrown",1556+]1557+1558+[[package]]1559+name = "inout"1560+version = "0.1.4"1561+source = "registry+https://github.com/rust-lang/crates.io-index"1562+checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"1563+dependencies = [1564+ "generic-array",1565+]1566+1567+[[package]]1568+name = "inout"1569+version = "0.2.2"1570+source = "registry+https://github.com/rust-lang/crates.io-index"1571+checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7"1572+dependencies = [1573+ "block-padding",1574+ "hybrid-array",1575+]1576+1577+[[package]]1578+name = "ipconfig"1579+version = "0.3.4"1580+source = "registry+https://github.com/rust-lang/crates.io-index"1581+checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222"1582+dependencies = [1583+ "socket2",1584+ "widestring",1585+ "windows-registry",1586+ "windows-result",1587+ "windows-sys 0.61.2",1588+]1589+1590+[[package]]1591+name = "ipnet"1592+version = "2.12.0"1593+source = "registry+https://github.com/rust-lang/crates.io-index"1594+checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"1595+dependencies = [1596+ "serde",1597+]1598+1599+[[package]]1600+name = "iroh"1601+version = "1.0.0"1602+source = "registry+https://github.com/rust-lang/crates.io-index"1603+checksum = "6435544bb3a5c4e6ff7affaa0c0aa0d1bca45bd700226329d5059d3eb54f9dff"1604+dependencies = [1605+ "backon",1606+ "blake3",1607+ "bytes",1608+ "cfg_aliases",1609+ "ctutils",1610+ "data-encoding",1611+ "derive_more",1612+ "ed25519-dalek",1613+ "futures-util",1614+ "getrandom 0.4.3",1615+ "hickory-resolver",1616+ "http",1617+ "ipnet",1618+ "iroh-base",1619+ "iroh-dns",1620+ "iroh-metrics",1621+ "iroh-relay",1622+ "n0-error",1623+ "n0-future",1624+ "n0-watcher",1625+ "netwatch",1626+ "noq",1627+ "noq-proto",1628+ "noq-udp",1629+ "papaya",1630+ "pin-project",1631+ "portable-atomic",1632+ "portmapper",1633+ "rand",1634+ "reqwest",1635+ "rustc-hash",1636+ "rustls",1637+ "rustls-pki-types",1638+ "serde",1639+ "smallvec",1640+ "strum",1641+ "time",1642+ "tokio",1643+ "tokio-stream",1644+ "tokio-util",1645+ "tracing",1646+ "url",1647+ "wasm-bindgen-futures",1648+]1649+1650+[[package]]1651+name = "iroh-base"1652+version = "1.0.0"1653+source = "registry+https://github.com/rust-lang/crates.io-index"1654+checksum = "c9c95e4459d9bb828a77084277abd308aa2b58a096652b079bddfd6ef2361f53"1655+dependencies = [1656+ "curve25519-dalek",1657+ "data-encoding",1658+ "data-encoding-macro",1659+ "derive_more",1660+ "ed25519-dalek",1661+ "getrandom 0.4.3",1662+ "n0-error",1663+ "rand",1664+ "serde",1665+ "url",1666+ "zeroize",1667+]1668+1669+[[package]]1670+name = "iroh-dns"1671+version = "1.0.0"1672+source = "registry+https://github.com/rust-lang/crates.io-index"1673+checksum = "754f7e0c1f67938e1d671007264ffef158f14a9f795a7cc219ea68ea09a9d4c9"1674+dependencies = [1675+ "arc-swap",1676+ "cfg_aliases",1677+ "derive_more",1678+ "hickory-resolver",1679+ "iroh-base",1680+ "n0-error",1681+ "n0-future",1682+ "ndk-context",1683+ "portable-atomic",1684+ "rand",1685+ "rustls",1686+ "simple-dns",1687+ "strum",1688+ "tokio",1689+ "tracing",1690+ "url",1691+]1692+1693+[[package]]1694+name = "iroh-metrics"1695+version = "1.0.1"1696+source = "registry+https://github.com/rust-lang/crates.io-index"1697+checksum = "291065721ad7c477b972e581bbc528df031dc8eb5e39fe1ff3300ae5dfb157ef"1698+dependencies = [1699+ "iroh-metrics-derive",1700+ "itoa",1701+ "n0-error",1702+ "portable-atomic",1703+ "ryu",1704+ "serde",1705+ "tracing",1706+]1707+1708+[[package]]1709+name = "iroh-metrics-derive"1710+version = "1.0.1"1711+source = "registry+https://github.com/rust-lang/crates.io-index"1712+checksum = "1ae5f0c4405d1fbc9fb16ff422ca40620e93dc36c30ecaba0c2aee3992b7bd48"1713+dependencies = [1714+ "heck",1715+ "proc-macro2",1716+ "quote",1717+ "syn",1718+]1719+1720+[[package]]1721+name = "iroh-relay"1722+version = "1.0.0"1723+source = "registry+https://github.com/rust-lang/crates.io-index"1724+checksum = "1c12e48fef252fd04f8e6b6a8802b377baf72548d62ae4838816624cd0e06b79"1725+dependencies = [1726+ "blake3",1727+ "bytes",1728+ "cfg_aliases",1729+ "data-encoding",1730+ "derive_more",1731+ "getrandom 0.4.3",1732+ "hickory-resolver",1733+ "http",1734+ "http-body-util",1735+ "hyper",1736+ "hyper-util",1737+ "iroh-base",1738+ "iroh-dns",1739+ "iroh-metrics",1740+ "lru",1741+ "n0-error",1742+ "n0-future",1743+ "noq",1744+ "noq-proto",1745+ "num_enum",1746+ "pin-project",1747+ "postcard",1748+ "rand",1749+ "reqwest",1750+ "rustls",1751+ "rustls-pki-types",1752+ "serde",1753+ "serde_bytes",1754+ "strum",1755+ "tokio",1756+ "tokio-rustls",1757+ "tokio-util",1758+ "tokio-websockets",1759+ "tracing",1760+ "url",1761+ "vergen-gitcl",1762+ "webpki-roots",1763+ "ws_stream_wasm",1764+]1765+1766+[[package]]1767+name = "itoa"1768+version = "1.0.18"1769+source = "registry+https://github.com/rust-lang/crates.io-index"1770+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"1771+1772+[[package]]1773+name = "jni"1774+version = "0.21.1"1775+source = "registry+https://github.com/rust-lang/crates.io-index"1776+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"1777+dependencies = [1778+ "cesu8",1779+ "cfg-if",1780+ "combine",1781+ "jni-sys 0.3.1",1782+ "log",1783+ "thiserror 1.0.69",1784+ "walkdir",1785+ "windows-sys 0.45.0",1786+]1787+1788+[[package]]1789+name = "jni"1790+version = "0.22.4"1791+source = "registry+https://github.com/rust-lang/crates.io-index"1792+checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498"1793+dependencies = [1794+ "cfg-if",1795+ "combine",1796+ "jni-macros",1797+ "jni-sys 0.4.1",1798+ "log",1799+ "simd_cesu8",1800+ "thiserror 2.0.18",1801+ "walkdir",1802+ "windows-link",1803+]1804+1805+[[package]]1806+name = "jni-macros"1807+version = "0.22.4"1808+source = "registry+https://github.com/rust-lang/crates.io-index"1809+checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3"1810+dependencies = [1811+ "proc-macro2",1812+ "quote",1813+ "rustc_version",1814+ "simd_cesu8",1815+ "syn",1816+]1817+1818+[[package]]1819+name = "jni-sys"1820+version = "0.3.1"1821+source = "registry+https://github.com/rust-lang/crates.io-index"1822+checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"1823+dependencies = [1824+ "jni-sys 0.4.1",1825+]1826+1827+[[package]]1828+name = "jni-sys"1829+version = "0.4.1"1830+source = "registry+https://github.com/rust-lang/crates.io-index"1831+checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"1832+dependencies = [1833+ "jni-sys-macros",1834+]1835+1836+[[package]]1837+name = "jni-sys-macros"1838+version = "0.4.1"1839+source = "registry+https://github.com/rust-lang/crates.io-index"1840+checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"1841+dependencies = [1842+ "quote",1843+ "syn",1844+]1845+1846+[[package]]1847+name = "js-sys"1848+version = "0.3.102"1849+source = "registry+https://github.com/rust-lang/crates.io-index"1850+checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31"1851+dependencies = [1852+ "cfg-if",1853+ "futures-util",1854+ "wasm-bindgen",1855+]1856+1857+[[package]]1858+name = "keyhome-titan-derivation-spike"1859+version = "0.1.0"1860+dependencies = [1861+ "anyhow",1862+ "ctap-hid-fido2",1863+ "iroh",1864+ "serde",1865+ "serde_json",1866+ "sha2 0.10.9",1867+ "tokio",1868+]1869+1870+[[package]]1871+name = "lazy_static"1872+version = "1.5.0"1873+source = "registry+https://github.com/rust-lang/crates.io-index"1874+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"1875+1876+[[package]]1877+name = "libc"1878+version = "0.2.186"1879+source = "registry+https://github.com/rust-lang/crates.io-index"1880+checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"1881+1882+[[package]]1883+name = "litemap"1884+version = "0.8.2"1885+source = "registry+https://github.com/rust-lang/crates.io-index"1886+checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"1887+1888+[[package]]1889+name = "lock_api"1890+version = "0.4.14"1891+source = "registry+https://github.com/rust-lang/crates.io-index"1892+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"1893+dependencies = [1894+ "scopeguard",1895+]1896+1897+[[package]]1898+name = "log"1899+version = "0.4.33"1900+source = "registry+https://github.com/rust-lang/crates.io-index"1901+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"1902+1903+[[package]]1904+name = "loom"1905+version = "0.7.2"1906+source = "registry+https://github.com/rust-lang/crates.io-index"1907+checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca"1908+dependencies = [1909+ "cfg-if",1910+ "generator",1911+ "scoped-tls",1912+ "tracing",1913+ "tracing-subscriber",1914+]1915+1916+[[package]]1917+name = "lru"1918+version = "0.18.0"1919+source = "registry+https://github.com/rust-lang/crates.io-index"1920+checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9"1921+dependencies = [1922+ "hashbrown",1923+]1924+1925+[[package]]1926+name = "lru-slab"1927+version = "0.1.2"1928+source = "registry+https://github.com/rust-lang/crates.io-index"1929+checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"1930+1931+[[package]]1932+name = "mac-addr"1933+version = "0.3.0"1934+source = "registry+https://github.com/rust-lang/crates.io-index"1935+checksum = "d3d25b0e0b648a86960ac23b7ad4abb9717601dec6f66c165f5b037f3f03065f"1936+1937+[[package]]1938+name = "matchers"1939+version = "0.2.0"1940+source = "registry+https://github.com/rust-lang/crates.io-index"1941+checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"1942+dependencies = [1943+ "regex-automata",1944+]1945+1946+[[package]]1947+name = "memchr"1948+version = "2.8.2"1949+source = "registry+https://github.com/rust-lang/crates.io-index"1950+checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"1951+1952+[[package]]1953+name = "minimal-lexical"1954+version = "0.2.1"1955+source = "registry+https://github.com/rust-lang/crates.io-index"1956+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"1957+1958+[[package]]1959+name = "mio"1960+version = "1.2.1"1961+source = "registry+https://github.com/rust-lang/crates.io-index"1962+checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda"1963+dependencies = [1964+ "libc",1965+ "wasi",1966+ "windows-sys 0.61.2",1967+]1968+1969+[[package]]1970+name = "moka"1971+version = "0.12.15"1972+source = "registry+https://github.com/rust-lang/crates.io-index"1973+checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046"1974+dependencies = [1975+ "crossbeam-channel",1976+ "crossbeam-epoch",1977+ "crossbeam-utils",1978+ "equivalent",1979+ "parking_lot",1980+ "portable-atomic",1981+ "smallvec",1982+ "tagptr",1983+ "uuid",1984+]1985+1986+[[package]]1987+name = "n0-error"1988+version = "1.0.0"1989+source = "registry+https://github.com/rust-lang/crates.io-index"1990+checksum = "c37e81176a83a77d2514528b91bdafc70ef88aab428f0e1b91aebb8d99888895"1991+dependencies = [1992+ "n0-error-macros",1993+ "spez",1994+]1995+1996+[[package]]1997+name = "n0-error-macros"1998+version = "1.0.0"1999+source = "registry+https://github.com/rust-lang/crates.io-index"2000+checksum = "e2acd8b070213b0299282f884b4beba4e7b52d624fdcd504a3ad3665390c11e1"2001+dependencies = [2002+ "proc-macro2",2003+ "quote",2004+ "syn",2005+]2006+2007+[[package]]2008+name = "n0-future"2009+version = "0.3.2"2010+source = "registry+https://github.com/rust-lang/crates.io-index"2011+checksum = "e2ab99dfb861450e68853d34ae665243a88b8c493d01ba957321a1e9b2312bbe"2012+dependencies = [2013+ "cfg_aliases",2014+ "derive_more",2015+ "futures-buffered",2016+ "futures-lite",2017+ "futures-util",2018+ "js-sys",2019+ "pin-project",2020+ "send_wrapper",2021+ "tokio",2022+ "tokio-util",2023+ "wasm-bindgen",2024+ "wasm-bindgen-futures",2025+ "web-time",2026+]2027+2028+[[package]]2029+name = "n0-watcher"2030+version = "1.0.0"2031+source = "registry+https://github.com/rust-lang/crates.io-index"2032+checksum = "bbc618745ad0b7414b149d0517ad8b5573b2fb4d4e2717add3d2446ce1fdd826"2033+dependencies = [2034+ "derive_more",2035+ "n0-error",2036+ "n0-future",2037+]2038+2039+[[package]]2040+name = "ndk-context"2041+version = "0.1.1"2042+source = "registry+https://github.com/rust-lang/crates.io-index"2043+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"2044+2045+[[package]]2046+name = "netdev"2047+version = "0.44.0"2048+source = "registry+https://github.com/rust-lang/crates.io-index"2049+checksum = "9d31e7286c21ceaf0ddb1d881964011214555ea0b317cc2eb1a1d68d861386fc"2050+dependencies = [2051+ "block2",2052+ "dispatch2",2053+ "dlopen2",2054+ "ipnet",2055+ "jni 0.21.1",2056+ "libc",2057+ "mac-addr",2058+ "ndk-context",2059+ "netlink-packet-core",2060+ "netlink-packet-route 0.29.0",2061+ "netlink-sys",2062+ "objc2",2063+ "objc2-core-foundation",2064+ "objc2-core-wlan",2065+ "objc2-foundation",2066+ "objc2-system-configuration",2067+ "once_cell",2068+ "plist",2069+ "windows-sys 0.61.2",2070+]2071+2072+[[package]]2073+name = "netlink-packet-core"2074+version = "0.8.1"2075+source = "registry+https://github.com/rust-lang/crates.io-index"2076+checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4"2077+dependencies = [2078+ "paste",2079+]2080+2081+[[package]]2082+name = "netlink-packet-route"2083+version = "0.29.0"2084+source = "registry+https://github.com/rust-lang/crates.io-index"2085+checksum = "df9854ea6ad14e3f4698a7f03b65bce0833dd2d81d594a0e4a984170537146b6"2086+dependencies = [2087+ "bitflags",2088+ "libc",2089+ "log",2090+ "netlink-packet-core",2091+]2092+2093+[[package]]2094+name = "netlink-packet-route"2095+version = "0.31.0"2096+source = "registry+https://github.com/rust-lang/crates.io-index"2097+checksum = "e2288fcb784eb3defd5fb16f4c4160d5f477de192eac730f43e1d11c24d9a007"2098+dependencies = [2099+ "bitflags",2100+ "libc",2101+ "log",2102+ "netlink-packet-core",2103+]2104+2105+[[package]]2106+name = "netlink-proto"2107+version = "0.12.0"2108+source = "registry+https://github.com/rust-lang/crates.io-index"2109+checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128"2110+dependencies = [2111+ "bytes",2112+ "futures",2113+ "log",2114+ "netlink-packet-core",2115+ "netlink-sys",2116+ "thiserror 2.0.18",2117+]2118+2119+[[package]]2120+name = "netlink-sys"2121+version = "0.8.8"2122+source = "registry+https://github.com/rust-lang/crates.io-index"2123+checksum = "cd6c30ed10fa69cc491d491b85cc971f6bdeb8e7367b7cde2ee6cc878d583fae"2124+dependencies = [2125+ "bytes",2126+ "futures-util",2127+ "libc",2128+ "log",2129+ "tokio",2130+]2131+2132+[[package]]2133+name = "netwatch"2134+version = "0.19.0"2135+source = "registry+https://github.com/rust-lang/crates.io-index"2136+checksum = "8487d26d691cd98d5c17b2adb4b1fd4b31cccc820da1eac827d483295d7bb94a"2137+dependencies = [2138+ "atomic-waker",2139+ "bytes",2140+ "cfg_aliases",2141+ "derive_more",2142+ "ipnet",2143+ "js-sys",2144+ "libc",2145+ "n0-error",2146+ "n0-future",2147+ "n0-watcher",2148+ "netdev",2149+ "netlink-packet-core",2150+ "netlink-packet-route 0.31.0",2151+ "netlink-proto",2152+ "netlink-sys",2153+ "noq-udp",2154+ "objc2-core-foundation",2155+ "objc2-system-configuration",2156+ "pin-project-lite",2157+ "serde",2158+ "socket2",2159+ "time",2160+ "tokio",2161+ "tokio-util",2162+ "tracing",2163+ "web-sys",2164+ "windows",2165+ "windows-result",2166+ "wmi",2167+]2168+2169+[[package]]2170+name = "nom"2171+version = "7.1.3"2172+source = "registry+https://github.com/rust-lang/crates.io-index"2173+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"2174+dependencies = [2175+ "memchr",2176+ "minimal-lexical",2177+]2178+2179+[[package]]2180+name = "noq"2181+version = "1.0.0"2182+source = "registry+https://github.com/rust-lang/crates.io-index"2183+checksum = "11f0c73794bfde94db01379c46990b9a773993fca2b61a66184ce148b7c7a187"2184+dependencies = [2185+ "bytes",2186+ "cfg_aliases",2187+ "derive_more",2188+ "noq-proto",2189+ "noq-udp",2190+ "pin-project-lite",2191+ "rustc-hash",2192+ "rustls",2193+ "socket2",2194+ "thiserror 2.0.18",2195+ "tokio",2196+ "tokio-stream",2197+ "tracing",2198+ "web-time",2199+]2200+2201+[[package]]2202+name = "noq-proto"2203+version = "1.0.0"2204+source = "registry+https://github.com/rust-lang/crates.io-index"2205+checksum = "775be06b8d66c2c64db60140bf54dee8410f67b73c81cc1e1e32f11dfdaae501"2206+dependencies = [2207+ "aes-gcm",2208+ "bytes",2209+ "derive_more",2210+ "enum-assoc",2211+ "getrandom 0.4.3",2212+ "identity-hash",2213+ "lru-slab",2214+ "rand",2215+ "rand_pcg",2216+ "ring",2217+ "rustc-hash",2218+ "rustls",2219+ "rustls-pki-types",2220+ "slab",2221+ "sorted-index-buffer",2222+ "thiserror 2.0.18",2223+ "tinyvec",2224+ "tracing",2225+ "web-time",2226+]2227+2228+[[package]]2229+name = "noq-udp"2230+version = "1.0.0"2231+source = "registry+https://github.com/rust-lang/crates.io-index"2232+checksum = "cd5a37756f168cf350d68a97c4f0158bdf3c76f10175123941569b09ab51f011"2233+dependencies = [2234+ "cfg_aliases",2235+ "libc",2236+ "socket2",2237+ "tracing",2238+ "windows-sys 0.61.2",2239+]2240+2241+[[package]]2242+name = "nu-ansi-term"2243+version = "0.50.3"2244+source = "registry+https://github.com/rust-lang/crates.io-index"2245+checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"2246+dependencies = [2247+ "windows-sys 0.61.2",2248+]2249+2250+[[package]]2251+name = "num"2252+version = "0.4.3"2253+source = "registry+https://github.com/rust-lang/crates.io-index"2254+checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"2255+dependencies = [2256+ "num-bigint",2257+ "num-complex",2258+ "num-integer",2259+ "num-iter",2260+ "num-rational",2261+ "num-traits",2262+]2263+2264+[[package]]2265+name = "num-bigint"2266+version = "0.4.6"2267+source = "registry+https://github.com/rust-lang/crates.io-index"2268+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"2269+dependencies = [2270+ "num-integer",2271+ "num-traits",2272+]2273+2274+[[package]]2275+name = "num-complex"2276+version = "0.4.6"2277+source = "registry+https://github.com/rust-lang/crates.io-index"2278+checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"2279+dependencies = [2280+ "num-traits",2281+]2282+2283+[[package]]2284+name = "num-conv"2285+version = "0.2.2"2286+source = "registry+https://github.com/rust-lang/crates.io-index"2287+checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"2288+2289+[[package]]2290+name = "num-integer"2291+version = "0.1.46"2292+source = "registry+https://github.com/rust-lang/crates.io-index"2293+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"2294+dependencies = [2295+ "num-traits",2296+]2297+2298+[[package]]2299+name = "num-iter"2300+version = "0.1.45"2301+source = "registry+https://github.com/rust-lang/crates.io-index"2302+checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"2303+dependencies = [2304+ "autocfg",2305+ "num-integer",2306+ "num-traits",2307+]2308+2309+[[package]]2310+name = "num-rational"2311+version = "0.4.2"2312+source = "registry+https://github.com/rust-lang/crates.io-index"2313+checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"2314+dependencies = [2315+ "num-bigint",2316+ "num-integer",2317+ "num-traits",2318+]2319+2320+[[package]]2321+name = "num-traits"2322+version = "0.2.19"2323+source = "registry+https://github.com/rust-lang/crates.io-index"2324+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"2325+dependencies = [2326+ "autocfg",2327+]2328+2329+[[package]]2330+name = "num_enum"2331+version = "0.7.6"2332+source = "registry+https://github.com/rust-lang/crates.io-index"2333+checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26"2334+dependencies = [2335+ "num_enum_derive",2336+ "rustversion",2337+]2338+2339+[[package]]2340+name = "num_enum_derive"2341+version = "0.7.6"2342+source = "registry+https://github.com/rust-lang/crates.io-index"2343+checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8"2344+dependencies = [2345+ "proc-macro-crate",2346+ "proc-macro2",2347+ "quote",2348+ "syn",2349+]2350+2351+[[package]]2352+name = "num_threads"2353+version = "0.1.7"2354+source = "registry+https://github.com/rust-lang/crates.io-index"2355+checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"2356+dependencies = [2357+ "libc",2358+]2359+2360+[[package]]2361+name = "objc2"2362+version = "0.6.4"2363+source = "registry+https://github.com/rust-lang/crates.io-index"2364+checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f"2365+dependencies = [2366+ "objc2-encode",2367+]2368+2369+[[package]]2370+name = "objc2-core-foundation"2371+version = "0.3.2"2372+source = "registry+https://github.com/rust-lang/crates.io-index"2373+checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"2374+dependencies = [2375+ "bitflags",2376+ "block2",2377+ "dispatch2",2378+ "libc",2379+ "objc2",2380+]2381+2382+[[package]]2383+name = "objc2-core-wlan"2384+version = "0.3.2"2385+source = "registry+https://github.com/rust-lang/crates.io-index"2386+checksum = "c71e34919aba0d701380d911702455038a8a3587467fe0141d6a71501e7ffe48"2387+dependencies = [2388+ "bitflags",2389+ "objc2",2390+ "objc2-core-foundation",2391+ "objc2-foundation",2392+ "objc2-security",2393+ "objc2-security-foundation",2394+]2395+2396+[[package]]2397+name = "objc2-encode"2398+version = "4.1.0"2399+source = "registry+https://github.com/rust-lang/crates.io-index"2400+checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"2401+2402+[[package]]2403+name = "objc2-foundation"2404+version = "0.3.2"2405+source = "registry+https://github.com/rust-lang/crates.io-index"2406+checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"2407+dependencies = [2408+ "bitflags",2409+ "block2",2410+ "libc",2411+ "objc2",2412+ "objc2-core-foundation",2413+]2414+2415+[[package]]2416+name = "objc2-security"2417+version = "0.3.2"2418+source = "registry+https://github.com/rust-lang/crates.io-index"2419+checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a"2420+dependencies = [2421+ "bitflags",2422+ "objc2",2423+ "objc2-core-foundation",2424+]2425+2426+[[package]]2427+name = "objc2-security-foundation"2428+version = "0.3.2"2429+source = "registry+https://github.com/rust-lang/crates.io-index"2430+checksum = "ef76382e9cedd18123099f17638715cc3d81dba3637d4c0d39ab69df2ef345a5"2431+dependencies = [2432+ "objc2",2433+ "objc2-foundation",2434+]2435+2436+[[package]]2437+name = "objc2-system-configuration"2438+version = "0.3.2"2439+source = "registry+https://github.com/rust-lang/crates.io-index"2440+checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396"2441+dependencies = [2442+ "bitflags",2443+ "dispatch2",2444+ "libc",2445+ "objc2",2446+ "objc2-core-foundation",2447+ "objc2-security",2448+]2449+2450+[[package]]2451+name = "oid-registry"2452+version = "0.8.1"2453+source = "registry+https://github.com/rust-lang/crates.io-index"2454+checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7"2455+dependencies = [2456+ "asn1-rs",2457+]2458+2459+[[package]]2460+name = "once_cell"2461+version = "1.21.4"2462+source = "registry+https://github.com/rust-lang/crates.io-index"2463+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"2464+dependencies = [2465+ "critical-section",2466+ "portable-atomic",2467+]2468+2469+[[package]]2470+name = "opaque-debug"2471+version = "0.3.1"2472+source = "registry+https://github.com/rust-lang/crates.io-index"2473+checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"2474+2475+[[package]]2476+name = "openssl-probe"2477+version = "0.2.1"2478+source = "registry+https://github.com/rust-lang/crates.io-index"2479+checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"2480+2481+[[package]]2482+name = "pad"2483+version = "0.1.6"2484+source = "registry+https://github.com/rust-lang/crates.io-index"2485+checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3"2486+dependencies = [2487+ "unicode-width",2488+]2489+2490+[[package]]2491+name = "papaya"2492+version = "0.2.4"2493+source = "registry+https://github.com/rust-lang/crates.io-index"2494+checksum = "997ee03cd38c01469a7046643714f0ad28880bcb9e6679ff0666e24817ca19b7"2495+dependencies = [2496+ "equivalent",2497+ "seize",2498+]2499+2500+[[package]]2501+name = "parking"2502+version = "2.2.1"2503+source = "registry+https://github.com/rust-lang/crates.io-index"2504+checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"2505+2506+[[package]]2507+name = "parking_lot"2508+version = "0.12.5"2509+source = "registry+https://github.com/rust-lang/crates.io-index"2510+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"2511+dependencies = [2512+ "lock_api",2513+ "parking_lot_core",2514+]2515+2516+[[package]]2517+name = "parking_lot_core"2518+version = "0.9.12"2519+source = "registry+https://github.com/rust-lang/crates.io-index"2520+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"2521+dependencies = [2522+ "cfg-if",2523+ "libc",2524+ "redox_syscall",2525+ "smallvec",2526+ "windows-link",2527+]2528+2529+[[package]]2530+name = "paste"2531+version = "1.0.15"2532+source = "registry+https://github.com/rust-lang/crates.io-index"2533+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"2534+2535+[[package]]2536+name = "pem-rfc7468"2537+version = "1.0.0"2538+source = "registry+https://github.com/rust-lang/crates.io-index"2539+checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9"2540+dependencies = [2541+ "base64ct",2542+]2543+2544+[[package]]2545+name = "percent-encoding"2546+version = "2.3.2"2547+source = "registry+https://github.com/rust-lang/crates.io-index"2548+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"2549+2550+[[package]]2551+name = "pharos"2552+version = "0.5.3"2553+source = "registry+https://github.com/rust-lang/crates.io-index"2554+checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414"2555+dependencies = [2556+ "futures",2557+ "rustc_version",2558+]2559+2560+[[package]]2561+name = "pin-project"2562+version = "1.1.13"2563+source = "registry+https://github.com/rust-lang/crates.io-index"2564+checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"2565+dependencies = [2566+ "pin-project-internal",2567+]2568+2569+[[package]]2570+name = "pin-project-internal"2571+version = "1.1.13"2572+source = "registry+https://github.com/rust-lang/crates.io-index"2573+checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"2574+dependencies = [2575+ "proc-macro2",2576+ "quote",2577+ "syn",2578+]2579+2580+[[package]]2581+name = "pin-project-lite"2582+version = "0.2.17"2583+source = "registry+https://github.com/rust-lang/crates.io-index"2584+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"2585+2586+[[package]]2587+name = "pkcs8"2588+version = "0.11.0"2589+source = "registry+https://github.com/rust-lang/crates.io-index"2590+checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7"2591+dependencies = [2592+ "der",2593+ "spki",2594+]2595+2596+[[package]]2597+name = "pkg-config"2598+version = "0.3.33"2599+source = "registry+https://github.com/rust-lang/crates.io-index"2600+checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"2601+2602+[[package]]2603+name = "plist"2604+version = "1.9.0"2605+source = "registry+https://github.com/rust-lang/crates.io-index"2606+checksum = "092791278e026273c1b65bbdcfbba3a300f2994c896bd01ab01da613c29c46f1"2607+dependencies = [2608+ "base64",2609+ "indexmap",2610+ "quick-xml",2611+ "serde",2612+ "time",2613+]2614+2615+[[package]]2616+name = "polyval"2617+version = "0.6.2"2618+source = "registry+https://github.com/rust-lang/crates.io-index"2619+checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25"2620+dependencies = [2621+ "cfg-if",2622+ "cpufeatures 0.2.17",2623+ "opaque-debug",2624+ "universal-hash",2625+]2626+2627+[[package]]2628+name = "portable-atomic"2629+version = "1.13.1"2630+source = "registry+https://github.com/rust-lang/crates.io-index"2631+checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"2632+dependencies = [2633+ "serde",2634+]2635+2636+[[package]]2637+name = "portmapper"2638+version = "0.19.0"2639+source = "registry+https://github.com/rust-lang/crates.io-index"2640+checksum = "ccc716c56a0a50f7e4e25f41446419599d47c6197cc5c9858174220e97c272e6"2641+dependencies = [2642+ "base64",2643+ "bytes",2644+ "derive_more",2645+ "hyper-util",2646+ "igd-next",2647+ "iroh-metrics",2648+ "libc",2649+ "n0-error",2650+ "n0-future",2651+ "netwatch",2652+ "num_enum",2653+ "rand",2654+ "serde",2655+ "smallvec",2656+ "socket2",2657+ "time",2658+ "tokio",2659+ "tokio-util",2660+ "tower-layer",2661+ "tracing",2662+ "url",2663+]2664+2665+[[package]]2666+name = "postcard"2667+version = "1.1.3"2668+source = "registry+https://github.com/rust-lang/crates.io-index"2669+checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24"2670+dependencies = [2671+ "cobs",2672+ "embedded-io 0.4.0",2673+ "embedded-io 0.6.1",2674+ "postcard-derive",2675+ "serde",2676+]2677+2678+[[package]]2679+name = "postcard-derive"2680+version = "0.2.2"2681+source = "registry+https://github.com/rust-lang/crates.io-index"2682+checksum = "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb"2683+dependencies = [2684+ "proc-macro2",2685+ "quote",2686+ "syn",2687+]2688+2689+[[package]]2690+name = "potential_utf"2691+version = "0.1.5"2692+source = "registry+https://github.com/rust-lang/crates.io-index"2693+checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"2694+dependencies = [2695+ "zerovec",2696+]2697+2698+[[package]]2699+name = "powerfmt"2700+version = "0.2.0"2701+source = "registry+https://github.com/rust-lang/crates.io-index"2702+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"2703+2704+[[package]]2705+name = "prefix-trie"2706+version = "0.8.4"2707+source = "registry+https://github.com/rust-lang/crates.io-index"2708+checksum = "4cf6e3177f0684016a5c209b00882e15f8bdd3f3bb48f0491df10cd102d0c6e7"2709+dependencies = [2710+ "either",2711+ "ipnet",2712+ "num-traits",2713+]2714+2715+[[package]]2716+name = "proc-macro-crate"2717+version = "3.5.0"2718+source = "registry+https://github.com/rust-lang/crates.io-index"2719+checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f"2720+dependencies = [2721+ "toml_edit",2722+]2723+2724+[[package]]2725+name = "proc-macro2"2726+version = "1.0.106"2727+source = "registry+https://github.com/rust-lang/crates.io-index"2728+checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"2729+dependencies = [2730+ "unicode-ident",2731+]2732+2733+[[package]]2734+name = "quick-xml"2735+version = "0.39.4"2736+source = "registry+https://github.com/rust-lang/crates.io-index"2737+checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e"2738+dependencies = [2739+ "memchr",2740+]2741+2742+[[package]]2743+name = "quote"2744+version = "1.0.46"2745+source = "registry+https://github.com/rust-lang/crates.io-index"2746+checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"2747+dependencies = [2748+ "proc-macro2",2749+]2750+2751+[[package]]2752+name = "r-efi"2753+version = "6.0.0"2754+source = "registry+https://github.com/rust-lang/crates.io-index"2755+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"2756+2757+[[package]]2758+name = "rand"2759+version = "0.10.1"2760+source = "registry+https://github.com/rust-lang/crates.io-index"2761+checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207"2762+dependencies = [2763+ "chacha20",2764+ "getrandom 0.4.3",2765+ "rand_core",2766+]2767+2768+[[package]]2769+name = "rand_core"2770+version = "0.10.1"2771+source = "registry+https://github.com/rust-lang/crates.io-index"2772+checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"2773+2774+[[package]]2775+name = "rand_pcg"2776+version = "0.10.2"2777+source = "registry+https://github.com/rust-lang/crates.io-index"2778+checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"2779+dependencies = [2780+ "rand_core",2781+]2782+2783+[[package]]2784+name = "redox_syscall"2785+version = "0.5.18"2786+source = "registry+https://github.com/rust-lang/crates.io-index"2787+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"2788+dependencies = [2789+ "bitflags",2790+]2791+2792+[[package]]2793+name = "regex-automata"2794+version = "0.4.14"2795+source = "registry+https://github.com/rust-lang/crates.io-index"2796+checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"2797+dependencies = [2798+ "aho-corasick",2799+ "memchr",2800+ "regex-syntax",2801+]2802+2803+[[package]]2804+name = "regex-syntax"2805+version = "0.8.11"2806+source = "registry+https://github.com/rust-lang/crates.io-index"2807+checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"2808+2809+[[package]]2810+name = "reqwest"2811+version = "0.13.4"2812+source = "registry+https://github.com/rust-lang/crates.io-index"2813+checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3"2814+dependencies = [2815+ "base64",2816+ "bytes",2817+ "futures-core",2818+ "futures-util",2819+ "http",2820+ "http-body",2821+ "http-body-util",2822+ "hyper",2823+ "hyper-rustls",2824+ "hyper-util",2825+ "js-sys",2826+ "log",2827+ "percent-encoding",2828+ "pin-project-lite",2829+ "rustls",2830+ "rustls-pki-types",2831+ "rustls-platform-verifier",2832+ "sync_wrapper",2833+ "tokio",2834+ "tokio-rustls",2835+ "tokio-util",2836+ "tower",2837+ "tower-http",2838+ "tower-service",2839+ "url",2840+ "wasm-bindgen",2841+ "wasm-bindgen-futures",2842+ "wasm-streams",2843+ "web-sys",2844+]2845+2846+[[package]]2847+name = "resolv-conf"2848+version = "0.7.6"2849+source = "registry+https://github.com/rust-lang/crates.io-index"2850+checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7"2851+2852+[[package]]2853+name = "ring"2854+version = "0.17.14"2855+source = "registry+https://github.com/rust-lang/crates.io-index"2856+checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"2857+dependencies = [2858+ "cc",2859+ "cfg-if",2860+ "getrandom 0.2.17",2861+ "libc",2862+ "untrusted",2863+ "windows-sys 0.52.0",2864+]2865+2866+[[package]]2867+name = "rustc-hash"2868+version = "2.1.2"2869+source = "registry+https://github.com/rust-lang/crates.io-index"2870+checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"2871+2872+[[package]]2873+name = "rustc_version"2874+version = "0.4.1"2875+source = "registry+https://github.com/rust-lang/crates.io-index"2876+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"2877+dependencies = [2878+ "semver",2879+]2880+2881+[[package]]2882+name = "rusticata-macros"2883+version = "4.1.0"2884+source = "registry+https://github.com/rust-lang/crates.io-index"2885+checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632"2886+dependencies = [2887+ "nom",2888+]2889+2890+[[package]]2891+name = "rustls"2892+version = "0.23.41"2893+source = "registry+https://github.com/rust-lang/crates.io-index"2894+checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f"2895+dependencies = [2896+ "log",2897+ "once_cell",2898+ "ring",2899+ "rustls-pki-types",2900+ "rustls-webpki",2901+ "subtle",2902+ "zeroize",2903+]2904+2905+[[package]]2906+name = "rustls-native-certs"2907+version = "0.8.4"2908+source = "registry+https://github.com/rust-lang/crates.io-index"2909+checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d"2910+dependencies = [2911+ "openssl-probe",2912+ "rustls-pki-types",2913+ "schannel",2914+ "security-framework",2915+]2916+2917+[[package]]2918+name = "rustls-pki-types"2919+version = "1.14.1"2920+source = "registry+https://github.com/rust-lang/crates.io-index"2921+checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9"2922+dependencies = [2923+ "web-time",2924+ "zeroize",2925+]2926+2927+[[package]]2928+name = "rustls-platform-verifier"2929+version = "0.7.0"2930+source = "registry+https://github.com/rust-lang/crates.io-index"2931+checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0"2932+dependencies = [2933+ "core-foundation 0.10.1",2934+ "core-foundation-sys",2935+ "jni 0.22.4",2936+ "log",2937+ "once_cell",2938+ "rustls",2939+ "rustls-native-certs",2940+ "rustls-platform-verifier-android",2941+ "rustls-webpki",2942+ "security-framework",2943+ "security-framework-sys",2944+ "webpki-root-certs",2945+ "windows-sys 0.61.2",2946+]2947+2948+[[package]]2949+name = "rustls-platform-verifier-android"2950+version = "0.1.1"2951+source = "registry+https://github.com/rust-lang/crates.io-index"2952+checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"2953+2954+[[package]]2955+name = "rustls-webpki"2956+version = "0.103.13"2957+source = "registry+https://github.com/rust-lang/crates.io-index"2958+checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"2959+dependencies = [2960+ "ring",2961+ "rustls-pki-types",2962+ "untrusted",2963+]2964+2965+[[package]]2966+name = "rustversion"2967+version = "1.0.22"2968+source = "registry+https://github.com/rust-lang/crates.io-index"2969+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"2970+2971+[[package]]2972+name = "ryu"2973+version = "1.0.23"2974+source = "registry+https://github.com/rust-lang/crates.io-index"2975+checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"2976+2977+[[package]]2978+name = "same-file"2979+version = "1.0.6"2980+source = "registry+https://github.com/rust-lang/crates.io-index"2981+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"2982+dependencies = [2983+ "winapi-util",2984+]2985+2986+[[package]]2987+name = "schannel"2988+version = "0.1.29"2989+source = "registry+https://github.com/rust-lang/crates.io-index"2990+checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"2991+dependencies = [2992+ "windows-sys 0.61.2",2993+]2994+2995+[[package]]2996+name = "scoped-tls"2997+version = "1.0.1"2998+source = "registry+https://github.com/rust-lang/crates.io-index"2999+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"3000+
diff truncated
A spikes/007-titan-no-copy/Cargo.toml +14 -0
A spikes/007-titan-no-copy/src/main.rs +244 -0
@@ -0,0 +1,244 @@
1+//! Spike 007: No-copy/paste — derive Iroh identity from Titan key2+//!3+//! Both host and client derive the SAME Iroh SecretKey from the Titan's4+//! hmac-secret extension. The host uses it as its endpoint identity.5+//! The client derives it only to compute the host's node ID, then dials6+//! via the N0 relay — no address JSON exchanged.7+//!8+//! Usage:9+//! cargo run -- host # Tap Titan twice, starts hosting10+//! cargo run -- client # Tap Titan twice, auto-connects to host11+12+use anyhow::{bail, Context, Result};13+use ctap_hid_fido2::fidokey::{14+ GetAssertionArgsBuilder, MakeCredentialArgsBuilder,15+ get_assertion::Extension as Gext,16+ make_credential::Extension as Mext,17+};18+use ctap_hid_fido2::{verifier, Cfg, FidoKeyHidFactory};19+use iroh::{Endpoint, SecretKey, endpoint::presets};20+use iroh::endpoint::Connection;21+use iroh::protocol::{ProtocolHandler, Router};22+use sha2::{Digest, Sha256};23+use std::sync::Arc;24+use std::time::Duration;25+use tokio::io::{AsyncReadExt, AsyncWriteExt};26+27+const ALPN: &[u8] = b"keyhome/titan-probe/0";28+const RPID: &str = "keyhome";29+const SALT_MESSAGE: &str = "keyhome-iroh-identity-v1";30+31+// ─── Titan HMAC-Secret Derivation ────────────────────────────────────────────32+33+fn read_pin() -> Result<String> {34+ if let Ok(p) = std::env::var("TITAN_PIN") {35+ if !p.is_empty() {36+ return Ok(p);37+ }38+ }39+ eprint!("Enter Titan PIN: ");40+ std::io::Write::flush(&mut std::io::stderr())?;41+ let mut pin = String::new();42+ std::io::stdin().read_line(&mut pin)?;43+ let pin = pin.trim().to_string();44+ if pin.is_empty() {45+ bail!("PIN is required");46+ }47+ Ok(pin)48+}49+50+/// Derive a 32-byte secret from the Titan using hmac-secret extension.51+/// Same Titan + same PIN + same salt = same 32 bytes every time.52+fn derive_secret_from_titan() -> Result<[u8; 32]> {53+ let pin = read_pin()?;54+55+ let cfg = Cfg::init();56+ let device = FidoKeyHidFactory::create(&cfg)57+ .context("Failed to open FIDO2 device. Is the Titan plugged in?")?;58+59+ eprintln!("[titan] FIDO2 device opened");60+61+ // Step 1: Create credential with hmac-secret extension62+ eprintln!("[titan] Step 1: make_credential (TAP TITAN when it blinks)");63+64+ let challenge = verifier::create_challenge();65+ let make_args = MakeCredentialArgsBuilder::new(RPID, &challenge)66+ .pin(&pin)67+ .extensions(&[Mext::HmacSecret(Some(true))])68+ .build();69+70+ let attestation = device71+ .make_credential_with_args(&make_args)72+ .context("make_credential failed")?;73+74+ let verify_result = verifier::verify_attestation(RPID, &challenge, &attestation);75+ if !verify_result.is_success {76+ bail!("Attestation verification failed");77+ }78+ let credential_id = verify_result.credential_id;79+ eprintln!("[titan] credential registered, id_len={}", credential_id.len());80+81+ // Step 2: Get assertion with hmac-secret to derive the secret82+ eprintln!("[titan] Step 2: get_assertion (TAP TITAN when it blinks)");83+84+ let salt: [u8; 32] = {85+ let mut hasher = Sha256::new();86+ hasher.update(SALT_MESSAGE.as_bytes());87+ let result = hasher.finalize();88+ let mut s = [0u8; 32];89+ s.copy_from_slice(&result);90+ s91+ };92+93+ let challenge2 = verifier::create_challenge();94+ let get_args = GetAssertionArgsBuilder::new(RPID, &challenge2)95+ .pin(&pin)96+ .credential_id(&credential_id)97+ .extensions(&[Gext::HmacSecret(Some(salt))])98+ .build();99+100+ let assertions = device101+ .get_assertion_with_args(&get_args)102+ .context("get_assertion failed")?;103+104+ // Extract hmac-secret output (32 bytes)105+ for ext in &assertions[0].extensions {106+ if let Gext::HmacSecret(Some(output)) = ext {107+ let mut secret = [0u8; 32];108+ secret.copy_from_slice(output);109+ eprintln!("[titan] derived 32-byte secret from hmac-secret");110+ return Ok(secret);111+ }112+ }113+114+ bail!("No hmac-secret in assertion response");115+}116+117+/// Derive an Iroh SecretKey from the Titan.118+fn derive_iroh_secret_from_titan() -> Result<SecretKey> {119+ let secret_bytes = derive_secret_from_titan()?;120+ let secret_key = SecretKey::from_bytes(&secret_bytes);121+ eprintln!("[titan] derived Iroh node ID: {}", secret_key.public());122+ Ok(secret_key)123+}124+125+// ─── Host ────────────────────────────────────────────────────────────────────126+127+async fn host() -> Result<()> {128+ eprintln!("[host] Deriving identity from Titan...");129+ let secret = derive_iroh_secret_from_titan()?;130+131+ let endpoint = Endpoint::builder(presets::N0)132+ .secret_key(secret)133+ .bind()134+ .await135+ .context("Failed to bind endpoint")?;136+137+ let _ = tokio::time::timeout(Duration::from_secs(5), endpoint.online()).await;138+139+ let node_id = endpoint.id();140+ println!("[host] node_id={}", node_id);141+ eprintln!("[host] waiting for connections on ALPN {:?}...", ALPN);142+143+ let handler = Arc::new(TitanProbeHandler);144+ let _router = Router::builder(endpoint.clone())145+ .accept(ALPN, handler)146+ .spawn();147+148+ tokio::signal::ctrl_c().await?;149+ endpoint.close().await;150+ Ok(())151+}152+153+#[derive(Debug)]154+struct TitanProbeHandler;155+156+impl ProtocolHandler for TitanProbeHandler {157+ async fn accept(&self, conn: Connection) -> Result<(), iroh::protocol::AcceptError> {158+ eprintln!("[host] client connected: {}", conn.remote_id());159+160+ let (mut send, mut recv) = conn.accept_bi().await?;161+162+ let mut buf = [0u8; 256];163+ match recv.read(&mut buf).await {164+ Ok(Some(n)) => {165+ eprintln!("[host] received: {}", String::from_utf8_lossy(&buf[..n]));166+ }167+ _ => {}168+ }169+170+ let response = "Hello from titan-derived host!";171+ send.write_all(response.as_bytes()).await.ok();172+173+ Ok(())174+ }175+}176+177+// ─── Client ──────────────────────────────────────────────────────────────────178+179+async fn client() -> Result<()> {180+ eprintln!("[client] Deriving host identity from Titan...");181+ let host_secret = derive_iroh_secret_from_titan()?;182+183+ // The host's node ID is derived from the same Titan184+ let host_node_id = host_secret.public();185+ println!("[client] derived host node ID: {}", host_node_id);186+187+ // Client uses a RANDOM identity (can't connect to yourself)188+ let client_secret = SecretKey::generate();189+ eprintln!("[client] client node ID: {}", client_secret.public());190+191+ let endpoint = Endpoint::builder(presets::N0)192+ .secret_key(client_secret)193+ .bind()194+ .await195+ .context("Failed to bind endpoint")?;196+197+ let _ = tokio::time::timeout(Duration::from_secs(10), endpoint.online()).await;198+199+ // Construct an EndpointAddr with just the node ID + N0 relay200+ // No address JSON needed — relay routes by node ID201+ let addr = iroh::EndpointAddr::new(host_node_id)202+ .with_relay_url("https://usw1-1.relay.n0.iroh.link./".parse()203+ .context("invalid relay URL")?);204+205+ eprintln!("[client] connecting to host via relay (no address JSON)...");206+ let conn = endpoint.connect(addr, ALPN).await207+ .context("Failed to connect to host")?;208+209+ println!("[client] connected! host node: {}", conn.remote_id());210+211+ let (mut send, mut recv) = conn.open_bi().await?;212+213+ send.write_all(b"Hello from titan-derived client!").await?;214+215+ let mut buf = [0u8; 256];216+ match recv.read(&mut buf).await {217+ Ok(Some(n)) => {218+ println!("[client] host response: {}", String::from_utf8_lossy(&buf[..n]));219+ }220+ _ => {221+ println!("[client] no response received");222+ }223+ }224+225+ println!("\n=== Spike 007: PASS ===");226+ println!("Connected to host using only Titan-derived node ID — no address copy/paste");227+228+ let _ = endpoint.close().await;229+ Ok(())230+}231+232+// ─── Main ────────────────────────────────────────────────────────────────────233+234+#[tokio::main]235+async fn main() -> Result<()> {236+ let args: Vec<String> = std::env::args().skip(1).collect();237+ match args.first().map(|s| s.as_str()) {238+ Some("host") => host().await,239+ Some("client") => client().await,240+ _ => {241+ bail!("usage: cargo run -- host | client\n\nSet TITAN_PIN env var or enter PIN when prompted.")242+ }243+ }244+}