├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md └── src ├── handshake.rs ├── main.rs ├── protocol.rs └── zellij.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "aead" 22 | version = "0.5.2" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" 25 | dependencies = [ 26 | "bytes", 27 | "crypto-common", 28 | "generic-array", 29 | ] 30 | 31 | [[package]] 32 | name = "aho-corasick" 33 | version = "1.1.3" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 36 | dependencies = [ 37 | "memchr", 38 | ] 39 | 40 | [[package]] 41 | name = "allocator-api2" 42 | version = "0.2.21" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 45 | 46 | [[package]] 47 | name = "android-tzdata" 48 | version = "0.1.1" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 51 | 52 | [[package]] 53 | name = "android_system_properties" 54 | version = "0.1.5" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 57 | dependencies = [ 58 | "libc", 59 | ] 60 | 61 | [[package]] 62 | name = "anstream" 63 | version = "0.6.18" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 66 | dependencies = [ 67 | "anstyle", 68 | "anstyle-parse", 69 | "anstyle-query", 70 | "anstyle-wincon", 71 | "colorchoice", 72 | "is_terminal_polyfill", 73 | "utf8parse", 74 | ] 75 | 76 | [[package]] 77 | name = "anstyle" 78 | version = "1.0.10" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 81 | 82 | [[package]] 83 | name = "anstyle-parse" 84 | version = "0.2.6" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 87 | dependencies = [ 88 | "utf8parse", 89 | ] 90 | 91 | [[package]] 92 | name = "anstyle-query" 93 | version = "1.1.2" 94 | source = "registry+https://github.com/rust-lang/crates.io-index" 95 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 96 | dependencies = [ 97 | "windows-sys 0.59.0", 98 | ] 99 | 100 | [[package]] 101 | name = "anstyle-wincon" 102 | version = "3.0.7" 103 | source = "registry+https://github.com/rust-lang/crates.io-index" 104 | checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" 105 | dependencies = [ 106 | "anstyle", 107 | "once_cell", 108 | "windows-sys 0.59.0", 109 | ] 110 | 111 | [[package]] 112 | name = "anyhow" 113 | version = "1.0.95" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" 116 | 117 | [[package]] 118 | name = "asn1-rs" 119 | version = "0.6.2" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" 122 | dependencies = [ 123 | "asn1-rs-derive", 124 | "asn1-rs-impl", 125 | "displaydoc", 126 | "nom", 127 | "num-traits", 128 | "rusticata-macros", 129 | "thiserror 1.0.69", 130 | "time", 131 | ] 132 | 133 | [[package]] 134 | name = "asn1-rs-derive" 135 | version = "0.5.1" 136 | source = "registry+https://github.com/rust-lang/crates.io-index" 137 | checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" 138 | dependencies = [ 139 | "proc-macro2", 140 | "quote", 141 | "syn 2.0.96", 142 | "synstructure", 143 | ] 144 | 145 | [[package]] 146 | name = "asn1-rs-impl" 147 | version = "0.2.0" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" 150 | dependencies = [ 151 | "proc-macro2", 152 | "quote", 153 | "syn 2.0.96", 154 | ] 155 | 156 | [[package]] 157 | name = "async-recursion" 158 | version = "1.1.1" 159 | source = "registry+https://github.com/rust-lang/crates.io-index" 160 | checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" 161 | dependencies = [ 162 | "proc-macro2", 163 | "quote", 164 | "syn 2.0.96", 165 | ] 166 | 167 | [[package]] 168 | name = "async-trait" 169 | version = "0.1.85" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" 172 | dependencies = [ 173 | "proc-macro2", 174 | "quote", 175 | "syn 2.0.96", 176 | ] 177 | 178 | [[package]] 179 | name = "atomic-waker" 180 | version = "1.1.2" 181 | source = "registry+https://github.com/rust-lang/crates.io-index" 182 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 183 | 184 | [[package]] 185 | name = "attohttpc" 186 | version = "0.24.1" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" 189 | dependencies = [ 190 | "http 0.2.12", 191 | "log", 192 | "url", 193 | ] 194 | 195 | [[package]] 196 | name = "autocfg" 197 | version = "1.4.0" 198 | source = "registry+https://github.com/rust-lang/crates.io-index" 199 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 200 | 201 | [[package]] 202 | name = "backoff" 203 | version = "0.4.0" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" 206 | dependencies = [ 207 | "futures-core", 208 | "getrandom", 209 | "instant", 210 | "pin-project-lite", 211 | "rand", 212 | "tokio", 213 | ] 214 | 215 | [[package]] 216 | name = "backtrace" 217 | version = "0.3.74" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 220 | dependencies = [ 221 | "addr2line", 222 | "cfg-if", 223 | "libc", 224 | "miniz_oxide", 225 | "object", 226 | "rustc-demangle", 227 | "windows-targets 0.52.6", 228 | ] 229 | 230 | [[package]] 231 | name = "base16ct" 232 | version = "0.2.0" 233 | source = "registry+https://github.com/rust-lang/crates.io-index" 234 | checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" 235 | 236 | [[package]] 237 | name = "base64" 238 | version = "0.22.1" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 241 | 242 | [[package]] 243 | name = "base64ct" 244 | version = "1.6.0" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" 247 | 248 | [[package]] 249 | name = "bincode" 250 | version = "1.3.3" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 253 | dependencies = [ 254 | "serde", 255 | ] 256 | 257 | [[package]] 258 | name = "bitflags" 259 | version = "1.3.2" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 262 | 263 | [[package]] 264 | name = "bitflags" 265 | version = "2.8.0" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" 268 | 269 | [[package]] 270 | name = "block-buffer" 271 | version = "0.10.4" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 274 | dependencies = [ 275 | "generic-array", 276 | ] 277 | 278 | [[package]] 279 | name = "bounded-integer" 280 | version = "0.5.8" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "102dbef1187b1893e6dfe05a774e79fd52265f49f214f6879c8ff49f52c8188b" 283 | 284 | [[package]] 285 | name = "bumpalo" 286 | version = "3.16.0" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 289 | 290 | [[package]] 291 | name = "byteorder" 292 | version = "1.5.0" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 295 | 296 | [[package]] 297 | name = "bytes" 298 | version = "1.9.0" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" 301 | 302 | [[package]] 303 | name = "cc" 304 | version = "1.2.10" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" 307 | dependencies = [ 308 | "shlex", 309 | ] 310 | 311 | [[package]] 312 | name = "cesu8" 313 | version = "1.1.0" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 316 | 317 | [[package]] 318 | name = "cfg-if" 319 | version = "1.0.0" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 322 | 323 | [[package]] 324 | name = "cfg_aliases" 325 | version = "0.2.1" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 328 | 329 | [[package]] 330 | name = "chacha20" 331 | version = "0.9.1" 332 | source = "registry+https://github.com/rust-lang/crates.io-index" 333 | checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" 334 | dependencies = [ 335 | "cfg-if", 336 | "cipher", 337 | "cpufeatures", 338 | ] 339 | 340 | [[package]] 341 | name = "chrono" 342 | version = "0.4.39" 343 | source = "registry+https://github.com/rust-lang/crates.io-index" 344 | checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" 345 | dependencies = [ 346 | "android-tzdata", 347 | "iana-time-zone", 348 | "num-traits", 349 | "serde", 350 | "windows-targets 0.52.6", 351 | ] 352 | 353 | [[package]] 354 | name = "cipher" 355 | version = "0.4.4" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 358 | dependencies = [ 359 | "crypto-common", 360 | "inout", 361 | "zeroize", 362 | ] 363 | 364 | [[package]] 365 | name = "clap" 366 | version = "4.5.27" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" 369 | dependencies = [ 370 | "clap_builder", 371 | "clap_derive", 372 | ] 373 | 374 | [[package]] 375 | name = "clap_builder" 376 | version = "4.5.27" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" 379 | dependencies = [ 380 | "anstream", 381 | "anstyle", 382 | "clap_lex", 383 | "strsim", 384 | ] 385 | 386 | [[package]] 387 | name = "clap_derive" 388 | version = "4.5.24" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" 391 | dependencies = [ 392 | "heck", 393 | "proc-macro2", 394 | "quote", 395 | "syn 2.0.96", 396 | ] 397 | 398 | [[package]] 399 | name = "clap_lex" 400 | version = "0.7.4" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 403 | 404 | [[package]] 405 | name = "cobs" 406 | version = "0.2.3" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" 409 | 410 | [[package]] 411 | name = "colorchoice" 412 | version = "1.0.3" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 415 | 416 | [[package]] 417 | name = "combine" 418 | version = "4.6.7" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 421 | dependencies = [ 422 | "bytes", 423 | "memchr", 424 | ] 425 | 426 | [[package]] 427 | name = "concurrent-queue" 428 | version = "2.5.0" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 431 | dependencies = [ 432 | "crossbeam-utils", 433 | ] 434 | 435 | [[package]] 436 | name = "const-oid" 437 | version = "0.9.6" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 440 | 441 | [[package]] 442 | name = "cordyceps" 443 | version = "0.3.2" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | checksum = "ec10f0a762d93c4498d2e97a333805cb6250d60bead623f71d8034f9a4152ba3" 446 | dependencies = [ 447 | "loom 0.5.6", 448 | "tracing", 449 | ] 450 | 451 | [[package]] 452 | name = "core-foundation" 453 | version = "0.9.4" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 456 | dependencies = [ 457 | "core-foundation-sys", 458 | "libc", 459 | ] 460 | 461 | [[package]] 462 | name = "core-foundation-sys" 463 | version = "0.8.7" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 466 | 467 | [[package]] 468 | name = "cpufeatures" 469 | version = "0.2.17" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 472 | dependencies = [ 473 | "libc", 474 | ] 475 | 476 | [[package]] 477 | name = "crc" 478 | version = "3.2.1" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" 481 | dependencies = [ 482 | "crc-catalog", 483 | ] 484 | 485 | [[package]] 486 | name = "crc-catalog" 487 | version = "2.4.0" 488 | source = "registry+https://github.com/rust-lang/crates.io-index" 489 | checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 490 | 491 | [[package]] 492 | name = "crossbeam-channel" 493 | version = "0.5.14" 494 | source = "registry+https://github.com/rust-lang/crates.io-index" 495 | checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" 496 | dependencies = [ 497 | "crossbeam-utils", 498 | ] 499 | 500 | [[package]] 501 | name = "crossbeam-epoch" 502 | version = "0.9.18" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 505 | dependencies = [ 506 | "crossbeam-utils", 507 | ] 508 | 509 | [[package]] 510 | name = "crossbeam-utils" 511 | version = "0.8.21" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 514 | 515 | [[package]] 516 | name = "crypto-common" 517 | version = "0.1.6" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 520 | dependencies = [ 521 | "generic-array", 522 | "rand_core", 523 | "typenum", 524 | ] 525 | 526 | [[package]] 527 | name = "crypto_box" 528 | version = "0.9.1" 529 | source = "registry+https://github.com/rust-lang/crates.io-index" 530 | checksum = "16182b4f39a82ec8a6851155cc4c0cda3065bb1db33651726a29e1951de0f009" 531 | dependencies = [ 532 | "aead", 533 | "chacha20", 534 | "crypto_secretbox", 535 | "curve25519-dalek", 536 | "salsa20", 537 | "serdect", 538 | "subtle", 539 | "zeroize", 540 | ] 541 | 542 | [[package]] 543 | name = "crypto_secretbox" 544 | version = "0.1.1" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1" 547 | dependencies = [ 548 | "aead", 549 | "chacha20", 550 | "cipher", 551 | "generic-array", 552 | "poly1305", 553 | "salsa20", 554 | "subtle", 555 | "zeroize", 556 | ] 557 | 558 | [[package]] 559 | name = "curve25519-dalek" 560 | version = "4.1.3" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" 563 | dependencies = [ 564 | "cfg-if", 565 | "cpufeatures", 566 | "curve25519-dalek-derive", 567 | "digest", 568 | "fiat-crypto", 569 | "rand_core", 570 | "rustc_version", 571 | "serde", 572 | "subtle", 573 | "zeroize", 574 | ] 575 | 576 | [[package]] 577 | name = "curve25519-dalek-derive" 578 | version = "0.1.1" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" 581 | dependencies = [ 582 | "proc-macro2", 583 | "quote", 584 | "syn 2.0.96", 585 | ] 586 | 587 | [[package]] 588 | name = "dashmap" 589 | version = "6.1.0" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 592 | dependencies = [ 593 | "cfg-if", 594 | "crossbeam-utils", 595 | "hashbrown 0.14.5", 596 | "lock_api", 597 | "once_cell", 598 | "parking_lot_core", 599 | ] 600 | 601 | [[package]] 602 | name = "data-encoding" 603 | version = "2.7.0" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" 606 | 607 | [[package]] 608 | name = "der" 609 | version = "0.7.9" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" 612 | dependencies = [ 613 | "const-oid", 614 | "der_derive", 615 | "zeroize", 616 | ] 617 | 618 | [[package]] 619 | name = "der-parser" 620 | version = "9.0.0" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" 623 | dependencies = [ 624 | "asn1-rs", 625 | "displaydoc", 626 | "nom", 627 | "num-bigint", 628 | "num-traits", 629 | "rusticata-macros", 630 | ] 631 | 632 | [[package]] 633 | name = "der_derive" 634 | version = "0.7.3" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" 637 | dependencies = [ 638 | "proc-macro2", 639 | "quote", 640 | "syn 2.0.96", 641 | ] 642 | 643 | [[package]] 644 | name = "deranged" 645 | version = "0.3.11" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 648 | dependencies = [ 649 | "powerfmt", 650 | ] 651 | 652 | [[package]] 653 | name = "derive_more" 654 | version = "1.0.0" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 657 | dependencies = [ 658 | "derive_more-impl", 659 | ] 660 | 661 | [[package]] 662 | name = "derive_more-impl" 663 | version = "1.0.0" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" 666 | dependencies = [ 667 | "proc-macro2", 668 | "quote", 669 | "syn 2.0.96", 670 | "unicode-xid", 671 | ] 672 | 673 | [[package]] 674 | name = "diatomic-waker" 675 | version = "0.2.3" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" 678 | 679 | [[package]] 680 | name = "digest" 681 | version = "0.10.7" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 684 | dependencies = [ 685 | "block-buffer", 686 | "crypto-common", 687 | "subtle", 688 | ] 689 | 690 | [[package]] 691 | name = "displaydoc" 692 | version = "0.2.5" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 695 | dependencies = [ 696 | "proc-macro2", 697 | "quote", 698 | "syn 2.0.96", 699 | ] 700 | 701 | [[package]] 702 | name = "dlopen2" 703 | version = "0.5.0" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" 706 | dependencies = [ 707 | "libc", 708 | "once_cell", 709 | "winapi", 710 | ] 711 | 712 | [[package]] 713 | name = "document-features" 714 | version = "0.2.10" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" 717 | dependencies = [ 718 | "litrs", 719 | ] 720 | 721 | [[package]] 722 | name = "dtoa" 723 | version = "1.0.9" 724 | source = "registry+https://github.com/rust-lang/crates.io-index" 725 | checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" 726 | 727 | [[package]] 728 | name = "dyn-clone" 729 | version = "1.0.17" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" 732 | 733 | [[package]] 734 | name = "ed25519" 735 | version = "2.2.3" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" 738 | dependencies = [ 739 | "pkcs8", 740 | "serde", 741 | "signature", 742 | ] 743 | 744 | [[package]] 745 | name = "ed25519-dalek" 746 | version = "2.1.1" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" 749 | dependencies = [ 750 | "curve25519-dalek", 751 | "ed25519", 752 | "rand_core", 753 | "serde", 754 | "sha2", 755 | "subtle", 756 | "zeroize", 757 | ] 758 | 759 | [[package]] 760 | name = "embedded-io" 761 | version = "0.4.0" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" 764 | 765 | [[package]] 766 | name = "embedded-io" 767 | version = "0.6.1" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" 770 | 771 | [[package]] 772 | name = "enum-as-inner" 773 | version = "0.6.1" 774 | source = "registry+https://github.com/rust-lang/crates.io-index" 775 | checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" 776 | dependencies = [ 777 | "heck", 778 | "proc-macro2", 779 | "quote", 780 | "syn 2.0.96", 781 | ] 782 | 783 | [[package]] 784 | name = "enumflags2" 785 | version = "0.7.11" 786 | source = "registry+https://github.com/rust-lang/crates.io-index" 787 | checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" 788 | dependencies = [ 789 | "enumflags2_derive", 790 | ] 791 | 792 | [[package]] 793 | name = "enumflags2_derive" 794 | version = "0.7.11" 795 | source = "registry+https://github.com/rust-lang/crates.io-index" 796 | checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" 797 | dependencies = [ 798 | "proc-macro2", 799 | "quote", 800 | "syn 2.0.96", 801 | ] 802 | 803 | [[package]] 804 | name = "equivalent" 805 | version = "1.0.1" 806 | source = "registry+https://github.com/rust-lang/crates.io-index" 807 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 808 | 809 | [[package]] 810 | name = "erased-serde" 811 | version = "0.3.31" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" 814 | dependencies = [ 815 | "serde", 816 | ] 817 | 818 | [[package]] 819 | name = "erased_set" 820 | version = "0.8.0" 821 | source = "registry+https://github.com/rust-lang/crates.io-index" 822 | checksum = "a02a5d186d7bf1cb21f1f95e1a9cfa5c1f2dcd803a47aad454423ceec13525c5" 823 | 824 | [[package]] 825 | name = "fallible-iterator" 826 | version = "0.3.0" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" 829 | 830 | [[package]] 831 | name = "fastrand" 832 | version = "2.3.0" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 835 | 836 | [[package]] 837 | name = "fiat-crypto" 838 | version = "0.2.9" 839 | source = "registry+https://github.com/rust-lang/crates.io-index" 840 | checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" 841 | 842 | [[package]] 843 | name = "flume" 844 | version = "0.11.1" 845 | source = "registry+https://github.com/rust-lang/crates.io-index" 846 | checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" 847 | dependencies = [ 848 | "futures-core", 849 | "futures-sink", 850 | "nanorand", 851 | "spin", 852 | ] 853 | 854 | [[package]] 855 | name = "fnv" 856 | version = "1.0.7" 857 | source = "registry+https://github.com/rust-lang/crates.io-index" 858 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 859 | 860 | [[package]] 861 | name = "foldhash" 862 | version = "0.1.4" 863 | source = "registry+https://github.com/rust-lang/crates.io-index" 864 | checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" 865 | 866 | [[package]] 867 | name = "form_urlencoded" 868 | version = "1.2.1" 869 | source = "registry+https://github.com/rust-lang/crates.io-index" 870 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 871 | dependencies = [ 872 | "percent-encoding", 873 | ] 874 | 875 | [[package]] 876 | name = "futures" 877 | version = "0.3.31" 878 | source = "registry+https://github.com/rust-lang/crates.io-index" 879 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 880 | dependencies = [ 881 | "futures-channel", 882 | "futures-core", 883 | "futures-executor", 884 | "futures-io", 885 | "futures-sink", 886 | "futures-task", 887 | "futures-util", 888 | ] 889 | 890 | [[package]] 891 | name = "futures-buffered" 892 | version = "0.2.9" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "34acda8ae8b63fbe0b2195c998b180cff89a8212fb2622a78b572a9f1c6f7684" 895 | dependencies = [ 896 | "cordyceps", 897 | "diatomic-waker", 898 | "futures-core", 899 | "pin-project-lite", 900 | ] 901 | 902 | [[package]] 903 | name = "futures-channel" 904 | version = "0.3.31" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 907 | dependencies = [ 908 | "futures-core", 909 | "futures-sink", 910 | ] 911 | 912 | [[package]] 913 | name = "futures-core" 914 | version = "0.3.31" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 917 | 918 | [[package]] 919 | name = "futures-executor" 920 | version = "0.3.31" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 923 | dependencies = [ 924 | "futures-core", 925 | "futures-task", 926 | "futures-util", 927 | ] 928 | 929 | [[package]] 930 | name = "futures-io" 931 | version = "0.3.31" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 934 | 935 | [[package]] 936 | name = "futures-lite" 937 | version = "2.6.0" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" 940 | dependencies = [ 941 | "fastrand", 942 | "futures-core", 943 | "futures-io", 944 | "parking", 945 | "pin-project-lite", 946 | ] 947 | 948 | [[package]] 949 | name = "futures-macro" 950 | version = "0.3.31" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 953 | dependencies = [ 954 | "proc-macro2", 955 | "quote", 956 | "syn 2.0.96", 957 | ] 958 | 959 | [[package]] 960 | name = "futures-sink" 961 | version = "0.3.31" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 964 | 965 | [[package]] 966 | name = "futures-task" 967 | version = "0.3.31" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 970 | 971 | [[package]] 972 | name = "futures-timer" 973 | version = "3.0.3" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" 976 | 977 | [[package]] 978 | name = "futures-util" 979 | version = "0.3.31" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 982 | dependencies = [ 983 | "futures-channel", 984 | "futures-core", 985 | "futures-io", 986 | "futures-macro", 987 | "futures-sink", 988 | "futures-task", 989 | "memchr", 990 | "pin-project-lite", 991 | "pin-utils", 992 | "slab", 993 | ] 994 | 995 | [[package]] 996 | name = "generator" 997 | version = "0.7.5" 998 | source = "registry+https://github.com/rust-lang/crates.io-index" 999 | checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" 1000 | dependencies = [ 1001 | "cc", 1002 | "libc", 1003 | "log", 1004 | "rustversion", 1005 | "windows 0.48.0", 1006 | ] 1007 | 1008 | [[package]] 1009 | name = "generator" 1010 | version = "0.8.4" 1011 | source = "registry+https://github.com/rust-lang/crates.io-index" 1012 | checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" 1013 | dependencies = [ 1014 | "cfg-if", 1015 | "libc", 1016 | "log", 1017 | "rustversion", 1018 | "windows 0.58.0", 1019 | ] 1020 | 1021 | [[package]] 1022 | name = "generic-array" 1023 | version = "0.14.7" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1026 | dependencies = [ 1027 | "typenum", 1028 | "version_check", 1029 | "zeroize", 1030 | ] 1031 | 1032 | [[package]] 1033 | name = "getrandom" 1034 | version = "0.2.15" 1035 | source = "registry+https://github.com/rust-lang/crates.io-index" 1036 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 1037 | dependencies = [ 1038 | "cfg-if", 1039 | "js-sys", 1040 | "libc", 1041 | "wasi", 1042 | "wasm-bindgen", 1043 | ] 1044 | 1045 | [[package]] 1046 | name = "gimli" 1047 | version = "0.31.1" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 1050 | 1051 | [[package]] 1052 | name = "glob" 1053 | version = "0.3.2" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 1056 | 1057 | [[package]] 1058 | name = "governor" 1059 | version = "0.7.0" 1060 | source = "registry+https://github.com/rust-lang/crates.io-index" 1061 | checksum = "0746aa765db78b521451ef74221663b57ba595bf83f75d0ce23cc09447c8139f" 1062 | dependencies = [ 1063 | "cfg-if", 1064 | "dashmap", 1065 | "futures-sink", 1066 | "futures-timer", 1067 | "futures-util", 1068 | "no-std-compat", 1069 | "nonzero_ext", 1070 | "parking_lot", 1071 | "portable-atomic", 1072 | "quanta", 1073 | "rand", 1074 | "smallvec", 1075 | "spinning_top", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "h2" 1080 | version = "0.4.7" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" 1083 | dependencies = [ 1084 | "atomic-waker", 1085 | "bytes", 1086 | "fnv", 1087 | "futures-core", 1088 | "futures-sink", 1089 | "http 1.2.0", 1090 | "indexmap", 1091 | "slab", 1092 | "tokio", 1093 | "tokio-util", 1094 | "tracing", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "hashbrown" 1099 | version = "0.14.5" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1102 | 1103 | [[package]] 1104 | name = "hashbrown" 1105 | version = "0.15.2" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 1108 | dependencies = [ 1109 | "allocator-api2", 1110 | "equivalent", 1111 | "foldhash", 1112 | ] 1113 | 1114 | [[package]] 1115 | name = "heck" 1116 | version = "0.5.0" 1117 | source = "registry+https://github.com/rust-lang/crates.io-index" 1118 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1119 | 1120 | [[package]] 1121 | name = "hex" 1122 | version = "0.4.3" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1125 | 1126 | [[package]] 1127 | name = "hickory-proto" 1128 | version = "0.25.0-alpha.4" 1129 | source = "registry+https://github.com/rust-lang/crates.io-index" 1130 | checksum = "d063c0692ee669aa6d261988aa19ca5510f1cc40e4f211024f50c888499a35d7" 1131 | dependencies = [ 1132 | "async-recursion", 1133 | "async-trait", 1134 | "cfg-if", 1135 | "data-encoding", 1136 | "enum-as-inner", 1137 | "futures-channel", 1138 | "futures-io", 1139 | "futures-util", 1140 | "idna", 1141 | "ipnet", 1142 | "once_cell", 1143 | "rand", 1144 | "thiserror 2.0.11", 1145 | "tinyvec", 1146 | "tokio", 1147 | "tracing", 1148 | "url", 1149 | ] 1150 | 1151 | [[package]] 1152 | name = "hickory-resolver" 1153 | version = "0.25.0-alpha.4" 1154 | source = "registry+https://github.com/rust-lang/crates.io-index" 1155 | checksum = "42bc352e4412fb657e795f79b4efcf2bd60b59ee5ca0187f3554194cd1107a27" 1156 | dependencies = [ 1157 | "cfg-if", 1158 | "futures-util", 1159 | "hickory-proto", 1160 | "ipconfig", 1161 | "moka", 1162 | "once_cell", 1163 | "parking_lot", 1164 | "rand", 1165 | "resolv-conf", 1166 | "smallvec", 1167 | "thiserror 2.0.11", 1168 | "tokio", 1169 | "tracing", 1170 | ] 1171 | 1172 | [[package]] 1173 | name = "hmac" 1174 | version = "0.12.1" 1175 | source = "registry+https://github.com/rust-lang/crates.io-index" 1176 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1177 | dependencies = [ 1178 | "digest", 1179 | ] 1180 | 1181 | [[package]] 1182 | name = "hmac-sha1" 1183 | version = "0.2.2" 1184 | source = "registry+https://github.com/rust-lang/crates.io-index" 1185 | checksum = "6b05da5b9e5d4720bfb691eebb2b9d42da3570745da71eac8a1f5bb7e59aab88" 1186 | dependencies = [ 1187 | "hmac", 1188 | "sha1", 1189 | ] 1190 | 1191 | [[package]] 1192 | name = "hmac-sha256" 1193 | version = "1.1.8" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "4a8575493d277c9092b988c780c94737fb9fd8651a1001e16bee3eccfc1baedb" 1196 | 1197 | [[package]] 1198 | name = "hostname" 1199 | version = "0.3.1" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" 1202 | dependencies = [ 1203 | "libc", 1204 | "match_cfg", 1205 | "winapi", 1206 | ] 1207 | 1208 | [[package]] 1209 | name = "hostname-validator" 1210 | version = "1.1.1" 1211 | source = "registry+https://github.com/rust-lang/crates.io-index" 1212 | checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" 1213 | 1214 | [[package]] 1215 | name = "http" 1216 | version = "0.2.12" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 1219 | dependencies = [ 1220 | "bytes", 1221 | "fnv", 1222 | "itoa", 1223 | ] 1224 | 1225 | [[package]] 1226 | name = "http" 1227 | version = "1.2.0" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" 1230 | dependencies = [ 1231 | "bytes", 1232 | "fnv", 1233 | "itoa", 1234 | ] 1235 | 1236 | [[package]] 1237 | name = "http-body" 1238 | version = "1.0.1" 1239 | source = "registry+https://github.com/rust-lang/crates.io-index" 1240 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1241 | dependencies = [ 1242 | "bytes", 1243 | "http 1.2.0", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "http-body-util" 1248 | version = "0.1.2" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" 1251 | dependencies = [ 1252 | "bytes", 1253 | "futures-util", 1254 | "http 1.2.0", 1255 | "http-body", 1256 | "pin-project-lite", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "httparse" 1261 | version = "1.9.5" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" 1264 | 1265 | [[package]] 1266 | name = "httpdate" 1267 | version = "1.0.3" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 1270 | 1271 | [[package]] 1272 | name = "hyper" 1273 | version = "1.5.2" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" 1276 | dependencies = [ 1277 | "bytes", 1278 | "futures-channel", 1279 | "futures-util", 1280 | "h2", 1281 | "http 1.2.0", 1282 | "http-body", 1283 | "httparse", 1284 | "httpdate", 1285 | "itoa", 1286 | "pin-project-lite", 1287 | "smallvec", 1288 | "tokio", 1289 | "want", 1290 | ] 1291 | 1292 | [[package]] 1293 | name = "hyper-rustls" 1294 | version = "0.27.5" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 1297 | dependencies = [ 1298 | "futures-util", 1299 | "http 1.2.0", 1300 | "hyper", 1301 | "hyper-util", 1302 | "rustls", 1303 | "rustls-pki-types", 1304 | "tokio", 1305 | "tokio-rustls", 1306 | "tower-service", 1307 | "webpki-roots", 1308 | ] 1309 | 1310 | [[package]] 1311 | name = "hyper-util" 1312 | version = "0.1.10" 1313 | source = "registry+https://github.com/rust-lang/crates.io-index" 1314 | checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" 1315 | dependencies = [ 1316 | "bytes", 1317 | "futures-channel", 1318 | "futures-util", 1319 | "http 1.2.0", 1320 | "http-body", 1321 | "hyper", 1322 | "pin-project-lite", 1323 | "socket2", 1324 | "tokio", 1325 | "tower-service", 1326 | "tracing", 1327 | ] 1328 | 1329 | [[package]] 1330 | name = "iana-time-zone" 1331 | version = "0.1.61" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 1334 | dependencies = [ 1335 | "android_system_properties", 1336 | "core-foundation-sys", 1337 | "iana-time-zone-haiku", 1338 | "js-sys", 1339 | "wasm-bindgen", 1340 | "windows-core 0.52.0", 1341 | ] 1342 | 1343 | [[package]] 1344 | name = "iana-time-zone-haiku" 1345 | version = "0.1.2" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1348 | dependencies = [ 1349 | "cc", 1350 | ] 1351 | 1352 | [[package]] 1353 | name = "icu_collections" 1354 | version = "1.5.0" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 1357 | dependencies = [ 1358 | "displaydoc", 1359 | "yoke", 1360 | "zerofrom", 1361 | "zerovec", 1362 | ] 1363 | 1364 | [[package]] 1365 | name = "icu_locid" 1366 | version = "1.5.0" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 1369 | dependencies = [ 1370 | "displaydoc", 1371 | "litemap", 1372 | "tinystr", 1373 | "writeable", 1374 | "zerovec", 1375 | ] 1376 | 1377 | [[package]] 1378 | name = "icu_locid_transform" 1379 | version = "1.5.0" 1380 | source = "registry+https://github.com/rust-lang/crates.io-index" 1381 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1382 | dependencies = [ 1383 | "displaydoc", 1384 | "icu_locid", 1385 | "icu_locid_transform_data", 1386 | "icu_provider", 1387 | "tinystr", 1388 | "zerovec", 1389 | ] 1390 | 1391 | [[package]] 1392 | name = "icu_locid_transform_data" 1393 | version = "1.5.0" 1394 | source = "registry+https://github.com/rust-lang/crates.io-index" 1395 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 1396 | 1397 | [[package]] 1398 | name = "icu_normalizer" 1399 | version = "1.5.0" 1400 | source = "registry+https://github.com/rust-lang/crates.io-index" 1401 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1402 | dependencies = [ 1403 | "displaydoc", 1404 | "icu_collections", 1405 | "icu_normalizer_data", 1406 | "icu_properties", 1407 | "icu_provider", 1408 | "smallvec", 1409 | "utf16_iter", 1410 | "utf8_iter", 1411 | "write16", 1412 | "zerovec", 1413 | ] 1414 | 1415 | [[package]] 1416 | name = "icu_normalizer_data" 1417 | version = "1.5.0" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 1420 | 1421 | [[package]] 1422 | name = "icu_properties" 1423 | version = "1.5.1" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 1426 | dependencies = [ 1427 | "displaydoc", 1428 | "icu_collections", 1429 | "icu_locid_transform", 1430 | "icu_properties_data", 1431 | "icu_provider", 1432 | "tinystr", 1433 | "zerovec", 1434 | ] 1435 | 1436 | [[package]] 1437 | name = "icu_properties_data" 1438 | version = "1.5.0" 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" 1440 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 1441 | 1442 | [[package]] 1443 | name = "icu_provider" 1444 | version = "1.5.0" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1447 | dependencies = [ 1448 | "displaydoc", 1449 | "icu_locid", 1450 | "icu_provider_macros", 1451 | "stable_deref_trait", 1452 | "tinystr", 1453 | "writeable", 1454 | "yoke", 1455 | "zerofrom", 1456 | "zerovec", 1457 | ] 1458 | 1459 | [[package]] 1460 | name = "icu_provider_macros" 1461 | version = "1.5.0" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1464 | dependencies = [ 1465 | "proc-macro2", 1466 | "quote", 1467 | "syn 2.0.96", 1468 | ] 1469 | 1470 | [[package]] 1471 | name = "idna" 1472 | version = "1.0.3" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1475 | dependencies = [ 1476 | "idna_adapter", 1477 | "smallvec", 1478 | "utf8_iter", 1479 | ] 1480 | 1481 | [[package]] 1482 | name = "idna_adapter" 1483 | version = "1.2.0" 1484 | source = "registry+https://github.com/rust-lang/crates.io-index" 1485 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 1486 | dependencies = [ 1487 | "icu_normalizer", 1488 | "icu_properties", 1489 | ] 1490 | 1491 | [[package]] 1492 | name = "igd-next" 1493 | version = "0.15.1" 1494 | source = "registry+https://github.com/rust-lang/crates.io-index" 1495 | checksum = "76b0d7d4541def58a37bf8efc559683f21edce7c82f0d866c93ac21f7e098f93" 1496 | dependencies = [ 1497 | "async-trait", 1498 | "attohttpc", 1499 | "bytes", 1500 | "futures", 1501 | "http 1.2.0", 1502 | "http-body-util", 1503 | "hyper", 1504 | "hyper-util", 1505 | "log", 1506 | "rand", 1507 | "tokio", 1508 | "url", 1509 | "xmltree", 1510 | ] 1511 | 1512 | [[package]] 1513 | name = "indexmap" 1514 | version = "2.7.1" 1515 | source = "registry+https://github.com/rust-lang/crates.io-index" 1516 | checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" 1517 | dependencies = [ 1518 | "equivalent", 1519 | "hashbrown 0.15.2", 1520 | ] 1521 | 1522 | [[package]] 1523 | name = "inout" 1524 | version = "0.1.3" 1525 | source = "registry+https://github.com/rust-lang/crates.io-index" 1526 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 1527 | dependencies = [ 1528 | "generic-array", 1529 | ] 1530 | 1531 | [[package]] 1532 | name = "instant" 1533 | version = "0.1.13" 1534 | source = "registry+https://github.com/rust-lang/crates.io-index" 1535 | checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 1536 | dependencies = [ 1537 | "cfg-if", 1538 | ] 1539 | 1540 | [[package]] 1541 | name = "ipconfig" 1542 | version = "0.3.2" 1543 | source = "registry+https://github.com/rust-lang/crates.io-index" 1544 | checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" 1545 | dependencies = [ 1546 | "socket2", 1547 | "widestring", 1548 | "windows-sys 0.48.0", 1549 | "winreg", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "ipnet" 1554 | version = "2.11.0" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 1557 | 1558 | [[package]] 1559 | name = "iroh" 1560 | version = "0.31.0" 1561 | source = "registry+https://github.com/rust-lang/crates.io-index" 1562 | checksum = "27ee97c8412bbf06d7c5253c6638a8bac741cb44d405669cedbfd7d47cd68090" 1563 | dependencies = [ 1564 | "aead", 1565 | "anyhow", 1566 | "backoff", 1567 | "bytes", 1568 | "concurrent-queue", 1569 | "crypto_box", 1570 | "data-encoding", 1571 | "der", 1572 | "derive_more", 1573 | "ed25519-dalek", 1574 | "futures-buffered", 1575 | "futures-lite", 1576 | "futures-sink", 1577 | "futures-util", 1578 | "governor", 1579 | "hickory-resolver", 1580 | "http 1.2.0", 1581 | "http-body-util", 1582 | "hyper", 1583 | "hyper-util", 1584 | "igd-next", 1585 | "iroh-base", 1586 | "iroh-metrics", 1587 | "iroh-net-report", 1588 | "iroh-quinn", 1589 | "iroh-quinn-proto", 1590 | "iroh-quinn-udp", 1591 | "iroh-relay", 1592 | "netdev", 1593 | "netwatch", 1594 | "pin-project", 1595 | "pkarr", 1596 | "portmapper", 1597 | "rand", 1598 | "rcgen", 1599 | "reqwest", 1600 | "ring", 1601 | "rustls", 1602 | "rustls-webpki", 1603 | "serde", 1604 | "smallvec", 1605 | "strum", 1606 | "stun-rs", 1607 | "thiserror 2.0.11", 1608 | "tokio", 1609 | "tokio-rustls", 1610 | "tokio-stream", 1611 | "tokio-tungstenite", 1612 | "tokio-tungstenite-wasm", 1613 | "tokio-util", 1614 | "tracing", 1615 | "url", 1616 | "webpki-roots", 1617 | "x509-parser", 1618 | "z32", 1619 | ] 1620 | 1621 | [[package]] 1622 | name = "iroh-base" 1623 | version = "0.31.0" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "0546d176f79fb63a5efeb8eb8c692c483920e35bd9ba66c028928cf2ca27239b" 1626 | dependencies = [ 1627 | "curve25519-dalek", 1628 | "data-encoding", 1629 | "derive_more", 1630 | "ed25519-dalek", 1631 | "getrandom", 1632 | "rand_core", 1633 | "serde", 1634 | "thiserror 2.0.11", 1635 | "url", 1636 | ] 1637 | 1638 | [[package]] 1639 | name = "iroh-metrics" 1640 | version = "0.31.0" 1641 | source = "registry+https://github.com/rust-lang/crates.io-index" 1642 | checksum = "571d177e20f0848a643a2c0f662be0e08968f8743b0776941f83a2152b87a180" 1643 | dependencies = [ 1644 | "erased_set", 1645 | "http-body-util", 1646 | "hyper", 1647 | "hyper-util", 1648 | "prometheus-client", 1649 | "reqwest", 1650 | "serde", 1651 | "struct_iterable", 1652 | "thiserror 2.0.11", 1653 | "tokio", 1654 | "tracing", 1655 | ] 1656 | 1657 | [[package]] 1658 | name = "iroh-net-report" 1659 | version = "0.31.0" 1660 | source = "registry+https://github.com/rust-lang/crates.io-index" 1661 | checksum = "547eacca10cd072412b04d784336e29c5e81e7ba4fbb9c1ad70777f7874a5d1a" 1662 | dependencies = [ 1663 | "anyhow", 1664 | "bytes", 1665 | "derive_more", 1666 | "futures-buffered", 1667 | "futures-lite", 1668 | "hickory-resolver", 1669 | "iroh-base", 1670 | "iroh-metrics", 1671 | "iroh-quinn", 1672 | "iroh-relay", 1673 | "netwatch", 1674 | "portmapper", 1675 | "rand", 1676 | "reqwest", 1677 | "rustls", 1678 | "surge-ping", 1679 | "thiserror 2.0.11", 1680 | "tokio", 1681 | "tokio-util", 1682 | "tracing", 1683 | "url", 1684 | ] 1685 | 1686 | [[package]] 1687 | name = "iroh-quinn" 1688 | version = "0.12.0" 1689 | source = "registry+https://github.com/rust-lang/crates.io-index" 1690 | checksum = "35ba75a5c57cff299d2d7ca1ddee053f66339d1756bd79ec637bcad5aa61100e" 1691 | dependencies = [ 1692 | "bytes", 1693 | "iroh-quinn-proto", 1694 | "iroh-quinn-udp", 1695 | "pin-project-lite", 1696 | "rustc-hash", 1697 | "rustls", 1698 | "socket2", 1699 | "thiserror 1.0.69", 1700 | "tokio", 1701 | "tracing", 1702 | ] 1703 | 1704 | [[package]] 1705 | name = "iroh-quinn-proto" 1706 | version = "0.12.0" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "e2c869ba52683d3d067c83ab4c00a2fda18eaf13b1434d4c1352f428674d4a5d" 1709 | dependencies = [ 1710 | "bytes", 1711 | "rand", 1712 | "ring", 1713 | "rustc-hash", 1714 | "rustls", 1715 | "rustls-platform-verifier", 1716 | "slab", 1717 | "thiserror 1.0.69", 1718 | "tinyvec", 1719 | "tracing", 1720 | ] 1721 | 1722 | [[package]] 1723 | name = "iroh-quinn-udp" 1724 | version = "0.5.5" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "bfcfc0abc2fdf8cf18a6c72893b7cbebeac2274a3b1306c1760c48c0e10ac5e0" 1727 | dependencies = [ 1728 | "libc", 1729 | "once_cell", 1730 | "socket2", 1731 | "tracing", 1732 | "windows-sys 0.59.0", 1733 | ] 1734 | 1735 | [[package]] 1736 | name = "iroh-relay" 1737 | version = "0.31.0" 1738 | source = "registry+https://github.com/rust-lang/crates.io-index" 1739 | checksum = "21e4c13758cac9d81a6793b59eba17da2ccbf90a76278ec160d7c8f90b1bb903" 1740 | dependencies = [ 1741 | "anyhow", 1742 | "bytes", 1743 | "data-encoding", 1744 | "derive_more", 1745 | "futures-buffered", 1746 | "futures-lite", 1747 | "futures-sink", 1748 | "futures-util", 1749 | "governor", 1750 | "hickory-proto", 1751 | "hickory-resolver", 1752 | "http 1.2.0", 1753 | "http-body-util", 1754 | "hyper", 1755 | "hyper-util", 1756 | "iroh-base", 1757 | "iroh-metrics", 1758 | "iroh-quinn", 1759 | "iroh-quinn-proto", 1760 | "lru", 1761 | "num_enum", 1762 | "pin-project", 1763 | "postcard", 1764 | "rand", 1765 | "reqwest", 1766 | "rustls", 1767 | "rustls-webpki", 1768 | "serde", 1769 | "stun-rs", 1770 | "thiserror 2.0.11", 1771 | "time", 1772 | "tokio", 1773 | "tokio-rustls", 1774 | "tokio-tungstenite", 1775 | "tokio-tungstenite-wasm", 1776 | "tokio-util", 1777 | "tracing", 1778 | "url", 1779 | "webpki-roots", 1780 | ] 1781 | 1782 | [[package]] 1783 | name = "is_terminal_polyfill" 1784 | version = "1.70.1" 1785 | source = "registry+https://github.com/rust-lang/crates.io-index" 1786 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1787 | 1788 | [[package]] 1789 | name = "itoa" 1790 | version = "1.0.14" 1791 | source = "registry+https://github.com/rust-lang/crates.io-index" 1792 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 1793 | 1794 | [[package]] 1795 | name = "jni" 1796 | version = "0.19.0" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" 1799 | dependencies = [ 1800 | "cesu8", 1801 | "combine", 1802 | "jni-sys", 1803 | "log", 1804 | "thiserror 1.0.69", 1805 | "walkdir", 1806 | ] 1807 | 1808 | [[package]] 1809 | name = "jni-sys" 1810 | version = "0.3.0" 1811 | source = "registry+https://github.com/rust-lang/crates.io-index" 1812 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1813 | 1814 | [[package]] 1815 | name = "js-sys" 1816 | version = "0.3.77" 1817 | source = "registry+https://github.com/rust-lang/crates.io-index" 1818 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1819 | dependencies = [ 1820 | "once_cell", 1821 | "wasm-bindgen", 1822 | ] 1823 | 1824 | [[package]] 1825 | name = "lazy_static" 1826 | version = "1.5.0" 1827 | source = "registry+https://github.com/rust-lang/crates.io-index" 1828 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1829 | 1830 | [[package]] 1831 | name = "libc" 1832 | version = "0.2.169" 1833 | source = "registry+https://github.com/rust-lang/crates.io-index" 1834 | checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" 1835 | 1836 | [[package]] 1837 | name = "litemap" 1838 | version = "0.7.4" 1839 | source = "registry+https://github.com/rust-lang/crates.io-index" 1840 | checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" 1841 | 1842 | [[package]] 1843 | name = "litrs" 1844 | version = "0.4.1" 1845 | source = "registry+https://github.com/rust-lang/crates.io-index" 1846 | checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" 1847 | 1848 | [[package]] 1849 | name = "lock_api" 1850 | version = "0.4.12" 1851 | source = "registry+https://github.com/rust-lang/crates.io-index" 1852 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1853 | dependencies = [ 1854 | "autocfg", 1855 | "scopeguard", 1856 | ] 1857 | 1858 | [[package]] 1859 | name = "log" 1860 | version = "0.4.25" 1861 | source = "registry+https://github.com/rust-lang/crates.io-index" 1862 | checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" 1863 | 1864 | [[package]] 1865 | name = "loom" 1866 | version = "0.5.6" 1867 | source = "registry+https://github.com/rust-lang/crates.io-index" 1868 | checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" 1869 | dependencies = [ 1870 | "cfg-if", 1871 | "generator 0.7.5", 1872 | "scoped-tls", 1873 | "tracing", 1874 | "tracing-subscriber", 1875 | ] 1876 | 1877 | [[package]] 1878 | name = "loom" 1879 | version = "0.7.2" 1880 | source = "registry+https://github.com/rust-lang/crates.io-index" 1881 | checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" 1882 | dependencies = [ 1883 | "cfg-if", 1884 | "generator 0.8.4", 1885 | "scoped-tls", 1886 | "tracing", 1887 | "tracing-subscriber", 1888 | ] 1889 | 1890 | [[package]] 1891 | name = "lru" 1892 | version = "0.12.5" 1893 | source = "registry+https://github.com/rust-lang/crates.io-index" 1894 | checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" 1895 | dependencies = [ 1896 | "hashbrown 0.15.2", 1897 | ] 1898 | 1899 | [[package]] 1900 | name = "mainline" 1901 | version = "2.0.1" 1902 | source = "registry+https://github.com/rust-lang/crates.io-index" 1903 | checksum = "2b751ffb57303217bcae8f490eee6044a5b40eadf6ca05ff476cad37e7b7970d" 1904 | dependencies = [ 1905 | "bytes", 1906 | "crc", 1907 | "ed25519-dalek", 1908 | "flume", 1909 | "lru", 1910 | "rand", 1911 | "serde", 1912 | "serde_bencode", 1913 | "serde_bytes", 1914 | "sha1_smol", 1915 | "thiserror 1.0.69", 1916 | "tracing", 1917 | ] 1918 | 1919 | [[package]] 1920 | name = "match_cfg" 1921 | version = "0.1.0" 1922 | source = "registry+https://github.com/rust-lang/crates.io-index" 1923 | checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" 1924 | 1925 | [[package]] 1926 | name = "matchers" 1927 | version = "0.1.0" 1928 | source = "registry+https://github.com/rust-lang/crates.io-index" 1929 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1930 | dependencies = [ 1931 | "regex-automata 0.1.10", 1932 | ] 1933 | 1934 | [[package]] 1935 | name = "md5" 1936 | version = "0.7.0" 1937 | source = "registry+https://github.com/rust-lang/crates.io-index" 1938 | checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" 1939 | 1940 | [[package]] 1941 | name = "memchr" 1942 | version = "2.7.4" 1943 | source = "registry+https://github.com/rust-lang/crates.io-index" 1944 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1945 | 1946 | [[package]] 1947 | name = "mime" 1948 | version = "0.3.17" 1949 | source = "registry+https://github.com/rust-lang/crates.io-index" 1950 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 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 = "miniz_oxide" 1960 | version = "0.8.3" 1961 | source = "registry+https://github.com/rust-lang/crates.io-index" 1962 | checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" 1963 | dependencies = [ 1964 | "adler2", 1965 | ] 1966 | 1967 | [[package]] 1968 | name = "mio" 1969 | version = "1.0.3" 1970 | source = "registry+https://github.com/rust-lang/crates.io-index" 1971 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1972 | dependencies = [ 1973 | "libc", 1974 | "wasi", 1975 | "windows-sys 0.52.0", 1976 | ] 1977 | 1978 | [[package]] 1979 | name = "moka" 1980 | version = "0.12.10" 1981 | source = "registry+https://github.com/rust-lang/crates.io-index" 1982 | checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" 1983 | dependencies = [ 1984 | "crossbeam-channel", 1985 | "crossbeam-epoch", 1986 | "crossbeam-utils", 1987 | "loom 0.7.2", 1988 | "parking_lot", 1989 | "portable-atomic", 1990 | "rustc_version", 1991 | "smallvec", 1992 | "tagptr", 1993 | "thiserror 1.0.69", 1994 | "uuid", 1995 | ] 1996 | 1997 | [[package]] 1998 | name = "nanorand" 1999 | version = "0.7.0" 2000 | source = "registry+https://github.com/rust-lang/crates.io-index" 2001 | checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" 2002 | dependencies = [ 2003 | "getrandom", 2004 | ] 2005 | 2006 | [[package]] 2007 | name = "netdev" 2008 | version = "0.31.0" 2009 | source = "registry+https://github.com/rust-lang/crates.io-index" 2010 | checksum = "f901362e84cd407be6f8cd9d3a46bccf09136b095792785401ea7d283c79b91d" 2011 | dependencies = [ 2012 | "dlopen2", 2013 | "ipnet", 2014 | "libc", 2015 | "netlink-packet-core", 2016 | "netlink-packet-route 0.17.1", 2017 | "netlink-sys", 2018 | "once_cell", 2019 | "system-configuration", 2020 | "windows-sys 0.52.0", 2021 | ] 2022 | 2023 | [[package]] 2024 | name = "netlink-packet-core" 2025 | version = "0.7.0" 2026 | source = "registry+https://github.com/rust-lang/crates.io-index" 2027 | checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" 2028 | dependencies = [ 2029 | "anyhow", 2030 | "byteorder", 2031 | "netlink-packet-utils", 2032 | ] 2033 | 2034 | [[package]] 2035 | name = "netlink-packet-route" 2036 | version = "0.17.1" 2037 | source = "registry+https://github.com/rust-lang/crates.io-index" 2038 | checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" 2039 | dependencies = [ 2040 | "anyhow", 2041 | "bitflags 1.3.2", 2042 | "byteorder", 2043 | "libc", 2044 | "netlink-packet-core", 2045 | "netlink-packet-utils", 2046 | ] 2047 | 2048 | [[package]] 2049 | name = "netlink-packet-route" 2050 | version = "0.19.0" 2051 | source = "registry+https://github.com/rust-lang/crates.io-index" 2052 | checksum = "74c171cd77b4ee8c7708da746ce392440cb7bcf618d122ec9ecc607b12938bf4" 2053 | dependencies = [ 2054 | "anyhow", 2055 | "byteorder", 2056 | "libc", 2057 | "log", 2058 | "netlink-packet-core", 2059 | "netlink-packet-utils", 2060 | ] 2061 | 2062 | [[package]] 2063 | name = "netlink-packet-utils" 2064 | version = "0.5.2" 2065 | source = "registry+https://github.com/rust-lang/crates.io-index" 2066 | checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" 2067 | dependencies = [ 2068 | "anyhow", 2069 | "byteorder", 2070 | "paste", 2071 | "thiserror 1.0.69", 2072 | ] 2073 | 2074 | [[package]] 2075 | name = "netlink-proto" 2076 | version = "0.11.5" 2077 | source = "registry+https://github.com/rust-lang/crates.io-index" 2078 | checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" 2079 | dependencies = [ 2080 | "bytes", 2081 | "futures", 2082 | "log", 2083 | "netlink-packet-core", 2084 | "netlink-sys", 2085 | "thiserror 2.0.11", 2086 | ] 2087 | 2088 | [[package]] 2089 | name = "netlink-sys" 2090 | version = "0.8.7" 2091 | source = "registry+https://github.com/rust-lang/crates.io-index" 2092 | checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" 2093 | dependencies = [ 2094 | "bytes", 2095 | "futures", 2096 | "libc", 2097 | "log", 2098 | "tokio", 2099 | ] 2100 | 2101 | [[package]] 2102 | name = "netwatch" 2103 | version = "0.3.0" 2104 | source = "registry+https://github.com/rust-lang/crates.io-index" 2105 | checksum = "64da82edf903649e6cb6a77b5a6f7fe01387d8865065d411d139018510880302" 2106 | dependencies = [ 2107 | "anyhow", 2108 | "atomic-waker", 2109 | "bytes", 2110 | "derive_more", 2111 | "futures-lite", 2112 | "futures-sink", 2113 | "futures-util", 2114 | "iroh-quinn-udp", 2115 | "libc", 2116 | "netdev", 2117 | "netlink-packet-core", 2118 | "netlink-packet-route 0.19.0", 2119 | "netlink-sys", 2120 | "once_cell", 2121 | "rtnetlink 0.13.1", 2122 | "rtnetlink 0.14.1", 2123 | "serde", 2124 | "socket2", 2125 | "thiserror 2.0.11", 2126 | "time", 2127 | "tokio", 2128 | "tokio-util", 2129 | "tracing", 2130 | "windows 0.58.0", 2131 | "wmi", 2132 | ] 2133 | 2134 | [[package]] 2135 | name = "nix" 2136 | version = "0.26.4" 2137 | source = "registry+https://github.com/rust-lang/crates.io-index" 2138 | checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" 2139 | dependencies = [ 2140 | "bitflags 1.3.2", 2141 | "cfg-if", 2142 | "libc", 2143 | ] 2144 | 2145 | [[package]] 2146 | name = "nix" 2147 | version = "0.27.1" 2148 | source = "registry+https://github.com/rust-lang/crates.io-index" 2149 | checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" 2150 | dependencies = [ 2151 | "bitflags 2.8.0", 2152 | "cfg-if", 2153 | "libc", 2154 | ] 2155 | 2156 | [[package]] 2157 | name = "no-std-compat" 2158 | version = "0.4.1" 2159 | source = "registry+https://github.com/rust-lang/crates.io-index" 2160 | checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" 2161 | 2162 | [[package]] 2163 | name = "no-std-net" 2164 | version = "0.6.0" 2165 | source = "registry+https://github.com/rust-lang/crates.io-index" 2166 | checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" 2167 | 2168 | [[package]] 2169 | name = "nom" 2170 | version = "7.1.3" 2171 | source = "registry+https://github.com/rust-lang/crates.io-index" 2172 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2173 | dependencies = [ 2174 | "memchr", 2175 | "minimal-lexical", 2176 | ] 2177 | 2178 | [[package]] 2179 | name = "nonzero_ext" 2180 | version = "0.3.0" 2181 | source = "registry+https://github.com/rust-lang/crates.io-index" 2182 | checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" 2183 | 2184 | [[package]] 2185 | name = "nu-ansi-term" 2186 | version = "0.46.0" 2187 | source = "registry+https://github.com/rust-lang/crates.io-index" 2188 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 2189 | dependencies = [ 2190 | "overload", 2191 | "winapi", 2192 | ] 2193 | 2194 | [[package]] 2195 | name = "num-bigint" 2196 | version = "0.4.6" 2197 | source = "registry+https://github.com/rust-lang/crates.io-index" 2198 | checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 2199 | dependencies = [ 2200 | "num-integer", 2201 | "num-traits", 2202 | ] 2203 | 2204 | [[package]] 2205 | name = "num-conv" 2206 | version = "0.1.0" 2207 | source = "registry+https://github.com/rust-lang/crates.io-index" 2208 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 2209 | 2210 | [[package]] 2211 | name = "num-integer" 2212 | version = "0.1.46" 2213 | source = "registry+https://github.com/rust-lang/crates.io-index" 2214 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 2215 | dependencies = [ 2216 | "num-traits", 2217 | ] 2218 | 2219 | [[package]] 2220 | name = "num-traits" 2221 | version = "0.2.19" 2222 | source = "registry+https://github.com/rust-lang/crates.io-index" 2223 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2224 | dependencies = [ 2225 | "autocfg", 2226 | ] 2227 | 2228 | [[package]] 2229 | name = "num_enum" 2230 | version = "0.7.3" 2231 | source = "registry+https://github.com/rust-lang/crates.io-index" 2232 | checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" 2233 | dependencies = [ 2234 | "num_enum_derive", 2235 | ] 2236 | 2237 | [[package]] 2238 | name = "num_enum_derive" 2239 | version = "0.7.3" 2240 | source = "registry+https://github.com/rust-lang/crates.io-index" 2241 | checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" 2242 | dependencies = [ 2243 | "proc-macro-crate", 2244 | "proc-macro2", 2245 | "quote", 2246 | "syn 2.0.96", 2247 | ] 2248 | 2249 | [[package]] 2250 | name = "object" 2251 | version = "0.36.7" 2252 | source = "registry+https://github.com/rust-lang/crates.io-index" 2253 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 2254 | dependencies = [ 2255 | "memchr", 2256 | ] 2257 | 2258 | [[package]] 2259 | name = "oid-registry" 2260 | version = "0.7.1" 2261 | source = "registry+https://github.com/rust-lang/crates.io-index" 2262 | checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" 2263 | dependencies = [ 2264 | "asn1-rs", 2265 | ] 2266 | 2267 | [[package]] 2268 | name = "once_cell" 2269 | version = "1.20.2" 2270 | source = "registry+https://github.com/rust-lang/crates.io-index" 2271 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 2272 | 2273 | [[package]] 2274 | name = "opaque-debug" 2275 | version = "0.3.1" 2276 | source = "registry+https://github.com/rust-lang/crates.io-index" 2277 | checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 2278 | 2279 | [[package]] 2280 | name = "openssl-probe" 2281 | version = "0.1.6" 2282 | source = "registry+https://github.com/rust-lang/crates.io-index" 2283 | checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 2284 | 2285 | [[package]] 2286 | name = "overload" 2287 | version = "0.1.1" 2288 | source = "registry+https://github.com/rust-lang/crates.io-index" 2289 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 2290 | 2291 | [[package]] 2292 | name = "parking" 2293 | version = "2.2.1" 2294 | source = "registry+https://github.com/rust-lang/crates.io-index" 2295 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2296 | 2297 | [[package]] 2298 | name = "parking_lot" 2299 | version = "0.12.3" 2300 | source = "registry+https://github.com/rust-lang/crates.io-index" 2301 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 2302 | dependencies = [ 2303 | "lock_api", 2304 | "parking_lot_core", 2305 | ] 2306 | 2307 | [[package]] 2308 | name = "parking_lot_core" 2309 | version = "0.9.10" 2310 | source = "registry+https://github.com/rust-lang/crates.io-index" 2311 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 2312 | dependencies = [ 2313 | "cfg-if", 2314 | "libc", 2315 | "redox_syscall", 2316 | "smallvec", 2317 | "windows-targets 0.52.6", 2318 | ] 2319 | 2320 | [[package]] 2321 | name = "paste" 2322 | version = "1.0.15" 2323 | source = "registry+https://github.com/rust-lang/crates.io-index" 2324 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2325 | 2326 | [[package]] 2327 | name = "pem" 2328 | version = "3.0.4" 2329 | source = "registry+https://github.com/rust-lang/crates.io-index" 2330 | checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" 2331 | dependencies = [ 2332 | "base64", 2333 | "serde", 2334 | ] 2335 | 2336 | [[package]] 2337 | name = "percent-encoding" 2338 | version = "2.3.1" 2339 | source = "registry+https://github.com/rust-lang/crates.io-index" 2340 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2341 | 2342 | [[package]] 2343 | name = "pest" 2344 | version = "2.7.15" 2345 | source = "registry+https://github.com/rust-lang/crates.io-index" 2346 | checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" 2347 | dependencies = [ 2348 | "memchr", 2349 | "thiserror 2.0.11", 2350 | "ucd-trie", 2351 | ] 2352 | 2353 | [[package]] 2354 | name = "pest_derive" 2355 | version = "2.7.15" 2356 | source = "registry+https://github.com/rust-lang/crates.io-index" 2357 | checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" 2358 | dependencies = [ 2359 | "pest", 2360 | "pest_generator", 2361 | ] 2362 | 2363 | [[package]] 2364 | name = "pest_generator" 2365 | version = "2.7.15" 2366 | source = "registry+https://github.com/rust-lang/crates.io-index" 2367 | checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" 2368 | dependencies = [ 2369 | "pest", 2370 | "pest_meta", 2371 | "proc-macro2", 2372 | "quote", 2373 | "syn 2.0.96", 2374 | ] 2375 | 2376 | [[package]] 2377 | name = "pest_meta" 2378 | version = "2.7.15" 2379 | source = "registry+https://github.com/rust-lang/crates.io-index" 2380 | checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" 2381 | dependencies = [ 2382 | "once_cell", 2383 | "pest", 2384 | "sha2", 2385 | ] 2386 | 2387 | [[package]] 2388 | name = "pin-project" 2389 | version = "1.1.8" 2390 | source = "registry+https://github.com/rust-lang/crates.io-index" 2391 | checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" 2392 | dependencies = [ 2393 | "pin-project-internal", 2394 | ] 2395 | 2396 | [[package]] 2397 | name = "pin-project-internal" 2398 | version = "1.1.8" 2399 | source = "registry+https://github.com/rust-lang/crates.io-index" 2400 | checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" 2401 | dependencies = [ 2402 | "proc-macro2", 2403 | "quote", 2404 | "syn 2.0.96", 2405 | ] 2406 | 2407 | [[package]] 2408 | name = "pin-project-lite" 2409 | version = "0.2.16" 2410 | source = "registry+https://github.com/rust-lang/crates.io-index" 2411 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2412 | 2413 | [[package]] 2414 | name = "pin-utils" 2415 | version = "0.1.0" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2418 | 2419 | [[package]] 2420 | name = "pkarr" 2421 | version = "2.3.1" 2422 | source = "registry+https://github.com/rust-lang/crates.io-index" 2423 | checksum = "92eff194c72f00f3076855b413ad2d940e3a6e307fa697e5c7733e738341aed4" 2424 | dependencies = [ 2425 | "bytes", 2426 | "document-features", 2427 | "dyn-clone", 2428 | "ed25519-dalek", 2429 | "flume", 2430 | "futures", 2431 | "js-sys", 2432 | "lru", 2433 | "mainline", 2434 | "self_cell", 2435 | "simple-dns", 2436 | "thiserror 2.0.11", 2437 | "tracing", 2438 | "ureq", 2439 | "wasm-bindgen", 2440 | "wasm-bindgen-futures", 2441 | "web-sys", 2442 | "z32", 2443 | ] 2444 | 2445 | [[package]] 2446 | name = "pkcs8" 2447 | version = "0.10.2" 2448 | source = "registry+https://github.com/rust-lang/crates.io-index" 2449 | checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 2450 | dependencies = [ 2451 | "der", 2452 | "spki", 2453 | ] 2454 | 2455 | [[package]] 2456 | name = "pnet_base" 2457 | version = "0.34.0" 2458 | source = "registry+https://github.com/rust-lang/crates.io-index" 2459 | checksum = "fe4cf6fb3ab38b68d01ab2aea03ed3d1132b4868fa4e06285f29f16da01c5f4c" 2460 | dependencies = [ 2461 | "no-std-net", 2462 | ] 2463 | 2464 | [[package]] 2465 | name = "pnet_macros" 2466 | version = "0.34.0" 2467 | source = "registry+https://github.com/rust-lang/crates.io-index" 2468 | checksum = "688b17499eee04a0408aca0aa5cba5fc86401d7216de8a63fdf7a4c227871804" 2469 | dependencies = [ 2470 | "proc-macro2", 2471 | "quote", 2472 | "regex", 2473 | "syn 2.0.96", 2474 | ] 2475 | 2476 | [[package]] 2477 | name = "pnet_macros_support" 2478 | version = "0.34.0" 2479 | source = "registry+https://github.com/rust-lang/crates.io-index" 2480 | checksum = "eea925b72f4bd37f8eab0f221bbe4c78b63498350c983ffa9dd4bcde7e030f56" 2481 | dependencies = [ 2482 | "pnet_base", 2483 | ] 2484 | 2485 | [[package]] 2486 | name = "pnet_packet" 2487 | version = "0.34.0" 2488 | source = "registry+https://github.com/rust-lang/crates.io-index" 2489 | checksum = "a9a005825396b7fe7a38a8e288dbc342d5034dac80c15212436424fef8ea90ba" 2490 | dependencies = [ 2491 | "glob", 2492 | "pnet_base", 2493 | "pnet_macros", 2494 | "pnet_macros_support", 2495 | ] 2496 | 2497 | [[package]] 2498 | name = "poly1305" 2499 | version = "0.8.0" 2500 | source = "registry+https://github.com/rust-lang/crates.io-index" 2501 | checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" 2502 | dependencies = [ 2503 | "cpufeatures", 2504 | "opaque-debug", 2505 | "universal-hash", 2506 | ] 2507 | 2508 | [[package]] 2509 | name = "portable-atomic" 2510 | version = "1.10.0" 2511 | source = "registry+https://github.com/rust-lang/crates.io-index" 2512 | checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" 2513 | 2514 | [[package]] 2515 | name = "portmapper" 2516 | version = "0.3.1" 2517 | source = "registry+https://github.com/rust-lang/crates.io-index" 2518 | checksum = "5469b29e6ce2a27bfc9382720b5f0768993afec9e53b133d8248c8b09406156a" 2519 | dependencies = [ 2520 | "anyhow", 2521 | "base64", 2522 | "bytes", 2523 | "derive_more", 2524 | "futures-lite", 2525 | "futures-util", 2526 | "igd-next", 2527 | "iroh-metrics", 2528 | "libc", 2529 | "netwatch", 2530 | "num_enum", 2531 | "rand", 2532 | "serde", 2533 | "smallvec", 2534 | "socket2", 2535 | "thiserror 2.0.11", 2536 | "time", 2537 | "tokio", 2538 | "tokio-util", 2539 | "tracing", 2540 | "url", 2541 | ] 2542 | 2543 | [[package]] 2544 | name = "postcard" 2545 | version = "1.1.1" 2546 | source = "registry+https://github.com/rust-lang/crates.io-index" 2547 | checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" 2548 | dependencies = [ 2549 | "cobs", 2550 | "embedded-io 0.4.0", 2551 | "embedded-io 0.6.1", 2552 | "postcard-derive", 2553 | "serde", 2554 | ] 2555 | 2556 | [[package]] 2557 | name = "postcard-derive" 2558 | version = "0.1.2" 2559 | source = "registry+https://github.com/rust-lang/crates.io-index" 2560 | checksum = "0239fa9c1d225d4b7eb69925c25c5e082307a141e470573fbbe3a817ce6a7a37" 2561 | dependencies = [ 2562 | "proc-macro2", 2563 | "quote", 2564 | "syn 1.0.109", 2565 | ] 2566 | 2567 | [[package]] 2568 | name = "powerfmt" 2569 | version = "0.2.0" 2570 | source = "registry+https://github.com/rust-lang/crates.io-index" 2571 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2572 | 2573 | [[package]] 2574 | name = "ppv-lite86" 2575 | version = "0.2.20" 2576 | source = "registry+https://github.com/rust-lang/crates.io-index" 2577 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 2578 | dependencies = [ 2579 | "zerocopy", 2580 | ] 2581 | 2582 | [[package]] 2583 | name = "precis-core" 2584 | version = "0.1.10" 2585 | source = "registry+https://github.com/rust-lang/crates.io-index" 2586 | checksum = "25a414cabc93f5f45d53463e73b3d89d3c5c0dc4a34dbf6901f0c6358f017203" 2587 | dependencies = [ 2588 | "precis-tools", 2589 | "ucd-parse", 2590 | "unicode-normalization", 2591 | ] 2592 | 2593 | [[package]] 2594 | name = "precis-profiles" 2595 | version = "0.1.11" 2596 | source = "registry+https://github.com/rust-lang/crates.io-index" 2597 | checksum = "f58e2841ef58164e2626464d4fde67fa301d5e2c78a10300c1756312a03b169f" 2598 | dependencies = [ 2599 | "lazy_static", 2600 | "precis-core", 2601 | "precis-tools", 2602 | "unicode-normalization", 2603 | ] 2604 | 2605 | [[package]] 2606 | name = "precis-tools" 2607 | version = "0.1.8" 2608 | source = "registry+https://github.com/rust-lang/crates.io-index" 2609 | checksum = "016da884bc4c2c4670211641abef402d15fa2b06c6e9088ff270dac93675aee2" 2610 | dependencies = [ 2611 | "lazy_static", 2612 | "regex", 2613 | "ucd-parse", 2614 | ] 2615 | 2616 | [[package]] 2617 | name = "proc-macro-crate" 2618 | version = "3.2.0" 2619 | source = "registry+https://github.com/rust-lang/crates.io-index" 2620 | checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" 2621 | dependencies = [ 2622 | "toml_edit", 2623 | ] 2624 | 2625 | [[package]] 2626 | name = "proc-macro2" 2627 | version = "1.0.93" 2628 | source = "registry+https://github.com/rust-lang/crates.io-index" 2629 | checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" 2630 | dependencies = [ 2631 | "unicode-ident", 2632 | ] 2633 | 2634 | [[package]] 2635 | name = "prometheus-client" 2636 | version = "0.22.3" 2637 | source = "registry+https://github.com/rust-lang/crates.io-index" 2638 | checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" 2639 | dependencies = [ 2640 | "dtoa", 2641 | "itoa", 2642 | "parking_lot", 2643 | "prometheus-client-derive-encode", 2644 | ] 2645 | 2646 | [[package]] 2647 | name = "prometheus-client-derive-encode" 2648 | version = "0.4.2" 2649 | source = "registry+https://github.com/rust-lang/crates.io-index" 2650 | checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" 2651 | dependencies = [ 2652 | "proc-macro2", 2653 | "quote", 2654 | "syn 2.0.96", 2655 | ] 2656 | 2657 | [[package]] 2658 | name = "quanta" 2659 | version = "0.12.5" 2660 | source = "registry+https://github.com/rust-lang/crates.io-index" 2661 | checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" 2662 | dependencies = [ 2663 | "crossbeam-utils", 2664 | "libc", 2665 | "once_cell", 2666 | "raw-cpuid", 2667 | "wasi", 2668 | "web-sys", 2669 | "winapi", 2670 | ] 2671 | 2672 | [[package]] 2673 | name = "quick-error" 2674 | version = "1.2.3" 2675 | source = "registry+https://github.com/rust-lang/crates.io-index" 2676 | checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 2677 | 2678 | [[package]] 2679 | name = "quinn" 2680 | version = "0.11.6" 2681 | source = "registry+https://github.com/rust-lang/crates.io-index" 2682 | checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" 2683 | dependencies = [ 2684 | "bytes", 2685 | "pin-project-lite", 2686 | "quinn-proto", 2687 | "quinn-udp", 2688 | "rustc-hash", 2689 | "rustls", 2690 | "socket2", 2691 | "thiserror 2.0.11", 2692 | "tokio", 2693 | "tracing", 2694 | ] 2695 | 2696 | [[package]] 2697 | name = "quinn-proto" 2698 | version = "0.11.9" 2699 | source = "registry+https://github.com/rust-lang/crates.io-index" 2700 | checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" 2701 | dependencies = [ 2702 | "bytes", 2703 | "getrandom", 2704 | "rand", 2705 | "ring", 2706 | "rustc-hash", 2707 | "rustls", 2708 | "rustls-pki-types", 2709 | "slab", 2710 | "thiserror 2.0.11", 2711 | "tinyvec", 2712 | "tracing", 2713 | "web-time", 2714 | ] 2715 | 2716 | [[package]] 2717 | name = "quinn-udp" 2718 | version = "0.5.9" 2719 | source = "registry+https://github.com/rust-lang/crates.io-index" 2720 | checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" 2721 | dependencies = [ 2722 | "cfg_aliases", 2723 | "libc", 2724 | "once_cell", 2725 | "socket2", 2726 | "tracing", 2727 | "windows-sys 0.59.0", 2728 | ] 2729 | 2730 | [[package]] 2731 | name = "quote" 2732 | version = "1.0.38" 2733 | source = "registry+https://github.com/rust-lang/crates.io-index" 2734 | checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" 2735 | dependencies = [ 2736 | "proc-macro2", 2737 | ] 2738 | 2739 | [[package]] 2740 | name = "quoted-string-parser" 2741 | version = "0.1.0" 2742 | source = "registry+https://github.com/rust-lang/crates.io-index" 2743 | checksum = "0dc75379cdb451d001f1cb667a9f74e8b355e9df84cc5193513cbe62b96fc5e9" 2744 | dependencies = [ 2745 | "pest", 2746 | "pest_derive", 2747 | ] 2748 | 2749 | [[package]] 2750 | name = "rand" 2751 | version = "0.8.5" 2752 | source = "registry+https://github.com/rust-lang/crates.io-index" 2753 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2754 | dependencies = [ 2755 | "libc", 2756 | "rand_chacha", 2757 | "rand_core", 2758 | ] 2759 | 2760 | [[package]] 2761 | name = "rand_chacha" 2762 | version = "0.3.1" 2763 | source = "registry+https://github.com/rust-lang/crates.io-index" 2764 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2765 | dependencies = [ 2766 | "ppv-lite86", 2767 | "rand_core", 2768 | ] 2769 | 2770 | [[package]] 2771 | name = "rand_core" 2772 | version = "0.6.4" 2773 | source = "registry+https://github.com/rust-lang/crates.io-index" 2774 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2775 | dependencies = [ 2776 | "getrandom", 2777 | ] 2778 | 2779 | [[package]] 2780 | name = "raw-cpuid" 2781 | version = "11.3.0" 2782 | source = "registry+https://github.com/rust-lang/crates.io-index" 2783 | checksum = "c6928fa44c097620b706542d428957635951bade7143269085389d42c8a4927e" 2784 | dependencies = [ 2785 | "bitflags 2.8.0", 2786 | ] 2787 | 2788 | [[package]] 2789 | name = "rcgen" 2790 | version = "0.13.2" 2791 | source = "registry+https://github.com/rust-lang/crates.io-index" 2792 | checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" 2793 | dependencies = [ 2794 | "pem", 2795 | "ring", 2796 | "rustls-pki-types", 2797 | "time", 2798 | "yasna", 2799 | ] 2800 | 2801 | [[package]] 2802 | name = "redox_syscall" 2803 | version = "0.5.8" 2804 | source = "registry+https://github.com/rust-lang/crates.io-index" 2805 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 2806 | dependencies = [ 2807 | "bitflags 2.8.0", 2808 | ] 2809 | 2810 | [[package]] 2811 | name = "regex" 2812 | version = "1.11.1" 2813 | source = "registry+https://github.com/rust-lang/crates.io-index" 2814 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 2815 | dependencies = [ 2816 | "aho-corasick", 2817 | "memchr", 2818 | "regex-automata 0.4.9", 2819 | "regex-syntax 0.8.5", 2820 | ] 2821 | 2822 | [[package]] 2823 | name = "regex-automata" 2824 | version = "0.1.10" 2825 | source = "registry+https://github.com/rust-lang/crates.io-index" 2826 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 2827 | dependencies = [ 2828 | "regex-syntax 0.6.29", 2829 | ] 2830 | 2831 | [[package]] 2832 | name = "regex-automata" 2833 | version = "0.4.9" 2834 | source = "registry+https://github.com/rust-lang/crates.io-index" 2835 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 2836 | dependencies = [ 2837 | "aho-corasick", 2838 | "memchr", 2839 | "regex-syntax 0.8.5", 2840 | ] 2841 | 2842 | [[package]] 2843 | name = "regex-lite" 2844 | version = "0.1.6" 2845 | source = "registry+https://github.com/rust-lang/crates.io-index" 2846 | checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" 2847 | 2848 | [[package]] 2849 | name = "regex-syntax" 2850 | version = "0.6.29" 2851 | source = "registry+https://github.com/rust-lang/crates.io-index" 2852 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 2853 | 2854 | [[package]] 2855 | name = "regex-syntax" 2856 | version = "0.8.5" 2857 | source = "registry+https://github.com/rust-lang/crates.io-index" 2858 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 2859 | 2860 | [[package]] 2861 | name = "reqwest" 2862 | version = "0.12.12" 2863 | source = "registry+https://github.com/rust-lang/crates.io-index" 2864 | checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" 2865 | dependencies = [ 2866 | "base64", 2867 | "bytes", 2868 | "futures-core", 2869 | "futures-util", 2870 | "http 1.2.0", 2871 | "http-body", 2872 | "http-body-util", 2873 | "hyper", 2874 | "hyper-rustls", 2875 | "hyper-util", 2876 | "ipnet", 2877 | "js-sys", 2878 | "log", 2879 | "mime", 2880 | "once_cell", 2881 | "percent-encoding", 2882 | "pin-project-lite", 2883 | "quinn", 2884 | "rustls", 2885 | "rustls-pemfile", 2886 | "rustls-pki-types", 2887 | "serde", 2888 | "serde_json", 2889 | "serde_urlencoded", 2890 | "sync_wrapper", 2891 | "tokio", 2892 | "tokio-rustls", 2893 | "tower", 2894 | "tower-service", 2895 | "url", 2896 | "wasm-bindgen", 2897 | "wasm-bindgen-futures", 2898 | "web-sys", 2899 | "webpki-roots", 2900 | "windows-registry", 2901 | ] 2902 | 2903 | [[package]] 2904 | name = "resolv-conf" 2905 | version = "0.7.0" 2906 | source = "registry+https://github.com/rust-lang/crates.io-index" 2907 | checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" 2908 | dependencies = [ 2909 | "hostname", 2910 | "quick-error", 2911 | ] 2912 | 2913 | [[package]] 2914 | name = "ring" 2915 | version = "0.17.8" 2916 | source = "registry+https://github.com/rust-lang/crates.io-index" 2917 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 2918 | dependencies = [ 2919 | "cc", 2920 | "cfg-if", 2921 | "getrandom", 2922 | "libc", 2923 | "spin", 2924 | "untrusted", 2925 | "windows-sys 0.52.0", 2926 | ] 2927 | 2928 | [[package]] 2929 | name = "rtnetlink" 2930 | version = "0.13.1" 2931 | source = "registry+https://github.com/rust-lang/crates.io-index" 2932 | checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" 2933 | dependencies = [ 2934 | "futures", 2935 | "log", 2936 | "netlink-packet-core", 2937 | "netlink-packet-route 0.17.1", 2938 | "netlink-packet-utils", 2939 | "netlink-proto", 2940 | "netlink-sys", 2941 | "nix 0.26.4", 2942 | "thiserror 1.0.69", 2943 | "tokio", 2944 | ] 2945 | 2946 | [[package]] 2947 | name = "rtnetlink" 2948 | version = "0.14.1" 2949 | source = "registry+https://github.com/rust-lang/crates.io-index" 2950 | checksum = "b684475344d8df1859ddb2d395dd3dac4f8f3422a1aa0725993cb375fc5caba5" 2951 | dependencies = [ 2952 | "futures", 2953 | "log", 2954 | "netlink-packet-core", 2955 | "netlink-packet-route 0.19.0", 2956 | "netlink-packet-utils", 2957 | "netlink-proto", 2958 | "netlink-sys", 2959 | "nix 0.27.1", 2960 | "thiserror 1.0.69", 2961 | "tokio", 2962 | ] 2963 | 2964 | [[package]] 2965 | name = "rustc-demangle" 2966 | version = "0.1.24" 2967 | source = "registry+https://github.com/rust-lang/crates.io-index" 2968 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 2969 | 2970 | [[package]] 2971 | name = "rustc-hash" 2972 | version = "2.1.0" 2973 | source = "registry+https://github.com/rust-lang/crates.io-index" 2974 | checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" 2975 | 2976 | [[package]] 2977 | name = "rustc_version" 2978 | version = "0.4.1" 2979 | source = "registry+https://github.com/rust-lang/crates.io-index" 2980 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2981 | dependencies = [ 2982 | "semver", 2983 | ] 2984 | 2985 | [[package]] 2986 | name = "rusticata-macros" 2987 | version = "4.1.0" 2988 | source = "registry+https://github.com/rust-lang/crates.io-index" 2989 | checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" 2990 | dependencies = [ 2991 | "nom", 2992 | ] 2993 | 2994 | [[package]] 2995 | name = "rustls" 2996 | version = "0.23.21" 2997 | source = "registry+https://github.com/rust-lang/crates.io-index" 2998 | checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" 2999 | dependencies = [ 3000 | "log", 3001 | "once_cell", 3002 | "ring", 3003 | "rustls-pki-types", 3004 | "rustls-webpki", 3005 | "subtle", 3006 | "zeroize", 3007 | ] 3008 | 3009 | [[package]] 3010 | name = "rustls-native-certs" 3011 | version = "0.7.3" 3012 | source = "registry+https://github.com/rust-lang/crates.io-index" 3013 | checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" 3014 | dependencies = [ 3015 | "openssl-probe", 3016 | "rustls-pemfile", 3017 | "rustls-pki-types", 3018 | "schannel", 3019 | "security-framework", 3020 | ] 3021 | 3022 | [[package]] 3023 | name = "rustls-pemfile" 3024 | version = "2.2.0" 3025 | source = "registry+https://github.com/rust-lang/crates.io-index" 3026 | checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" 3027 | dependencies = [ 3028 | "rustls-pki-types", 3029 | ] 3030 | 3031 | [[package]] 3032 | name = "rustls-pki-types" 3033 | version = "1.11.0" 3034 | source = "registry+https://github.com/rust-lang/crates.io-index" 3035 | checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" 3036 | dependencies = [ 3037 | "web-time", 3038 | ] 3039 | 3040 | [[package]] 3041 | name = "rustls-platform-verifier" 3042 | version = "0.3.4" 3043 | source = "registry+https://github.com/rust-lang/crates.io-index" 3044 | checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" 3045 | dependencies = [ 3046 | "core-foundation", 3047 | "core-foundation-sys", 3048 | "jni", 3049 | "log", 3050 | "once_cell", 3051 | "rustls", 3052 | "rustls-native-certs", 3053 | "rustls-platform-verifier-android", 3054 | "rustls-webpki", 3055 | "security-framework", 3056 | "security-framework-sys", 3057 | "webpki-roots", 3058 | "winapi", 3059 | ] 3060 | 3061 | [[package]] 3062 | name = "rustls-platform-verifier-android" 3063 | version = "0.1.1" 3064 | source = "registry+https://github.com/rust-lang/crates.io-index" 3065 | checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" 3066 | 3067 | [[package]] 3068 | name = "rustls-webpki" 3069 | version = "0.102.8" 3070 | source = "registry+https://github.com/rust-lang/crates.io-index" 3071 | checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 3072 | dependencies = [ 3073 | "ring", 3074 | "rustls-pki-types", 3075 | "untrusted", 3076 | ] 3077 | 3078 | [[package]] 3079 | name = "rustversion" 3080 | version = "1.0.19" 3081 | source = "registry+https://github.com/rust-lang/crates.io-index" 3082 | checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" 3083 | 3084 | [[package]] 3085 | name = "ryu" 3086 | version = "1.0.18" 3087 | source = "registry+https://github.com/rust-lang/crates.io-index" 3088 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 3089 | 3090 | [[package]] 3091 | name = "salsa20" 3092 | version = "0.10.2" 3093 | source = "registry+https://github.com/rust-lang/crates.io-index" 3094 | checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" 3095 | dependencies = [ 3096 | "cipher", 3097 | ] 3098 | 3099 | [[package]] 3100 | name = "same-file" 3101 | version = "1.0.6" 3102 | source = "registry+https://github.com/rust-lang/crates.io-index" 3103 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 3104 | dependencies = [ 3105 | "winapi-util", 3106 | ] 3107 | 3108 | [[package]] 3109 | name = "schannel" 3110 | version = "0.1.27" 3111 | source = "registry+https://github.com/rust-lang/crates.io-index" 3112 | checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 3113 | dependencies = [ 3114 | "windows-sys 0.59.0", 3115 | ] 3116 | 3117 | [[package]] 3118 | name = "scoped-tls" 3119 | version = "1.0.1" 3120 | source = "registry+https://github.com/rust-lang/crates.io-index" 3121 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 3122 | 3123 | [[package]] 3124 | name = "scopeguard" 3125 | version = "1.2.0" 3126 | source = "registry+https://github.com/rust-lang/crates.io-index" 3127 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 3128 | 3129 | [[package]] 3130 | name = "security-framework" 3131 | version = "2.11.1" 3132 | source = "registry+https://github.com/rust-lang/crates.io-index" 3133 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 3134 | dependencies = [ 3135 | "bitflags 2.8.0", 3136 | "core-foundation", 3137 | "core-foundation-sys", 3138 | "libc", 3139 | "num-bigint", 3140 | "security-framework-sys", 3141 | ] 3142 | 3143 | [[package]] 3144 | name = "security-framework-sys" 3145 | version = "2.14.0" 3146 | source = "registry+https://github.com/rust-lang/crates.io-index" 3147 | checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 3148 | dependencies = [ 3149 | "core-foundation-sys", 3150 | "libc", 3151 | ] 3152 | 3153 | [[package]] 3154 | name = "self_cell" 3155 | version = "1.1.0" 3156 | source = "registry+https://github.com/rust-lang/crates.io-index" 3157 | checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" 3158 | 3159 | [[package]] 3160 | name = "semver" 3161 | version = "1.0.25" 3162 | source = "registry+https://github.com/rust-lang/crates.io-index" 3163 | checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" 3164 | 3165 | [[package]] 3166 | name = "serde" 3167 | version = "1.0.217" 3168 | source = "registry+https://github.com/rust-lang/crates.io-index" 3169 | checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" 3170 | dependencies = [ 3171 | "serde_derive", 3172 | ] 3173 | 3174 | [[package]] 3175 | name = "serde_bencode" 3176 | version = "0.2.4" 3177 | source = "registry+https://github.com/rust-lang/crates.io-index" 3178 | checksum = "a70dfc7b7438b99896e7f8992363ab8e2c4ba26aa5ec675d32d1c3c2c33d413e" 3179 | dependencies = [ 3180 | "serde", 3181 | "serde_bytes", 3182 | ] 3183 | 3184 | [[package]] 3185 | name = "serde_bytes" 3186 | version = "0.11.15" 3187 | source = "registry+https://github.com/rust-lang/crates.io-index" 3188 | checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" 3189 | dependencies = [ 3190 | "serde", 3191 | ] 3192 | 3193 | [[package]] 3194 | name = "serde_derive" 3195 | version = "1.0.217" 3196 | source = "registry+https://github.com/rust-lang/crates.io-index" 3197 | checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" 3198 | dependencies = [ 3199 | "proc-macro2", 3200 | "quote", 3201 | "syn 2.0.96", 3202 | ] 3203 | 3204 | [[package]] 3205 | name = "serde_json" 3206 | version = "1.0.137" 3207 | source = "registry+https://github.com/rust-lang/crates.io-index" 3208 | checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b" 3209 | dependencies = [ 3210 | "itoa", 3211 | "memchr", 3212 | "ryu", 3213 | "serde", 3214 | ] 3215 | 3216 | [[package]] 3217 | name = "serde_urlencoded" 3218 | version = "0.7.1" 3219 | source = "registry+https://github.com/rust-lang/crates.io-index" 3220 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 3221 | dependencies = [ 3222 | "form_urlencoded", 3223 | "itoa", 3224 | "ryu", 3225 | "serde", 3226 | ] 3227 | 3228 | [[package]] 3229 | name = "serdect" 3230 | version = "0.2.0" 3231 | source = "registry+https://github.com/rust-lang/crates.io-index" 3232 | checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" 3233 | dependencies = [ 3234 | "base16ct", 3235 | "serde", 3236 | ] 3237 | 3238 | [[package]] 3239 | name = "sha1" 3240 | version = "0.10.6" 3241 | source = "registry+https://github.com/rust-lang/crates.io-index" 3242 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 3243 | dependencies = [ 3244 | "cfg-if", 3245 | "cpufeatures", 3246 | "digest", 3247 | ] 3248 | 3249 | [[package]] 3250 | name = "sha1_smol" 3251 | version = "1.0.1" 3252 | source = "registry+https://github.com/rust-lang/crates.io-index" 3253 | checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" 3254 | 3255 | [[package]] 3256 | name = "sha2" 3257 | version = "0.10.8" 3258 | source = "registry+https://github.com/rust-lang/crates.io-index" 3259 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 3260 | dependencies = [ 3261 | "cfg-if", 3262 | "cpufeatures", 3263 | "digest", 3264 | ] 3265 | 3266 | [[package]] 3267 | name = "sharded-slab" 3268 | version = "0.1.7" 3269 | source = "registry+https://github.com/rust-lang/crates.io-index" 3270 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 3271 | dependencies = [ 3272 | "lazy_static", 3273 | ] 3274 | 3275 | [[package]] 3276 | name = "shlex" 3277 | version = "1.3.0" 3278 | source = "registry+https://github.com/rust-lang/crates.io-index" 3279 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 3280 | 3281 | [[package]] 3282 | name = "signal-hook-registry" 3283 | version = "1.4.2" 3284 | source = "registry+https://github.com/rust-lang/crates.io-index" 3285 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 3286 | dependencies = [ 3287 | "libc", 3288 | ] 3289 | 3290 | [[package]] 3291 | name = "signature" 3292 | version = "2.2.0" 3293 | source = "registry+https://github.com/rust-lang/crates.io-index" 3294 | checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 3295 | dependencies = [ 3296 | "rand_core", 3297 | ] 3298 | 3299 | [[package]] 3300 | name = "simple-dns" 3301 | version = "0.9.3" 3302 | source = "registry+https://github.com/rust-lang/crates.io-index" 3303 | checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" 3304 | dependencies = [ 3305 | "bitflags 2.8.0", 3306 | ] 3307 | 3308 | [[package]] 3309 | name = "slab" 3310 | version = "0.4.9" 3311 | source = "registry+https://github.com/rust-lang/crates.io-index" 3312 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 3313 | dependencies = [ 3314 | "autocfg", 3315 | ] 3316 | 3317 | [[package]] 3318 | name = "smallvec" 3319 | version = "1.13.2" 3320 | source = "registry+https://github.com/rust-lang/crates.io-index" 3321 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 3322 | 3323 | [[package]] 3324 | name = "socket2" 3325 | version = "0.5.8" 3326 | source = "registry+https://github.com/rust-lang/crates.io-index" 3327 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" 3328 | dependencies = [ 3329 | "libc", 3330 | "windows-sys 0.52.0", 3331 | ] 3332 | 3333 | [[package]] 3334 | name = "spin" 3335 | version = "0.9.8" 3336 | source = "registry+https://github.com/rust-lang/crates.io-index" 3337 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3338 | dependencies = [ 3339 | "lock_api", 3340 | ] 3341 | 3342 | [[package]] 3343 | name = "spinning_top" 3344 | version = "0.3.0" 3345 | source = "registry+https://github.com/rust-lang/crates.io-index" 3346 | checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" 3347 | dependencies = [ 3348 | "lock_api", 3349 | ] 3350 | 3351 | [[package]] 3352 | name = "spki" 3353 | version = "0.7.3" 3354 | source = "registry+https://github.com/rust-lang/crates.io-index" 3355 | checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 3356 | dependencies = [ 3357 | "base64ct", 3358 | "der", 3359 | ] 3360 | 3361 | [[package]] 3362 | name = "stable_deref_trait" 3363 | version = "1.2.0" 3364 | source = "registry+https://github.com/rust-lang/crates.io-index" 3365 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 3366 | 3367 | [[package]] 3368 | name = "strsim" 3369 | version = "0.11.1" 3370 | source = "registry+https://github.com/rust-lang/crates.io-index" 3371 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 3372 | 3373 | [[package]] 3374 | name = "struct_iterable" 3375 | version = "0.1.1" 3376 | source = "registry+https://github.com/rust-lang/crates.io-index" 3377 | checksum = "849a064c6470a650b72e41fa6c057879b68f804d113af92900f27574828e7712" 3378 | dependencies = [ 3379 | "struct_iterable_derive", 3380 | "struct_iterable_internal", 3381 | ] 3382 | 3383 | [[package]] 3384 | name = "struct_iterable_derive" 3385 | version = "0.1.0" 3386 | source = "registry+https://github.com/rust-lang/crates.io-index" 3387 | checksum = "8bb939ce88a43ea4e9d012f2f6b4cc789deb2db9d47bad697952a85d6978662c" 3388 | dependencies = [ 3389 | "erased-serde", 3390 | "proc-macro2", 3391 | "quote", 3392 | "struct_iterable_internal", 3393 | "syn 2.0.96", 3394 | ] 3395 | 3396 | [[package]] 3397 | name = "struct_iterable_internal" 3398 | version = "0.1.1" 3399 | source = "registry+https://github.com/rust-lang/crates.io-index" 3400 | checksum = "e9426b2a0c03e6cc2ea8dbc0168dbbf943f88755e409fb91bcb8f6a268305f4a" 3401 | 3402 | [[package]] 3403 | name = "strum" 3404 | version = "0.26.3" 3405 | source = "registry+https://github.com/rust-lang/crates.io-index" 3406 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 3407 | dependencies = [ 3408 | "strum_macros", 3409 | ] 3410 | 3411 | [[package]] 3412 | name = "strum_macros" 3413 | version = "0.26.4" 3414 | source = "registry+https://github.com/rust-lang/crates.io-index" 3415 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 3416 | dependencies = [ 3417 | "heck", 3418 | "proc-macro2", 3419 | "quote", 3420 | "rustversion", 3421 | "syn 2.0.96", 3422 | ] 3423 | 3424 | [[package]] 3425 | name = "stun-rs" 3426 | version = "0.1.9" 3427 | source = "registry+https://github.com/rust-lang/crates.io-index" 3428 | checksum = "b79cc624c9a747353810310af44f1f03f71eb4561284a894acc0396e6d0de76e" 3429 | dependencies = [ 3430 | "base64", 3431 | "bounded-integer", 3432 | "byteorder", 3433 | "crc", 3434 | "enumflags2", 3435 | "fallible-iterator", 3436 | "hmac-sha1", 3437 | "hmac-sha256", 3438 | "hostname-validator", 3439 | "lazy_static", 3440 | "md5", 3441 | "paste", 3442 | "precis-core", 3443 | "precis-profiles", 3444 | "quoted-string-parser", 3445 | "rand", 3446 | ] 3447 | 3448 | [[package]] 3449 | name = "subtle" 3450 | version = "2.6.1" 3451 | source = "registry+https://github.com/rust-lang/crates.io-index" 3452 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 3453 | 3454 | [[package]] 3455 | name = "surge-ping" 3456 | version = "0.8.1" 3457 | source = "registry+https://github.com/rust-lang/crates.io-index" 3458 | checksum = "efbf95ce4c7c5b311d2ce3f088af2b93edef0f09727fa50fbe03c7a979afce77" 3459 | dependencies = [ 3460 | "hex", 3461 | "parking_lot", 3462 | "pnet_packet", 3463 | "rand", 3464 | "socket2", 3465 | "thiserror 1.0.69", 3466 | "tokio", 3467 | "tracing", 3468 | ] 3469 | 3470 | [[package]] 3471 | name = "syn" 3472 | version = "1.0.109" 3473 | source = "registry+https://github.com/rust-lang/crates.io-index" 3474 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 3475 | dependencies = [ 3476 | "proc-macro2", 3477 | "quote", 3478 | "unicode-ident", 3479 | ] 3480 | 3481 | [[package]] 3482 | name = "syn" 3483 | version = "2.0.96" 3484 | source = "registry+https://github.com/rust-lang/crates.io-index" 3485 | checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" 3486 | dependencies = [ 3487 | "proc-macro2", 3488 | "quote", 3489 | "unicode-ident", 3490 | ] 3491 | 3492 | [[package]] 3493 | name = "sync_wrapper" 3494 | version = "1.0.2" 3495 | source = "registry+https://github.com/rust-lang/crates.io-index" 3496 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 3497 | dependencies = [ 3498 | "futures-core", 3499 | ] 3500 | 3501 | [[package]] 3502 | name = "synstructure" 3503 | version = "0.13.1" 3504 | source = "registry+https://github.com/rust-lang/crates.io-index" 3505 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 3506 | dependencies = [ 3507 | "proc-macro2", 3508 | "quote", 3509 | "syn 2.0.96", 3510 | ] 3511 | 3512 | [[package]] 3513 | name = "system-configuration" 3514 | version = "0.6.1" 3515 | source = "registry+https://github.com/rust-lang/crates.io-index" 3516 | checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 3517 | dependencies = [ 3518 | "bitflags 2.8.0", 3519 | "core-foundation", 3520 | "system-configuration-sys", 3521 | ] 3522 | 3523 | [[package]] 3524 | name = "system-configuration-sys" 3525 | version = "0.6.0" 3526 | source = "registry+https://github.com/rust-lang/crates.io-index" 3527 | checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 3528 | dependencies = [ 3529 | "core-foundation-sys", 3530 | "libc", 3531 | ] 3532 | 3533 | [[package]] 3534 | name = "tagptr" 3535 | version = "0.2.0" 3536 | source = "registry+https://github.com/rust-lang/crates.io-index" 3537 | checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 3538 | 3539 | [[package]] 3540 | name = "thiserror" 3541 | version = "1.0.69" 3542 | source = "registry+https://github.com/rust-lang/crates.io-index" 3543 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 3544 | dependencies = [ 3545 | "thiserror-impl 1.0.69", 3546 | ] 3547 | 3548 | [[package]] 3549 | name = "thiserror" 3550 | version = "2.0.11" 3551 | source = "registry+https://github.com/rust-lang/crates.io-index" 3552 | checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" 3553 | dependencies = [ 3554 | "thiserror-impl 2.0.11", 3555 | ] 3556 | 3557 | [[package]] 3558 | name = "thiserror-impl" 3559 | version = "1.0.69" 3560 | source = "registry+https://github.com/rust-lang/crates.io-index" 3561 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 3562 | dependencies = [ 3563 | "proc-macro2", 3564 | "quote", 3565 | "syn 2.0.96", 3566 | ] 3567 | 3568 | [[package]] 3569 | name = "thiserror-impl" 3570 | version = "2.0.11" 3571 | source = "registry+https://github.com/rust-lang/crates.io-index" 3572 | checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" 3573 | dependencies = [ 3574 | "proc-macro2", 3575 | "quote", 3576 | "syn 2.0.96", 3577 | ] 3578 | 3579 | [[package]] 3580 | name = "thread_local" 3581 | version = "1.1.8" 3582 | source = "registry+https://github.com/rust-lang/crates.io-index" 3583 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 3584 | dependencies = [ 3585 | "cfg-if", 3586 | "once_cell", 3587 | ] 3588 | 3589 | [[package]] 3590 | name = "time" 3591 | version = "0.3.37" 3592 | source = "registry+https://github.com/rust-lang/crates.io-index" 3593 | checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" 3594 | dependencies = [ 3595 | "deranged", 3596 | "itoa", 3597 | "num-conv", 3598 | "powerfmt", 3599 | "serde", 3600 | "time-core", 3601 | "time-macros", 3602 | ] 3603 | 3604 | [[package]] 3605 | name = "time-core" 3606 | version = "0.1.2" 3607 | source = "registry+https://github.com/rust-lang/crates.io-index" 3608 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 3609 | 3610 | [[package]] 3611 | name = "time-macros" 3612 | version = "0.2.19" 3613 | source = "registry+https://github.com/rust-lang/crates.io-index" 3614 | checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" 3615 | dependencies = [ 3616 | "num-conv", 3617 | "time-core", 3618 | ] 3619 | 3620 | [[package]] 3621 | name = "tinystr" 3622 | version = "0.7.6" 3623 | source = "registry+https://github.com/rust-lang/crates.io-index" 3624 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 3625 | dependencies = [ 3626 | "displaydoc", 3627 | "zerovec", 3628 | ] 3629 | 3630 | [[package]] 3631 | name = "tinyvec" 3632 | version = "1.8.1" 3633 | source = "registry+https://github.com/rust-lang/crates.io-index" 3634 | checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" 3635 | dependencies = [ 3636 | "tinyvec_macros", 3637 | ] 3638 | 3639 | [[package]] 3640 | name = "tinyvec_macros" 3641 | version = "0.1.1" 3642 | source = "registry+https://github.com/rust-lang/crates.io-index" 3643 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3644 | 3645 | [[package]] 3646 | name = "tokio" 3647 | version = "1.43.0" 3648 | source = "registry+https://github.com/rust-lang/crates.io-index" 3649 | checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" 3650 | dependencies = [ 3651 | "backtrace", 3652 | "bytes", 3653 | "libc", 3654 | "mio", 3655 | "pin-project-lite", 3656 | "signal-hook-registry", 3657 | "socket2", 3658 | "tokio-macros", 3659 | "windows-sys 0.52.0", 3660 | ] 3661 | 3662 | [[package]] 3663 | name = "tokio-macros" 3664 | version = "2.5.0" 3665 | source = "registry+https://github.com/rust-lang/crates.io-index" 3666 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 3667 | dependencies = [ 3668 | "proc-macro2", 3669 | "quote", 3670 | "syn 2.0.96", 3671 | ] 3672 | 3673 | [[package]] 3674 | name = "tokio-rustls" 3675 | version = "0.26.1" 3676 | source = "registry+https://github.com/rust-lang/crates.io-index" 3677 | checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" 3678 | dependencies = [ 3679 | "rustls", 3680 | "tokio", 3681 | ] 3682 | 3683 | [[package]] 3684 | name = "tokio-stream" 3685 | version = "0.1.17" 3686 | source = "registry+https://github.com/rust-lang/crates.io-index" 3687 | checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" 3688 | dependencies = [ 3689 | "futures-core", 3690 | "pin-project-lite", 3691 | "tokio", 3692 | ] 3693 | 3694 | [[package]] 3695 | name = "tokio-tungstenite" 3696 | version = "0.21.0" 3697 | source = "registry+https://github.com/rust-lang/crates.io-index" 3698 | checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" 3699 | dependencies = [ 3700 | "futures-util", 3701 | "log", 3702 | "tokio", 3703 | "tungstenite", 3704 | ] 3705 | 3706 | [[package]] 3707 | name = "tokio-tungstenite-wasm" 3708 | version = "0.3.1" 3709 | source = "registry+https://github.com/rust-lang/crates.io-index" 3710 | checksum = "8e57a65894797a018b28345fa298a00c450a574aa9671e50b18218a6292a55ac" 3711 | dependencies = [ 3712 | "futures-channel", 3713 | "futures-util", 3714 | "http 1.2.0", 3715 | "httparse", 3716 | "js-sys", 3717 | "thiserror 1.0.69", 3718 | "tokio", 3719 | "tokio-tungstenite", 3720 | "wasm-bindgen", 3721 | "web-sys", 3722 | ] 3723 | 3724 | [[package]] 3725 | name = "tokio-util" 3726 | version = "0.7.13" 3727 | source = "registry+https://github.com/rust-lang/crates.io-index" 3728 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" 3729 | dependencies = [ 3730 | "bytes", 3731 | "futures-core", 3732 | "futures-sink", 3733 | "futures-util", 3734 | "hashbrown 0.14.5", 3735 | "pin-project-lite", 3736 | "tokio", 3737 | ] 3738 | 3739 | [[package]] 3740 | name = "toml_datetime" 3741 | version = "0.6.8" 3742 | source = "registry+https://github.com/rust-lang/crates.io-index" 3743 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 3744 | 3745 | [[package]] 3746 | name = "toml_edit" 3747 | version = "0.22.22" 3748 | source = "registry+https://github.com/rust-lang/crates.io-index" 3749 | checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" 3750 | dependencies = [ 3751 | "indexmap", 3752 | "toml_datetime", 3753 | "winnow", 3754 | ] 3755 | 3756 | [[package]] 3757 | name = "tower" 3758 | version = "0.5.2" 3759 | source = "registry+https://github.com/rust-lang/crates.io-index" 3760 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 3761 | dependencies = [ 3762 | "futures-core", 3763 | "futures-util", 3764 | "pin-project-lite", 3765 | "sync_wrapper", 3766 | "tokio", 3767 | "tower-layer", 3768 | "tower-service", 3769 | ] 3770 | 3771 | [[package]] 3772 | name = "tower-layer" 3773 | version = "0.3.3" 3774 | source = "registry+https://github.com/rust-lang/crates.io-index" 3775 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 3776 | 3777 | [[package]] 3778 | name = "tower-service" 3779 | version = "0.3.3" 3780 | source = "registry+https://github.com/rust-lang/crates.io-index" 3781 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 3782 | 3783 | [[package]] 3784 | name = "tracing" 3785 | version = "0.1.41" 3786 | source = "registry+https://github.com/rust-lang/crates.io-index" 3787 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3788 | dependencies = [ 3789 | "log", 3790 | "pin-project-lite", 3791 | "tracing-attributes", 3792 | "tracing-core", 3793 | ] 3794 | 3795 | [[package]] 3796 | name = "tracing-attributes" 3797 | version = "0.1.28" 3798 | source = "registry+https://github.com/rust-lang/crates.io-index" 3799 | checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" 3800 | dependencies = [ 3801 | "proc-macro2", 3802 | "quote", 3803 | "syn 2.0.96", 3804 | ] 3805 | 3806 | [[package]] 3807 | name = "tracing-core" 3808 | version = "0.1.33" 3809 | source = "registry+https://github.com/rust-lang/crates.io-index" 3810 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 3811 | dependencies = [ 3812 | "once_cell", 3813 | "valuable", 3814 | ] 3815 | 3816 | [[package]] 3817 | name = "tracing-log" 3818 | version = "0.2.0" 3819 | source = "registry+https://github.com/rust-lang/crates.io-index" 3820 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3821 | dependencies = [ 3822 | "log", 3823 | "once_cell", 3824 | "tracing-core", 3825 | ] 3826 | 3827 | [[package]] 3828 | name = "tracing-subscriber" 3829 | version = "0.3.19" 3830 | source = "registry+https://github.com/rust-lang/crates.io-index" 3831 | checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 3832 | dependencies = [ 3833 | "matchers", 3834 | "nu-ansi-term", 3835 | "once_cell", 3836 | "regex", 3837 | "sharded-slab", 3838 | "smallvec", 3839 | "thread_local", 3840 | "tracing", 3841 | "tracing-core", 3842 | "tracing-log", 3843 | ] 3844 | 3845 | [[package]] 3846 | name = "try-lock" 3847 | version = "0.2.5" 3848 | source = "registry+https://github.com/rust-lang/crates.io-index" 3849 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3850 | 3851 | [[package]] 3852 | name = "tungstenite" 3853 | version = "0.21.0" 3854 | source = "registry+https://github.com/rust-lang/crates.io-index" 3855 | checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" 3856 | dependencies = [ 3857 | "byteorder", 3858 | "bytes", 3859 | "data-encoding", 3860 | "http 1.2.0", 3861 | "httparse", 3862 | "log", 3863 | "rand", 3864 | "sha1", 3865 | "thiserror 1.0.69", 3866 | "url", 3867 | "utf-8", 3868 | ] 3869 | 3870 | [[package]] 3871 | name = "typenum" 3872 | version = "1.17.0" 3873 | source = "registry+https://github.com/rust-lang/crates.io-index" 3874 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 3875 | 3876 | [[package]] 3877 | name = "ucd-parse" 3878 | version = "0.1.13" 3879 | source = "registry+https://github.com/rust-lang/crates.io-index" 3880 | checksum = "c06ff81122fcbf4df4c1660b15f7e3336058e7aec14437c9f85c6b31a0f279b9" 3881 | dependencies = [ 3882 | "regex-lite", 3883 | ] 3884 | 3885 | [[package]] 3886 | name = "ucd-trie" 3887 | version = "0.1.7" 3888 | source = "registry+https://github.com/rust-lang/crates.io-index" 3889 | checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 3890 | 3891 | [[package]] 3892 | name = "unicode-ident" 3893 | version = "1.0.15" 3894 | source = "registry+https://github.com/rust-lang/crates.io-index" 3895 | checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" 3896 | 3897 | [[package]] 3898 | name = "unicode-normalization" 3899 | version = "0.1.24" 3900 | source = "registry+https://github.com/rust-lang/crates.io-index" 3901 | checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 3902 | dependencies = [ 3903 | "tinyvec", 3904 | ] 3905 | 3906 | [[package]] 3907 | name = "unicode-xid" 3908 | version = "0.2.6" 3909 | source = "registry+https://github.com/rust-lang/crates.io-index" 3910 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3911 | 3912 | [[package]] 3913 | name = "universal-hash" 3914 | version = "0.5.1" 3915 | source = "registry+https://github.com/rust-lang/crates.io-index" 3916 | checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" 3917 | dependencies = [ 3918 | "crypto-common", 3919 | "subtle", 3920 | ] 3921 | 3922 | [[package]] 3923 | name = "untrusted" 3924 | version = "0.9.0" 3925 | source = "registry+https://github.com/rust-lang/crates.io-index" 3926 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3927 | 3928 | [[package]] 3929 | name = "ureq" 3930 | version = "2.12.1" 3931 | source = "registry+https://github.com/rust-lang/crates.io-index" 3932 | checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" 3933 | dependencies = [ 3934 | "base64", 3935 | "log", 3936 | "once_cell", 3937 | "rustls", 3938 | "rustls-pki-types", 3939 | "url", 3940 | "webpki-roots", 3941 | ] 3942 | 3943 | [[package]] 3944 | name = "url" 3945 | version = "2.5.4" 3946 | source = "registry+https://github.com/rust-lang/crates.io-index" 3947 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 3948 | dependencies = [ 3949 | "form_urlencoded", 3950 | "idna", 3951 | "percent-encoding", 3952 | "serde", 3953 | ] 3954 | 3955 | [[package]] 3956 | name = "users" 3957 | version = "0.11.0" 3958 | source = "registry+https://github.com/rust-lang/crates.io-index" 3959 | checksum = "24cc0f6d6f267b73e5a2cadf007ba8f9bc39c6a6f9666f8cf25ea809a153b032" 3960 | dependencies = [ 3961 | "libc", 3962 | "log", 3963 | ] 3964 | 3965 | [[package]] 3966 | name = "utf-8" 3967 | version = "0.7.6" 3968 | source = "registry+https://github.com/rust-lang/crates.io-index" 3969 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 3970 | 3971 | [[package]] 3972 | name = "utf16_iter" 3973 | version = "1.0.5" 3974 | source = "registry+https://github.com/rust-lang/crates.io-index" 3975 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 3976 | 3977 | [[package]] 3978 | name = "utf8_iter" 3979 | version = "1.0.4" 3980 | source = "registry+https://github.com/rust-lang/crates.io-index" 3981 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3982 | 3983 | [[package]] 3984 | name = "utf8parse" 3985 | version = "0.2.2" 3986 | source = "registry+https://github.com/rust-lang/crates.io-index" 3987 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3988 | 3989 | [[package]] 3990 | name = "uuid" 3991 | version = "1.12.1" 3992 | source = "registry+https://github.com/rust-lang/crates.io-index" 3993 | checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" 3994 | dependencies = [ 3995 | "getrandom", 3996 | ] 3997 | 3998 | [[package]] 3999 | name = "valuable" 4000 | version = "0.1.1" 4001 | source = "registry+https://github.com/rust-lang/crates.io-index" 4002 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 4003 | 4004 | [[package]] 4005 | name = "version_check" 4006 | version = "0.9.5" 4007 | source = "registry+https://github.com/rust-lang/crates.io-index" 4008 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 4009 | 4010 | [[package]] 4011 | name = "walkdir" 4012 | version = "2.5.0" 4013 | source = "registry+https://github.com/rust-lang/crates.io-index" 4014 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 4015 | dependencies = [ 4016 | "same-file", 4017 | "winapi-util", 4018 | ] 4019 | 4020 | [[package]] 4021 | name = "want" 4022 | version = "0.3.1" 4023 | source = "registry+https://github.com/rust-lang/crates.io-index" 4024 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 4025 | dependencies = [ 4026 | "try-lock", 4027 | ] 4028 | 4029 | [[package]] 4030 | name = "wasi" 4031 | version = "0.11.0+wasi-snapshot-preview1" 4032 | source = "registry+https://github.com/rust-lang/crates.io-index" 4033 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 4034 | 4035 | [[package]] 4036 | name = "wasm-bindgen" 4037 | version = "0.2.100" 4038 | source = "registry+https://github.com/rust-lang/crates.io-index" 4039 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 4040 | dependencies = [ 4041 | "cfg-if", 4042 | "once_cell", 4043 | "rustversion", 4044 | "wasm-bindgen-macro", 4045 | ] 4046 | 4047 | [[package]] 4048 | name = "wasm-bindgen-backend" 4049 | version = "0.2.100" 4050 | source = "registry+https://github.com/rust-lang/crates.io-index" 4051 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 4052 | dependencies = [ 4053 | "bumpalo", 4054 | "log", 4055 | "proc-macro2", 4056 | "quote", 4057 | "syn 2.0.96", 4058 | "wasm-bindgen-shared", 4059 | ] 4060 | 4061 | [[package]] 4062 | name = "wasm-bindgen-futures" 4063 | version = "0.4.50" 4064 | source = "registry+https://github.com/rust-lang/crates.io-index" 4065 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 4066 | dependencies = [ 4067 | "cfg-if", 4068 | "js-sys", 4069 | "once_cell", 4070 | "wasm-bindgen", 4071 | "web-sys", 4072 | ] 4073 | 4074 | [[package]] 4075 | name = "wasm-bindgen-macro" 4076 | version = "0.2.100" 4077 | source = "registry+https://github.com/rust-lang/crates.io-index" 4078 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 4079 | dependencies = [ 4080 | "quote", 4081 | "wasm-bindgen-macro-support", 4082 | ] 4083 | 4084 | [[package]] 4085 | name = "wasm-bindgen-macro-support" 4086 | version = "0.2.100" 4087 | source = "registry+https://github.com/rust-lang/crates.io-index" 4088 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 4089 | dependencies = [ 4090 | "proc-macro2", 4091 | "quote", 4092 | "syn 2.0.96", 4093 | "wasm-bindgen-backend", 4094 | "wasm-bindgen-shared", 4095 | ] 4096 | 4097 | [[package]] 4098 | name = "wasm-bindgen-shared" 4099 | version = "0.2.100" 4100 | source = "registry+https://github.com/rust-lang/crates.io-index" 4101 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 4102 | dependencies = [ 4103 | "unicode-ident", 4104 | ] 4105 | 4106 | [[package]] 4107 | name = "web-sys" 4108 | version = "0.3.77" 4109 | source = "registry+https://github.com/rust-lang/crates.io-index" 4110 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 4111 | dependencies = [ 4112 | "js-sys", 4113 | "wasm-bindgen", 4114 | ] 4115 | 4116 | [[package]] 4117 | name = "web-time" 4118 | version = "1.1.0" 4119 | source = "registry+https://github.com/rust-lang/crates.io-index" 4120 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 4121 | dependencies = [ 4122 | "js-sys", 4123 | "wasm-bindgen", 4124 | ] 4125 | 4126 | [[package]] 4127 | name = "webpki-roots" 4128 | version = "0.26.7" 4129 | source = "registry+https://github.com/rust-lang/crates.io-index" 4130 | checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" 4131 | dependencies = [ 4132 | "rustls-pki-types", 4133 | ] 4134 | 4135 | [[package]] 4136 | name = "widestring" 4137 | version = "1.1.0" 4138 | source = "registry+https://github.com/rust-lang/crates.io-index" 4139 | checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" 4140 | 4141 | [[package]] 4142 | name = "winapi" 4143 | version = "0.3.9" 4144 | source = "registry+https://github.com/rust-lang/crates.io-index" 4145 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 4146 | dependencies = [ 4147 | "winapi-i686-pc-windows-gnu", 4148 | "winapi-x86_64-pc-windows-gnu", 4149 | ] 4150 | 4151 | [[package]] 4152 | name = "winapi-i686-pc-windows-gnu" 4153 | version = "0.4.0" 4154 | source = "registry+https://github.com/rust-lang/crates.io-index" 4155 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 4156 | 4157 | [[package]] 4158 | name = "winapi-util" 4159 | version = "0.1.9" 4160 | source = "registry+https://github.com/rust-lang/crates.io-index" 4161 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 4162 | dependencies = [ 4163 | "windows-sys 0.59.0", 4164 | ] 4165 | 4166 | [[package]] 4167 | name = "winapi-x86_64-pc-windows-gnu" 4168 | version = "0.4.0" 4169 | source = "registry+https://github.com/rust-lang/crates.io-index" 4170 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 4171 | 4172 | [[package]] 4173 | name = "windows" 4174 | version = "0.48.0" 4175 | source = "registry+https://github.com/rust-lang/crates.io-index" 4176 | checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" 4177 | dependencies = [ 4178 | "windows-targets 0.48.5", 4179 | ] 4180 | 4181 | [[package]] 4182 | name = "windows" 4183 | version = "0.58.0" 4184 | source = "registry+https://github.com/rust-lang/crates.io-index" 4185 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 4186 | dependencies = [ 4187 | "windows-core 0.58.0", 4188 | "windows-targets 0.52.6", 4189 | ] 4190 | 4191 | [[package]] 4192 | name = "windows" 4193 | version = "0.59.0" 4194 | source = "registry+https://github.com/rust-lang/crates.io-index" 4195 | checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" 4196 | dependencies = [ 4197 | "windows-core 0.59.0", 4198 | "windows-targets 0.53.0", 4199 | ] 4200 | 4201 | [[package]] 4202 | name = "windows-core" 4203 | version = "0.52.0" 4204 | source = "registry+https://github.com/rust-lang/crates.io-index" 4205 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 4206 | dependencies = [ 4207 | "windows-targets 0.52.6", 4208 | ] 4209 | 4210 | [[package]] 4211 | name = "windows-core" 4212 | version = "0.58.0" 4213 | source = "registry+https://github.com/rust-lang/crates.io-index" 4214 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 4215 | dependencies = [ 4216 | "windows-implement 0.58.0", 4217 | "windows-interface 0.58.0", 4218 | "windows-result 0.2.0", 4219 | "windows-strings 0.1.0", 4220 | "windows-targets 0.52.6", 4221 | ] 4222 | 4223 | [[package]] 4224 | name = "windows-core" 4225 | version = "0.59.0" 4226 | source = "registry+https://github.com/rust-lang/crates.io-index" 4227 | checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" 4228 | dependencies = [ 4229 | "windows-implement 0.59.0", 4230 | "windows-interface 0.59.0", 4231 | "windows-result 0.3.0", 4232 | "windows-strings 0.3.0", 4233 | "windows-targets 0.53.0", 4234 | ] 4235 | 4236 | [[package]] 4237 | name = "windows-implement" 4238 | version = "0.58.0" 4239 | source = "registry+https://github.com/rust-lang/crates.io-index" 4240 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 4241 | dependencies = [ 4242 | "proc-macro2", 4243 | "quote", 4244 | "syn 2.0.96", 4245 | ] 4246 | 4247 | [[package]] 4248 | name = "windows-implement" 4249 | version = "0.59.0" 4250 | source = "registry+https://github.com/rust-lang/crates.io-index" 4251 | checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" 4252 | dependencies = [ 4253 | "proc-macro2", 4254 | "quote", 4255 | "syn 2.0.96", 4256 | ] 4257 | 4258 | [[package]] 4259 | name = "windows-interface" 4260 | version = "0.58.0" 4261 | source = "registry+https://github.com/rust-lang/crates.io-index" 4262 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 4263 | dependencies = [ 4264 | "proc-macro2", 4265 | "quote", 4266 | "syn 2.0.96", 4267 | ] 4268 | 4269 | [[package]] 4270 | name = "windows-interface" 4271 | version = "0.59.0" 4272 | source = "registry+https://github.com/rust-lang/crates.io-index" 4273 | checksum = "cb26fd936d991781ea39e87c3a27285081e3c0da5ca0fcbc02d368cc6f52ff01" 4274 | dependencies = [ 4275 | "proc-macro2", 4276 | "quote", 4277 | "syn 2.0.96", 4278 | ] 4279 | 4280 | [[package]] 4281 | name = "windows-registry" 4282 | version = "0.2.0" 4283 | source = "registry+https://github.com/rust-lang/crates.io-index" 4284 | checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" 4285 | dependencies = [ 4286 | "windows-result 0.2.0", 4287 | "windows-strings 0.1.0", 4288 | "windows-targets 0.52.6", 4289 | ] 4290 | 4291 | [[package]] 4292 | name = "windows-result" 4293 | version = "0.2.0" 4294 | source = "registry+https://github.com/rust-lang/crates.io-index" 4295 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 4296 | dependencies = [ 4297 | "windows-targets 0.52.6", 4298 | ] 4299 | 4300 | [[package]] 4301 | name = "windows-result" 4302 | version = "0.3.0" 4303 | source = "registry+https://github.com/rust-lang/crates.io-index" 4304 | checksum = "d08106ce80268c4067c0571ca55a9b4e9516518eaa1a1fe9b37ca403ae1d1a34" 4305 | dependencies = [ 4306 | "windows-targets 0.53.0", 4307 | ] 4308 | 4309 | [[package]] 4310 | name = "windows-strings" 4311 | version = "0.1.0" 4312 | source = "registry+https://github.com/rust-lang/crates.io-index" 4313 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 4314 | dependencies = [ 4315 | "windows-result 0.2.0", 4316 | "windows-targets 0.52.6", 4317 | ] 4318 | 4319 | [[package]] 4320 | name = "windows-strings" 4321 | version = "0.3.0" 4322 | source = "registry+https://github.com/rust-lang/crates.io-index" 4323 | checksum = "b888f919960b42ea4e11c2f408fadb55f78a9f236d5eef084103c8ce52893491" 4324 | dependencies = [ 4325 | "windows-targets 0.53.0", 4326 | ] 4327 | 4328 | [[package]] 4329 | name = "windows-sys" 4330 | version = "0.48.0" 4331 | source = "registry+https://github.com/rust-lang/crates.io-index" 4332 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 4333 | dependencies = [ 4334 | "windows-targets 0.48.5", 4335 | ] 4336 | 4337 | [[package]] 4338 | name = "windows-sys" 4339 | version = "0.52.0" 4340 | source = "registry+https://github.com/rust-lang/crates.io-index" 4341 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 4342 | dependencies = [ 4343 | "windows-targets 0.52.6", 4344 | ] 4345 | 4346 | [[package]] 4347 | name = "windows-sys" 4348 | version = "0.59.0" 4349 | source = "registry+https://github.com/rust-lang/crates.io-index" 4350 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 4351 | dependencies = [ 4352 | "windows-targets 0.52.6", 4353 | ] 4354 | 4355 | [[package]] 4356 | name = "windows-targets" 4357 | version = "0.48.5" 4358 | source = "registry+https://github.com/rust-lang/crates.io-index" 4359 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 4360 | dependencies = [ 4361 | "windows_aarch64_gnullvm 0.48.5", 4362 | "windows_aarch64_msvc 0.48.5", 4363 | "windows_i686_gnu 0.48.5", 4364 | "windows_i686_msvc 0.48.5", 4365 | "windows_x86_64_gnu 0.48.5", 4366 | "windows_x86_64_gnullvm 0.48.5", 4367 | "windows_x86_64_msvc 0.48.5", 4368 | ] 4369 | 4370 | [[package]] 4371 | name = "windows-targets" 4372 | version = "0.52.6" 4373 | source = "registry+https://github.com/rust-lang/crates.io-index" 4374 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 4375 | dependencies = [ 4376 | "windows_aarch64_gnullvm 0.52.6", 4377 | "windows_aarch64_msvc 0.52.6", 4378 | "windows_i686_gnu 0.52.6", 4379 | "windows_i686_gnullvm 0.52.6", 4380 | "windows_i686_msvc 0.52.6", 4381 | "windows_x86_64_gnu 0.52.6", 4382 | "windows_x86_64_gnullvm 0.52.6", 4383 | "windows_x86_64_msvc 0.52.6", 4384 | ] 4385 | 4386 | [[package]] 4387 | name = "windows-targets" 4388 | version = "0.53.0" 4389 | source = "registry+https://github.com/rust-lang/crates.io-index" 4390 | checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" 4391 | dependencies = [ 4392 | "windows_aarch64_gnullvm 0.53.0", 4393 | "windows_aarch64_msvc 0.53.0", 4394 | "windows_i686_gnu 0.53.0", 4395 | "windows_i686_gnullvm 0.53.0", 4396 | "windows_i686_msvc 0.53.0", 4397 | "windows_x86_64_gnu 0.53.0", 4398 | "windows_x86_64_gnullvm 0.53.0", 4399 | "windows_x86_64_msvc 0.53.0", 4400 | ] 4401 | 4402 | [[package]] 4403 | name = "windows_aarch64_gnullvm" 4404 | version = "0.48.5" 4405 | source = "registry+https://github.com/rust-lang/crates.io-index" 4406 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 4407 | 4408 | [[package]] 4409 | name = "windows_aarch64_gnullvm" 4410 | version = "0.52.6" 4411 | source = "registry+https://github.com/rust-lang/crates.io-index" 4412 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 4413 | 4414 | [[package]] 4415 | name = "windows_aarch64_gnullvm" 4416 | version = "0.53.0" 4417 | source = "registry+https://github.com/rust-lang/crates.io-index" 4418 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 4419 | 4420 | [[package]] 4421 | name = "windows_aarch64_msvc" 4422 | version = "0.48.5" 4423 | source = "registry+https://github.com/rust-lang/crates.io-index" 4424 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 4425 | 4426 | [[package]] 4427 | name = "windows_aarch64_msvc" 4428 | version = "0.52.6" 4429 | source = "registry+https://github.com/rust-lang/crates.io-index" 4430 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 4431 | 4432 | [[package]] 4433 | name = "windows_aarch64_msvc" 4434 | version = "0.53.0" 4435 | source = "registry+https://github.com/rust-lang/crates.io-index" 4436 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 4437 | 4438 | [[package]] 4439 | name = "windows_i686_gnu" 4440 | version = "0.48.5" 4441 | source = "registry+https://github.com/rust-lang/crates.io-index" 4442 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 4443 | 4444 | [[package]] 4445 | name = "windows_i686_gnu" 4446 | version = "0.52.6" 4447 | source = "registry+https://github.com/rust-lang/crates.io-index" 4448 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 4449 | 4450 | [[package]] 4451 | name = "windows_i686_gnu" 4452 | version = "0.53.0" 4453 | source = "registry+https://github.com/rust-lang/crates.io-index" 4454 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 4455 | 4456 | [[package]] 4457 | name = "windows_i686_gnullvm" 4458 | version = "0.52.6" 4459 | source = "registry+https://github.com/rust-lang/crates.io-index" 4460 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 4461 | 4462 | [[package]] 4463 | name = "windows_i686_gnullvm" 4464 | version = "0.53.0" 4465 | source = "registry+https://github.com/rust-lang/crates.io-index" 4466 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 4467 | 4468 | [[package]] 4469 | name = "windows_i686_msvc" 4470 | version = "0.48.5" 4471 | source = "registry+https://github.com/rust-lang/crates.io-index" 4472 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 4473 | 4474 | [[package]] 4475 | name = "windows_i686_msvc" 4476 | version = "0.52.6" 4477 | source = "registry+https://github.com/rust-lang/crates.io-index" 4478 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 4479 | 4480 | [[package]] 4481 | name = "windows_i686_msvc" 4482 | version = "0.53.0" 4483 | source = "registry+https://github.com/rust-lang/crates.io-index" 4484 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 4485 | 4486 | [[package]] 4487 | name = "windows_x86_64_gnu" 4488 | version = "0.48.5" 4489 | source = "registry+https://github.com/rust-lang/crates.io-index" 4490 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 4491 | 4492 | [[package]] 4493 | name = "windows_x86_64_gnu" 4494 | version = "0.52.6" 4495 | source = "registry+https://github.com/rust-lang/crates.io-index" 4496 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 4497 | 4498 | [[package]] 4499 | name = "windows_x86_64_gnu" 4500 | version = "0.53.0" 4501 | source = "registry+https://github.com/rust-lang/crates.io-index" 4502 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 4503 | 4504 | [[package]] 4505 | name = "windows_x86_64_gnullvm" 4506 | version = "0.48.5" 4507 | source = "registry+https://github.com/rust-lang/crates.io-index" 4508 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 4509 | 4510 | [[package]] 4511 | name = "windows_x86_64_gnullvm" 4512 | version = "0.52.6" 4513 | source = "registry+https://github.com/rust-lang/crates.io-index" 4514 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 4515 | 4516 | [[package]] 4517 | name = "windows_x86_64_gnullvm" 4518 | version = "0.53.0" 4519 | source = "registry+https://github.com/rust-lang/crates.io-index" 4520 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 4521 | 4522 | [[package]] 4523 | name = "windows_x86_64_msvc" 4524 | version = "0.48.5" 4525 | source = "registry+https://github.com/rust-lang/crates.io-index" 4526 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 4527 | 4528 | [[package]] 4529 | name = "windows_x86_64_msvc" 4530 | version = "0.52.6" 4531 | source = "registry+https://github.com/rust-lang/crates.io-index" 4532 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 4533 | 4534 | [[package]] 4535 | name = "windows_x86_64_msvc" 4536 | version = "0.53.0" 4537 | source = "registry+https://github.com/rust-lang/crates.io-index" 4538 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 4539 | 4540 | [[package]] 4541 | name = "winnow" 4542 | version = "0.6.24" 4543 | source = "registry+https://github.com/rust-lang/crates.io-index" 4544 | checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" 4545 | dependencies = [ 4546 | "memchr", 4547 | ] 4548 | 4549 | [[package]] 4550 | name = "winreg" 4551 | version = "0.50.0" 4552 | source = "registry+https://github.com/rust-lang/crates.io-index" 4553 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 4554 | dependencies = [ 4555 | "cfg-if", 4556 | "windows-sys 0.48.0", 4557 | ] 4558 | 4559 | [[package]] 4560 | name = "wmi" 4561 | version = "0.14.4" 4562 | source = "registry+https://github.com/rust-lang/crates.io-index" 4563 | checksum = "a73f536e843f309e9f7f1036561f844c0d07cf735603cb0fc230ae76e6da9aff" 4564 | dependencies = [ 4565 | "chrono", 4566 | "futures", 4567 | "log", 4568 | "serde", 4569 | "thiserror 2.0.11", 4570 | "windows 0.59.0", 4571 | "windows-core 0.59.0", 4572 | ] 4573 | 4574 | [[package]] 4575 | name = "write16" 4576 | version = "1.0.0" 4577 | source = "registry+https://github.com/rust-lang/crates.io-index" 4578 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 4579 | 4580 | [[package]] 4581 | name = "writeable" 4582 | version = "0.5.5" 4583 | source = "registry+https://github.com/rust-lang/crates.io-index" 4584 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 4585 | 4586 | [[package]] 4587 | name = "x509-parser" 4588 | version = "0.16.0" 4589 | source = "registry+https://github.com/rust-lang/crates.io-index" 4590 | checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" 4591 | dependencies = [ 4592 | "asn1-rs", 4593 | "data-encoding", 4594 | "der-parser", 4595 | "lazy_static", 4596 | "nom", 4597 | "oid-registry", 4598 | "rusticata-macros", 4599 | "thiserror 1.0.69", 4600 | "time", 4601 | ] 4602 | 4603 | [[package]] 4604 | name = "xml-rs" 4605 | version = "0.8.25" 4606 | source = "registry+https://github.com/rust-lang/crates.io-index" 4607 | checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" 4608 | 4609 | [[package]] 4610 | name = "xmltree" 4611 | version = "0.10.3" 4612 | source = "registry+https://github.com/rust-lang/crates.io-index" 4613 | checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" 4614 | dependencies = [ 4615 | "xml-rs", 4616 | ] 4617 | 4618 | [[package]] 4619 | name = "yasna" 4620 | version = "0.5.2" 4621 | source = "registry+https://github.com/rust-lang/crates.io-index" 4622 | checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" 4623 | dependencies = [ 4624 | "time", 4625 | ] 4626 | 4627 | [[package]] 4628 | name = "yoke" 4629 | version = "0.7.5" 4630 | source = "registry+https://github.com/rust-lang/crates.io-index" 4631 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 4632 | dependencies = [ 4633 | "serde", 4634 | "stable_deref_trait", 4635 | "yoke-derive", 4636 | "zerofrom", 4637 | ] 4638 | 4639 | [[package]] 4640 | name = "yoke-derive" 4641 | version = "0.7.5" 4642 | source = "registry+https://github.com/rust-lang/crates.io-index" 4643 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 4644 | dependencies = [ 4645 | "proc-macro2", 4646 | "quote", 4647 | "syn 2.0.96", 4648 | "synstructure", 4649 | ] 4650 | 4651 | [[package]] 4652 | name = "z32" 4653 | version = "1.1.1" 4654 | source = "registry+https://github.com/rust-lang/crates.io-index" 4655 | checksum = "edb37266251c28b03d08162174a91c3a092e3bd4f476f8205ee1c507b78b7bdc" 4656 | 4657 | [[package]] 4658 | name = "zeco" 4659 | version = "0.2.0" 4660 | dependencies = [ 4661 | "anyhow", 4662 | "bincode", 4663 | "clap", 4664 | "iroh", 4665 | "rand", 4666 | "serde", 4667 | "tokio", 4668 | "users", 4669 | ] 4670 | 4671 | [[package]] 4672 | name = "zerocopy" 4673 | version = "0.7.35" 4674 | source = "registry+https://github.com/rust-lang/crates.io-index" 4675 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 4676 | dependencies = [ 4677 | "byteorder", 4678 | "zerocopy-derive", 4679 | ] 4680 | 4681 | [[package]] 4682 | name = "zerocopy-derive" 4683 | version = "0.7.35" 4684 | source = "registry+https://github.com/rust-lang/crates.io-index" 4685 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 4686 | dependencies = [ 4687 | "proc-macro2", 4688 | "quote", 4689 | "syn 2.0.96", 4690 | ] 4691 | 4692 | [[package]] 4693 | name = "zerofrom" 4694 | version = "0.1.5" 4695 | source = "registry+https://github.com/rust-lang/crates.io-index" 4696 | checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" 4697 | dependencies = [ 4698 | "zerofrom-derive", 4699 | ] 4700 | 4701 | [[package]] 4702 | name = "zerofrom-derive" 4703 | version = "0.1.5" 4704 | source = "registry+https://github.com/rust-lang/crates.io-index" 4705 | checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" 4706 | dependencies = [ 4707 | "proc-macro2", 4708 | "quote", 4709 | "syn 2.0.96", 4710 | "synstructure", 4711 | ] 4712 | 4713 | [[package]] 4714 | name = "zeroize" 4715 | version = "1.8.1" 4716 | source = "registry+https://github.com/rust-lang/crates.io-index" 4717 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 4718 | 4719 | [[package]] 4720 | name = "zerovec" 4721 | version = "0.10.4" 4722 | source = "registry+https://github.com/rust-lang/crates.io-index" 4723 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 4724 | dependencies = [ 4725 | "yoke", 4726 | "zerofrom", 4727 | "zerovec-derive", 4728 | ] 4729 | 4730 | [[package]] 4731 | name = "zerovec-derive" 4732 | version = "0.10.3" 4733 | source = "registry+https://github.com/rust-lang/crates.io-index" 4734 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 4735 | dependencies = [ 4736 | "proc-macro2", 4737 | "quote", 4738 | "syn 2.0.96", 4739 | ] 4740 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "zeco" 3 | version = "0.2.0" 4 | edition = "2021" 5 | 6 | authors = ["Julian Büttner "] 7 | license = "MIT" 8 | repository = "https://github.com/julianbuettner/swapvec" 9 | readme = "README.md" 10 | description = "zellij attach via the internet, peer to peer, end-to-end encrypted" 11 | 12 | [dependencies] 13 | anyhow = "1.0.95" 14 | bincode = "1.3.3" 15 | clap = { version = "4.5.27", features = ["derive"] } 16 | iroh = "0.31.0" 17 | rand = "0.8.5" 18 | serde = { version = "1.0.217", features = ["derive"] } 19 | tokio = { version = "1.43.0", features = ["net"] } 20 | users = "0.11.0" 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Zeco 2 | Invite to your Zellij session, peer to peer, end-to-end encrypted. 3 | 4 | Ideal for situations like pair programming in Neovim. 5 | 6 | ## Installation 7 | For now, you can simply install the cli via `cargo`. 8 | ``` 9 | cargo install zeco 10 | ``` 11 | 12 | ## Requirements 13 | - Same zellij version, for guest and host 14 | - Internet connection 15 | 16 | ## Usage 17 | To invite peers to your Zellij session, simply run 18 | ``` 19 | zeco host 20 | ``` 21 | from within your zellij session. 22 | This will generate a join command looking like this: 23 | ``` 24 | zeco join 25 | ``` 26 | Send this command to your guest and let them join in. 27 | Running the join command then outputs the zellij attach command: 28 | ``` 29 | zellij attach 30 | ``` 31 | 32 | ## How does it work? 33 | Zellij has a server client architecture. This usually works over a linux socket, 34 | but in theory (and in practice) access to the socket can be proxied. 35 | 36 | Zeco uses [Iroh](https://www.iroh.computer/) to establish a end-to-end encrypted 37 | peer to peer connection. Iroh bootstraps this connection via their servers 38 | and the protocol is based on QUIC. 39 | The host id basically is a generated public key of the host. 40 | This way, the guest can authenticate the host. The host expects the guest to provide 41 | the pre shared secret. This way, the host can authenticate the guest. 42 | 43 | ## Notes 44 | - Currently only one guest can join 45 | - Currently only one join can occur, the guest can not re-join with the same data. 46 | - Currently zellij of the guest freezes, if the host terminates the connection. 47 | - The size of the zellij window will be defined by smaller terminal window. 48 | - Zeco does not work for tmux, because tmux transfers things like file descriptors via the socket. 49 | -------------------------------------------------------------------------------- /src/handshake.rs: -------------------------------------------------------------------------------- 1 | // Our goal is to establish two iroh::Connections 2 | // for the host and the guest. 3 | 4 | use anyhow::{bail, Result}; 5 | use iroh::{endpoint::Incoming, Endpoint, NodeId, SecretKey}; 6 | use rand::{distributions::Alphanumeric, rngs::OsRng, thread_rng, Rng}; 7 | use std::str::FromStr; 8 | 9 | use crate::zellij::{self, get_current_session}; 10 | 11 | const ALPN: &[u8] = &[3, 1, 4, 1, 5, 9, 2, 6]; 12 | 13 | async fn init_endpoint() -> Result { 14 | let secret_key = SecretKey::generate(OsRng); 15 | Endpoint::builder() 16 | .secret_key(secret_key) 17 | .discovery_n0() 18 | .alpns(vec![ALPN.to_vec()]) 19 | .bind() 20 | .await 21 | } 22 | 23 | pub async fn handshake_host() -> Result<()> { 24 | let zellij_info = get_current_session()?; 25 | println!( 26 | "Sharing Zellij session {} (version {})", 27 | zellij_info.name, zellij_info.version 28 | ); 29 | 30 | let psk: String = thread_rng() 31 | .sample_iter(&Alphanumeric) 32 | .take(32) 33 | .map(char::from) 34 | .collect(); 35 | let endpoint = init_endpoint().await?; 36 | println!("The client now can join with the following command:"); 37 | println!("\tzeco join {} {}", endpoint.node_id(), psk); 38 | println!( 39 | "WARNING! Everyone with these credentials can execute arbitrary commands in your shell. \ 40 | Only hand over to people you fully trust." 41 | ); 42 | println!("Waiting for guest to join. Press Ctrl-C to quit."); 43 | 44 | let incoming: Incoming = endpoint.accept().await.unwrap(); 45 | let connection = incoming.accept()?.await?; 46 | println!("Connection established."); 47 | 48 | let (mut send, mut recv) = connection.accept_bi().await?; 49 | assert_eq!(psk.len(), 32); // String::length is in bytes 50 | let mut buf = [0; 32]; 51 | recv.read_exact(&mut buf).await?; 52 | if buf != psk.as_bytes() { 53 | send.write_all(&[0]).await?; 54 | bail!("Client provided wrong secret. Quit."); 55 | } 56 | send.write_all(&[1]).await?; 57 | send.finish()?; 58 | println!("Client authenticated successfully!"); 59 | drop(send); 60 | drop(recv); 61 | 62 | zellij::host(connection, zellij_info).await 63 | } 64 | 65 | pub async fn handshake_guest(node_id: &str, secret: &str) -> Result<()> { 66 | let node_id: NodeId = NodeId::from_str(node_id)?; 67 | let endpoint = init_endpoint().await?; 68 | 69 | let connection = endpoint.connect(node_id, ALPN).await?; 70 | let (mut send, mut recv) = connection.open_bi().await?; 71 | send.write_all(secret.as_bytes()).await?; 72 | send.finish()?; 73 | let mut success = [0]; 74 | recv.read_exact(&mut success).await?; 75 | if success != [1] { 76 | bail!("Host declined provided secret."); 77 | } 78 | println!("Host let you in."); 79 | drop(send); 80 | drop(recv); 81 | 82 | zellij::join(connection).await 83 | } 84 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::process::exit; 2 | 3 | use clap::Parser; 4 | mod handshake; 5 | mod protocol; 6 | mod zellij; 7 | 8 | #[derive(Debug, Parser)] 9 | pub struct JoinArgs { 10 | #[arg(help = "Peer to peer Node ID of the host you want to join")] 11 | host: String, 12 | #[arg(help = "Pre Shared Secret, also provided by the host")] 13 | secret: String, 14 | } 15 | 16 | #[derive(Parser, Debug)] 17 | pub enum Command { 18 | Host, 19 | Join(JoinArgs), 20 | } 21 | 22 | #[tokio::main] 23 | async fn main() { 24 | let args = Command::parse(); 25 | let res = match args { 26 | Command::Host => handshake::handshake_host().await, 27 | Command::Join(args) => handshake::handshake_guest(&args.host, &args.secret).await, 28 | }; 29 | if let Err(e) = res { 30 | println!("Error, terminated due to:"); 31 | println!("{}", e); 32 | exit(1); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/protocol.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | use iroh::endpoint::{RecvStream, SendStream}; 3 | use serde::{de::DeserializeOwned, Serialize}; 4 | 5 | pub trait EasyCodeWrite { 6 | async fn struct_write(&mut self, t: &T) -> Result<()>; 7 | } 8 | 9 | pub trait EasyCodeRead<'de> { 10 | async fn struct_read(&mut self) -> Result; 11 | } 12 | 13 | impl EasyCodeWrite for SendStream { 14 | async fn struct_write(&mut self, t: &T) -> Result<()> { 15 | let v: Vec = bincode::serialize(t).unwrap(); 16 | let size = v.len() as u32; 17 | self.write_all(&size.to_be_bytes()).await?; 18 | self.write_all(&v).await?; 19 | Ok(()) 20 | } 21 | } 22 | 23 | impl EasyCodeRead<'_> for RecvStream { 24 | async fn struct_read(&mut self) -> Result { 25 | let mut length_bytes = [0; 4]; 26 | self.read_exact(&mut length_bytes).await?; 27 | let length = u32::from_be_bytes(length_bytes); 28 | let mut v = vec![0; length as usize]; 29 | self.read_exact(&mut v).await?; 30 | let t: T = bincode::deserialize(&v)?; 31 | Ok(t) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/zellij.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | env, 3 | fs::{read_dir, DirEntry}, 4 | path::PathBuf, 5 | }; 6 | 7 | use anyhow::{bail, Context, Result}; 8 | use iroh::endpoint::{Connection, RecvStream, SendStream}; 9 | use tokio::{ 10 | fs::create_dir_all, 11 | io::copy, 12 | net::{UnixListener, UnixStream}, 13 | spawn, 14 | }; 15 | use users::get_current_uid; 16 | 17 | use crate::protocol::{EasyCodeRead, EasyCodeWrite}; 18 | 19 | #[derive(Debug, Clone)] 20 | pub struct ZellijSessionInfo { 21 | pub name: String, 22 | pub version: String, 23 | pub path: String, 24 | } 25 | 26 | fn base_path() -> Result { 27 | let mut p: PathBuf = env::var("XDG_RUNTIME_DIR") 28 | .context("XDG_RUNTIME_DIR is not defined.") 29 | .map(Into::into)?; 30 | p.push("zellij"); 31 | Ok(p) 32 | } 33 | 34 | pub fn get_current_session() -> Result { 35 | let zellij_base_path = base_path()?; 36 | let session_name = env::var("ZELLIJ_SESSION_NAME"); 37 | if session_name.is_err() { 38 | bail!( 39 | "Could not find ZELLIJ_SESSION_NAME in environment. \ 40 | Please run this command from within your active zellij session." 41 | ) 42 | } 43 | let session_name = session_name.unwrap(); 44 | let mut version_dirs: Vec = Vec::new(); 45 | for entry in read_dir(&zellij_base_path)? { 46 | version_dirs.push(entry?); 47 | } 48 | if version_dirs.is_empty() { 49 | bail!("Directory {:?} was empty unexpectedly.", zellij_base_path); 50 | } 51 | if version_dirs.len() > 1 { 52 | bail!( 53 | "Multiple directories found, where one was expected: {:?}", 54 | version_dirs 55 | ); 56 | } 57 | let mut path = version_dirs.pop().unwrap().path(); 58 | let version = path.file_name().unwrap().to_string_lossy().to_string(); 59 | path.push(&session_name); 60 | if !std::fs::exists(&path)? { 61 | bail!("Expected file {} to exist.", path.to_string_lossy()); 62 | } 63 | Ok(ZellijSessionInfo { 64 | path: path.to_string_lossy().to_string(), 65 | version, 66 | name: session_name, 67 | }) 68 | } 69 | 70 | pub async fn host(c: Connection, z: ZellijSessionInfo) -> Result<()> { 71 | let mut s = c.open_uni().await?; 72 | s.struct_write(&z.version).await?; 73 | s.struct_write(&z.name).await?; 74 | println!("Sent zellij details"); 75 | loop { 76 | let z = z.clone(); 77 | let x = c.accept_bi().await; 78 | match x { 79 | Ok((send, recv)) => { 80 | spawn(handle_zellij_session(send, recv, z)); 81 | } 82 | Err(e) => bail!("Failed to accept channel from guest: {:?}", e), 83 | } 84 | } 85 | } 86 | 87 | async fn handle_zellij_session( 88 | mut send: SendStream, 89 | mut recv: RecvStream, 90 | z: ZellijSessionInfo, 91 | ) -> Result<()> { 92 | let mut u = UnixStream::connect(z.path).await?; 93 | let (mut socket_read, mut socket_write) = u.split(); 94 | 95 | let a = copy(&mut socket_read, &mut send); 96 | let b = copy(&mut recv, &mut socket_write); 97 | 98 | let (a, b) = tokio::join!(a, b); 99 | a?; 100 | b?; 101 | Ok(()) 102 | } 103 | 104 | async fn handle_zellij_socket(mut socket_stream: UnixStream, c: Connection) -> Result<()> { 105 | let (mut iroh_send, mut iroh_recv) = c.open_bi().await?; 106 | let (mut sock_read, mut sock_write) = socket_stream.split(); 107 | 108 | let a = copy(&mut sock_read, &mut iroh_send); 109 | let b = copy(&mut iroh_recv, &mut sock_write); 110 | 111 | let (a, b) = tokio::join!(a, b); 112 | a?; 113 | b?; 114 | Ok(()) 115 | } 116 | 117 | pub async fn join(c: Connection) -> Result<()> { 118 | let mut s = c.accept_uni().await?; 119 | let version: String = s.struct_read().await?; 120 | let name: String = s.struct_read().await?; 121 | println!( 122 | "Remote Session is {}. You too are expected to use version {}.", 123 | name, version 124 | ); 125 | 126 | let remote_session_name = format!("{}-remote", name); 127 | let dir = format!("/run/user/{}/zellij/{}", get_current_uid(), version); 128 | create_dir_all(&dir) 129 | .await 130 | .context("Failed to create zellij directory")?; 131 | let local_socket = format!("{}/{}", dir, remote_session_name); 132 | let listener = UnixListener::bind(local_socket).context("Failed to create socket file.")?; 133 | println!("Join session with"); 134 | println!("\tzellij a {}", remote_session_name); 135 | loop { 136 | match listener.accept().await { 137 | Ok((stream, _)) => { 138 | let c = c.clone(); 139 | spawn(handle_zellij_socket(stream, c)); 140 | } 141 | Err(_) => println!("Failed to accept connection on socket."), 142 | } 143 | } 144 | } 145 | --------------------------------------------------------------------------------