diff --git a/Cargo.lock b/Cargo.lock index 2ef72ba..0680838 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -71,38 +71,32 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "anyhow" -version = "1.0.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" - [[package]] name = "argp" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7409aa6f1dd8464eac2e56cf538e1e5f7f79678caa32f198d214a3db8d5075c1" +checksum = "78ca6b2169f9679af5b5ed7780941555a03d795fec86996d8605b28f63195acb" dependencies = [ "argp_derive", ] [[package]] name = "argp_derive" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9b949411282939e3f7d8923127e3f18aa474b46da4e8bb0ddf2cb8c81f963a" +checksum = "ad1eb5de915b522348ebd6690c0e12f905b37797c2dc18a267027e7d422e8ad6" dependencies = [ "proc-macro2", "pulldown-cmark", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "asn1-rs" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" +checksum = "b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8" dependencies = [ "asn1-rs-derive", "asn1-rs-impl", @@ -110,7 +104,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 2.0.18", + "thiserror 2.0.20", "time", ] @@ -122,7 +116,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] @@ -134,20 +128,20 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.16.2" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" +checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e" dependencies = [ "aws-lc-sys", "untrusted 0.7.1", @@ -156,14 +150,15 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.39.1" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a25cf98105baa966497416dbd42565ce3a8cf8dbfd59803ec9ad46f3126399" +checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483" dependencies = [ "cc", "cmake", "dunce", "fs_extra", + "pkg-config", ] [[package]] @@ -184,7 +179,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags", + "bitflags 2.13.1", "cexpr", "clang-sys", "itertools", @@ -192,23 +187,29 @@ dependencies = [ "quote", "regex", "rustc-hash", - "shlex", - "syn", + "shlex 1.3.0", + "syn 2.0.119", ] [[package]] name = "bitflags" -version = "2.11.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "boring" -version = "5.0.2" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb424b02b733bc0fafbe9b269db743d44126fabf2e55edaefb42762491955c9e" +checksum = "47bf58283ad1560da95ab8dcbb6c71e18a89df30e6011e3582ddf755abe55c4a" dependencies = [ - "bitflags", + "bitflags 2.13.1", "boring-sys", "foreign-types 0.5.0", "libc", @@ -244,9 +245,9 @@ dependencies = [ [[package]] name = "boring-sys" -version = "5.0.2" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71108e4d30f6275b216e78706b438d2880a4d1503fbc40f8616a3c69401ee2e6" +checksum = "6993efa9d9f0ebf3b0c02c8e868cfe37d0854cd021d51204480a91ce23d6e444" dependencies = [ "bindgen", "cmake", @@ -264,26 +265,26 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.2.60" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex", + "shlex 2.0.1", ] [[package]] @@ -309,9 +310,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -382,6 +383,12 @@ dependencies = [ "rand", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" + [[package]] name = "crypto-common" version = "0.1.7" @@ -393,10 +400,55 @@ dependencies = [ ] [[package]] -name = "data-encoding" -version = "2.10.0" +name = "dashmap" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" + +[[package]] +name = "defmt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +dependencies = [ + "defmt-parser", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.20", +] [[package]] name = "der" @@ -410,9 +462,9 @@ dependencies = [ [[package]] name = "der" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" +checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" dependencies = [ "const-oid 0.10.2", "zeroize", @@ -437,19 +489,28 @@ name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", +] + +[[package]] +name = "dns-lookup" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e39034cee21a2f5bbb66ba0e3689819c4bb5d00382a282006e802a7ffa6c41d" +dependencies = [ + "cfg-if", + "libc", + "socket2", + "windows-sys 0.60.2", ] [[package]] @@ -460,15 +521,15 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "env_filter" -version = "1.0.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" +checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217" dependencies = [ "log", "regex", @@ -476,9 +537,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" +checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6" dependencies = [ "anstream", "anstyle", @@ -487,23 +548,11 @@ dependencies = [ "log", ] -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "foreign-types" @@ -526,13 +575,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -565,38 +614,38 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-macro", @@ -649,22 +698,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", - "wasip2", - "wasip3", ] [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "graviola" @@ -678,18 +725,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash", -] - -[[package]] -name = "hashbrown" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hax-lib" @@ -712,7 +750,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -728,39 +766,15 @@ dependencies = [ "uuid", ] -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hybrid-array" -version = "0.4.10" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" dependencies = [ "typenum", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "indexmap" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" -dependencies = [ - "equivalent", - "hashbrown 0.17.0", - "serde", - "serde_core", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -784,10 +798,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.23" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" dependencies = [ + "defmt", + "jiff-core", "jiff-static", "log", "portable-atomic", @@ -796,14 +812,24 @@ dependencies = [ ] [[package]] -name = "jiff-static" -version = "0.2.23" +name = "jiff-core" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" dependencies = [ + "defmt", +] + +[[package]] +name = "jiff-static" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" +dependencies = [ + "jiff-core", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -847,26 +873,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.95" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ - "once_cell", + "cfg-if", + "futures-util", "wasm-bindgen", ] @@ -876,17 +903,11 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" -version = "0.2.184" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libcrux-intrinsics" @@ -963,16 +984,25 @@ dependencies = [ ] [[package]] -name = "log" -version = "0.4.29" +name = "lock_api" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "minimal-lexical" @@ -982,9 +1012,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mio" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "wasi", @@ -998,9 +1028,12 @@ dependencies = [ "argp", "aws-lc-rs", "boring-rustls-provider", + "dashmap", + "dns-lookup", "env_logger", "futures-util", "log", + "openssl", "rustls-graviola", "rustls-openssl", "rustls-platform-verifier", @@ -1026,9 +1059,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", @@ -1036,15 +1069,15 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -1081,15 +1114,14 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl" -version = "0.10.77" +version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe4646e360ec77dff7dde40ed3d6c5fee52d156ef4a62f53973d38294dad87f" +checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ - "bitflags", + "bitflags 2.13.1", "cfg-if", "foreign-types 0.3.2", "libc", - "once_cell", "openssl-macros", "openssl-sys", ] @@ -1102,7 +1134,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1113,18 +1145,18 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-src" -version = "300.6.0+3.6.2" +version = "300.6.1+3.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8e8cbfd3a4a8c8f089147fd7aaa33cf8c7450c4d09f8f80698a0cf093abeff4" +checksum = "46eb8fb9fb3b61ce1c0f8a026c4c1a0714d3a9e138e7fbde78753ce2babc3846" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.113" +version = "0.9.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad2f2c0eba47118757e4c6d2bff2838f3e0523380021356e7875e858372ce644" +checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" dependencies = [ "cc", "libc", @@ -1134,10 +1166,23 @@ dependencies = [ ] [[package]] -name = "pastey" -version = "0.2.1" +name = "parking_lot_core" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b867cad97c0791bbd3aaa6472142568c6c9e8f71937e98379f584cfb0cf35bec" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pastey" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" [[package]] name = "pin-project-lite" @@ -1168,21 +1213,21 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ "portable-atomic", ] @@ -1202,16 +1247,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -1231,14 +1266,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -1249,7 +1284,7 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" dependencies = [ - "bitflags", + "bitflags 2.13.1", "getopts", "memchr", "unicase", @@ -1257,9 +1292,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -1278,9 +1313,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha", "rand_core", @@ -1306,10 +1341,19 @@ dependencies = [ ] [[package]] -name = "regex" -version = "1.12.3" +name = "redox_syscall" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.1", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -1319,9 +1363,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -1330,9 +1374,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "ring" @@ -1350,9 +1394,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rusticata-macros" @@ -1365,9 +1409,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ "aws-lc-rs", "log", @@ -1392,9 +1436,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -1404,9 +1448,9 @@ dependencies = [ [[package]] name = "rustls-openssl" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f161084062dd5a443adfb0de9bbfab62699333e2d8424ca91da5f22ec88d1" +checksum = "bce63aeefbba181bc32fe7519a3d7edcdfa9fc2aa1f5e7f152493a25275ec14a" dependencies = [ "foreign-types 0.3.2", "once_cell", @@ -1418,9 +1462,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "zeroize", ] @@ -1465,11 +1509,11 @@ dependencies = [ [[package]] name = "rustls-symcrypt" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22c7c4f95e2000dcc89fb0e4f9cf15f879d93fabfcf30d47aa26c7cf0b7ff5b" +checksum = "51a60ef37ac1952a7805f074aa129b63a29332f2292cb9e33af396eb22dc44bf" dependencies = [ - "der 0.8.0", + "der 0.8.1", "pkcs1", "pkcs8", "rustls", @@ -1480,9 +1524,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.11" +version = "0.103.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20a6af516fea4b20eccceaf166e8aa666ac996208e8a644ce3ef5aa783bc7cd4" +checksum = "0527518605e68109d875e248ea259b6758801cf165e4b2c2733ae3b51f12535a" dependencies = [ "aws-lc-rs", "ring", @@ -1492,9 +1536,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "same-file" @@ -1514,6 +1558,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "sec1" version = "0.8.1" @@ -1521,7 +1571,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", - "der 0.8.0", + "der 0.8.1", "hybrid-array", "zeroize", ] @@ -1532,7 +1582,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags", + "bitflags 2.13.1", "core-foundation", "core-foundation-sys", "libc", @@ -1549,17 +1599,11 @@ dependencies = [ "libc", ] -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -1567,29 +1611,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -1604,6 +1648,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "slab" version = "0.4.12" @@ -1611,10 +1661,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] -name = "socket2" -version = "0.6.3" +name = "smallvec" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -1633,7 +1689,7 @@ dependencies = [ [[package]] name = "sslrelay" version = "0.6.2" -source = "git+https://git.zoai.re/tuxmain/sslrelay.git?rev=11a4777cfebfc41695583c23c545478dc50bdbe0#11a4777cfebfc41695583c23c545478dc50bdbe0" +source = "git+https://git.zoai.re/tuxmain/sslrelay.git?rev=5e0007fab63a11ab0ca52586c8fc35cb560116bf#5e0007fab63a11ab0ca52586c8fc35cb560116bf" dependencies = [ "openssl", ] @@ -1675,9 +1731,20 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -1692,7 +1759,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1706,11 +1773,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ - "thiserror-impl 2.0.18", + "thiserror-impl 2.0.20", ] [[package]] @@ -1721,28 +1788,27 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "time" -version = "0.3.47" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde_core", @@ -1752,15 +1818,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -1768,9 +1834,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.51.1" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -1783,13 +1849,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -1804,22 +1870,23 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", + "libc", "pin-project-lite", "tokio", ] [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicase" @@ -1839,12 +1906,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "untrusted" version = "0.7.1" @@ -1865,11 +1926,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" +checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "wasm-bindgen", ] @@ -1904,27 +1965,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.118" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -1935,9 +1987,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.118" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1945,65 +1997,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.118" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.118" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "webpki-root-certs" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] @@ -2063,6 +2081,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -2096,13 +2123,30 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -2115,6 +2159,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -2127,6 +2177,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -2139,12 +2195,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -2157,6 +2225,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -2169,6 +2243,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -2181,6 +2261,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -2193,93 +2279,17 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + [[package]] name = "wit-bindgen" -version = "0.51.0" +version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "x509-parser" @@ -2294,38 +2304,38 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "thiserror 2.0.18", + "thiserror 2.0.20", "time", ] [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index 1890872..7f5abfb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,8 +10,6 @@ env_logger = "0.11.8" futures-util = "0.3.31" log = "0.4.28" rustls-platform-verifier = "0.6.2" -#sslrelay = { path = "../sslrelay", optional = true } -sslrelay = { git = "https://git.zoai.re/tuxmain/sslrelay.git", rev = "11a4777cfebfc41695583c23c545478dc50bdbe0", optional = true } static_cell = "2.1.1" tokio = { version = "1.49.0", features = ["io-util", "macros", "net", "rt-multi-thread", "sync", "time"]} tokio-rustls = "0.26.4" @@ -29,13 +27,20 @@ rustls-openssl = { version = "0.3.0", default-features = false, features = ["tls rustls-post-quantum = { version = "0.2.4", optional = true } rustls-symcrypt = { version = "0.2.1", optional = true, features = ["chacha", "x25519"] } +# Record +dashmap = { version = "6.2.1", optional = true } +dns-lookup = { version = "3.0.1", optional = true } +openssl = { version = "0.10.81", optional = true } +#sslrelay = { path = "../sslrelay", optional = true } +sslrelay = { git = "https://git.zoai.re/tuxmain/sslrelay.git", rev = "5e0007fab63a11ab0ca52586c8fc35cb560116bf", optional = true } + [features] default = [ "aws-lc",# Change this to the wanted cryptographic backend (list below) - #"record",# It may be needed to remove the record feature when building with openssl + "record",# It may be needed to remove the record feature when building with openssl ] -record = ["sslrelay"] +record = ["dashmap", "dns-lookup", "dep:openssl", "sslrelay"] # Available cryptographic backends aws-lc = ["tokio-rustls/aws-lc-rs", "rustls-post-quantum", "rustls-post-quantum/aws-lc-rs-unstable", "aws-lc-rs"] @@ -48,3 +53,7 @@ symcrypt = ["rustls-symcrypt"] [profile.release] lto = "fat" + +[patch.crates-io] +#openssl = { path = "../rust-openssl/openssl" } +#openssl-sys = { path = "../rust-openssl/openssl-sys" } diff --git a/src/client.rs b/src/client.rs index 7e24ba2..ae11fed 100644 --- a/src/client.rs +++ b/src/client.rs @@ -210,10 +210,12 @@ pub async fn play( .await .unwrap(); let mut stream = crate::codec::StreamCodec::new(stream); + let mut last_req_id = 0; for (direction, reqs) in ResponseStreamer::new(records.iter()) { match direction { Direction::ClientToServer => { for (req_id, len) in reqs { + last_req_id = req_id; //println!("[CLT] ({conn_id}) >> {}", len); let mut data = dummy_bytes[0..len as usize].to_vec(); data[0..4].copy_from_slice(&(len as u32).to_be_bytes()); @@ -226,7 +228,9 @@ pub async fn play( { Ok(_v) => {} Err(_e) => { - println!("client timeout {conn_id} (sending)"); + println!( + "client timeout {conn_id} ({req_id}) (sending)" + ); continue; } } @@ -244,8 +248,14 @@ pub async fn play( Err(_e) => { // TODO fix println!( - "client timeout {}: {} / {}", - conn_id, total_recv, expected_total_len + "client timeout {} ({} -> {:?}): {} / {}", + conn_id, + last_req_id, + reqs.iter() + .map(|(req_id, _len)| req_id) + .collect::>(), + total_recv, + expected_total_len ); //print_bin(data); break; diff --git a/src/codec.rs b/src/codec.rs index 125c274..bc6e787 100644 --- a/src/codec.rs +++ b/src/codec.rs @@ -16,6 +16,7 @@ impl StreamCodec { if expected_len < 8 || expected_len > 16 * 1024 * 1024 { return Err(std::io::ErrorKind::InvalidData.into()); } + //println!("Expecting {expected_len}"); buf.resize(expected_len, 0); self.stream.read_exact(&mut buf[8..expected_len]).await?; Ok(buf) diff --git a/src/main.rs b/src/main.rs index c168050..42a6baf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -106,7 +106,14 @@ struct OptPrint { #[cfg(feature = "record")] #[derive(FromArgs)] #[argp(subcommand, name = "record")] -struct OptRecord {} +struct OptRecord { + /// Path to the CAs directory + #[argp(positional)] + ca_dir: String, + /// Path to the directory to store certificates + #[argp(positional)] + certs_dir: String, +} /// Record traffic #[derive(FromArgs)] @@ -179,7 +186,13 @@ async fn main() { record::print_records(&records, subopt.number); } #[cfg(feature = "record")] - Subcommand::Record(_subopt) => { + Subcommand::Record(subopt) => { + record::CERTIFICATES + .set(record::LyingCertificateRegistry::new( + &subopt.ca_dir, + &subopt.certs_dir, + )) + .unwrap(); record::make_record(&opt.record_file); } Subcommand::Remove(subopt) => { diff --git a/src/record.rs b/src/record.rs index 77dcb25..90052dd 100644 --- a/src/record.rs +++ b/src/record.rs @@ -1,7 +1,16 @@ +use crate::util::SigAlg; + +use dashmap::DashMap; +use log::error; +use openssl::{pkey::PKey, x509::X509}; use std::{ - collections::{BTreeMap, btree_map}, + collections::{BTreeMap, HashMap, btree_map}, io::{Read, Write}, - sync::mpsc::{Receiver, Sender, channel}, + path::PathBuf, + sync::{ + OnceLock, + mpsc::{Receiver, Sender, channel}, + }, }; const CLIENT_TO_SERVER: u8 = b'C'; @@ -28,6 +37,327 @@ static TEST_RECORD: &[(u64, &str, Direction, &[u8])] = //(1, "upload.wikimedia.org", Direction::ServerToClient, b"0\r\n\r\n"), ]; +#[derive(Debug)] +pub struct LyingCertificateRegistry { + by_name: DashMap, + cas: HashMap)>, + certs_dir: PathBuf, +} + +impl LyingCertificateRegistry { + pub fn new(ca_dir: &str, certs_dir: &str) -> Self { + Self { + by_name: DashMap::new(), + cas: crate::util::load_cas(ca_dir), + certs_dir: PathBuf::from(certs_dir), + } + } + + fn fetch(&self, servername: &str) -> Option<&'static openssl::ssl::SslContext> { + if let Some(entry) = self.by_name.get(servername) { + // Exact match + return Some(entry.value()); + } + // Iteratively remove subdomains, replacing them with wildcards. + let mut name = servername.to_string(); + loop { + if !name.contains('.') { + // We made it to the top level! + break; + } + if name.as_bytes()[0] == b'*' { + if !name[2..].contains('.') { + // We made it to the top level! + break; + } + name = format!("*{}", &name[name[2..].find('.').unwrap() + 2..]); + } else { + name = format!("*{}", &name[name.find('.').unwrap()..]); + } + if let Some(entry) = self.by_name.get(&name) { + return Some(entry.value()); + } + } + // If we are still here, it means the certificate is not in the registry yet. + + // Fetch certificate chain from the server + if let Some(cert_chain) = crate::util::fetch_server_cert_chain(servername) { + let mut parent = None; + let mut new_chain = Vec::new(); + for cert in cert_chain.iter().rev() { + //println!( + // "Old: {}", + // String::from_utf8(cert.to_text().unwrap()).unwrap() + //); + // Authority key type is not explicit in certificates, so we have to guess from vague signature algorithm and signature size. + let sig_type = cert.signature_algorithm(); + let sig = cert.signature(); + let sig_alg = match (sig_type.object().nid(), sig.len()) { + (openssl::nid::Nid::X9_62_PRIME256V1, _) => SigAlg::P256, + (openssl::nid::Nid::SECP384R1, _) => SigAlg::P384, + (openssl::nid::Nid::ECDSA_WITH_SHA256, _) => SigAlg::P256, + (openssl::nid::Nid::ECDSA_WITH_SHA384, _) => SigAlg::P384, + ( + openssl::nid::Nid::SHA1WITHRSAENCRYPTION + | openssl::nid::Nid::SHA224WITHRSAENCRYPTION + | openssl::nid::Nid::SHA256WITHRSAENCRYPTION + | openssl::nid::Nid::SHA384WITHRSAENCRYPTION + | openssl::nid::Nid::SHA512WITHRSAENCRYPTION, + 256, + ) => SigAlg::Rsa2048, + ( + openssl::nid::Nid::SHA1WITHRSAENCRYPTION + | openssl::nid::Nid::SHA224WITHRSAENCRYPTION + | openssl::nid::Nid::SHA256WITHRSAENCRYPTION + | openssl::nid::Nid::SHA384WITHRSAENCRYPTION + | openssl::nid::Nid::SHA512WITHRSAENCRYPTION, + 384, + ) => SigAlg::Rsa3072, + ( + openssl::nid::Nid::SHA1WITHRSAENCRYPTION + | openssl::nid::Nid::SHA224WITHRSAENCRYPTION + | openssl::nid::Nid::SHA256WITHRSAENCRYPTION + | openssl::nid::Nid::SHA384WITHRSAENCRYPTION + | openssl::nid::Nid::SHA512WITHRSAENCRYPTION, + 512, + ) => SigAlg::Rsa4096, + key => { + panic!("Unknown key type {key:?}"); + } + }; + let sig_hash = match sig_type.object().nid() { + openssl::nid::Nid::SHA1WITHRSAENCRYPTION => { + openssl::hash::MessageDigest::sha1() + } + openssl::nid::Nid::SHA224WITHRSAENCRYPTION => { + openssl::hash::MessageDigest::sha224() + } + openssl::nid::Nid::SHA256WITHRSAENCRYPTION + | openssl::nid::Nid::ECDSA_WITH_SHA256 => openssl::hash::MessageDigest::sha256(), + openssl::nid::Nid::SHA384WITHRSAENCRYPTION + | openssl::nid::Nid::ECDSA_WITH_SHA384 => openssl::hash::MessageDigest::sha384(), + openssl::nid::Nid::SHA512WITHRSAENCRYPTION => { + openssl::hash::MessageDigest::sha512() + } + o => panic!("Unknown hash {o:?}"), + }; + + let original_pk = cert.public_key().unwrap(); + let new_key = match (original_pk.id(), original_pk.bits()) { + (openssl::pkey::Id::EC, 256) => { + let key = openssl::ec::EcKey::generate( + &openssl::ec::EcGroup::from_curve_name( + openssl::nid::Nid::X9_62_PRIME256V1, + ) + .unwrap(), + ) + .unwrap(); + openssl::pkey::PKey::from_ec_key(key).unwrap() + } + (openssl::pkey::Id::EC, 384) => { + let key = openssl::ec::EcKey::generate( + &openssl::ec::EcGroup::from_curve_name(openssl::nid::Nid::SECP384R1) + .unwrap(), + ) + .unwrap(); + openssl::pkey::PKey::from_ec_key(key).unwrap() + } + (openssl::pkey::Id::RSA, 2048) => { + let key = openssl::rsa::Rsa::generate(2048).unwrap(); + openssl::pkey::PKey::from_rsa(key).unwrap() + } + (openssl::pkey::Id::RSA, 3072) => { + let key = openssl::rsa::Rsa::generate(3072).unwrap(); + openssl::pkey::PKey::from_rsa(key).unwrap() + } + (openssl::pkey::Id::RSA, 4096) => { + let key = openssl::rsa::Rsa::generate(4096).unwrap(); + openssl::pkey::PKey::from_rsa(key).unwrap() + } + key => { + panic!("Unknown key type {key:?}"); + } + }; + + if parent.is_none() { + // Highest certificate in the chain + // Sign it with our CA + let (ca_cert, ca_key) = self.cas.get(&sig_alg).unwrap(); + parent = Some((ca_cert.clone(), ca_key.clone())); + } + + let mut cert_builder = openssl::x509::X509::builder().unwrap(); + cert_builder + .set_issuer_name(parent.as_ref().unwrap().0.subject_name()) + .unwrap(); + cert_builder + .set_not_after( + openssl::asn1::Asn1Time::days_from_now(900) + .unwrap() + .as_ref(), + ) + .unwrap(); + cert_builder.set_not_before(cert.not_before()).unwrap(); + cert_builder + .set_serial_number(cert.serial_number()) + .unwrap(); + cert_builder.set_subject_name(cert.subject_name()).unwrap(); + cert_builder.set_version(cert.version()).unwrap(); + cert_builder.set_pubkey(new_key.as_ref()).unwrap(); + let x509_ctx = + cert_builder.x509v3_context(Some(parent.as_ref().unwrap().0.as_ref()), None); // TODO issuer + let mut new_exts = Vec::new(); + // rust-openssl cannot get extensions from X509 + let der = cert.to_der().unwrap(); + let (_, parsed_cert) = x509_parser::parse_x509_certificate(&der).unwrap(); + for ext in parsed_cert.extensions() { + match ext.parsed_extension() { + x509_parser::extensions::ParsedExtension::KeyUsage(v) => { + // Worst interface ever + let mut x = openssl::x509::extension::KeyUsage::new(); + if ext.critical { + x.critical(); + } + if v.digital_signature() { + x.digital_signature(); + } + if v.key_cert_sign() { + x.key_cert_sign(); + } + if v.crl_sign() { + x.crl_sign(); + } + new_exts.push(x.build().unwrap()); + } + x509_parser::extensions::ParsedExtension::ExtendedKeyUsage(v) => { + let mut x = openssl::x509::extension::ExtendedKeyUsage::new(); + if ext.critical { + x.critical(); + } + if v.server_auth { + x.server_auth(); + } + new_exts.push(x.build().unwrap()); + } + x509_parser::extensions::ParsedExtension::BasicConstraints(v) => { + let mut x = openssl::x509::extension::BasicConstraints::new(); + if ext.critical { + x.critical(); + } + if v.ca { + x.ca(); + } + new_exts.push(x.build().unwrap()); + } + x509_parser::extensions::ParsedExtension::SubjectKeyIdentifier(_v) => { + let mut x = openssl::x509::extension::SubjectKeyIdentifier::new(); + if ext.critical { + x.critical(); + } + new_exts.push(x.build(&x509_ctx).unwrap()); + } + x509_parser::extensions::ParsedExtension::AuthorityKeyIdentifier(v) => { + let mut x = openssl::x509::extension::AuthorityKeyIdentifier::new(); + if ext.critical { + x.critical(); + } + x.issuer(v.authority_cert_issuer.is_some()); + x.keyid(v.key_identifier.is_some()); + new_exts.push(x.build(&x509_ctx).unwrap()); + } + x509_parser::extensions::ParsedExtension::SubjectAlternativeName(v) => { + let mut x = openssl::x509::extension::SubjectAlternativeName::new(); + if ext.critical { + x.critical(); + } + for name in &v.general_names { + match name { + x509_parser::extensions::GeneralName::DNSName(n) => { + x.dns(n); + } + other => panic!("Unknown alternative name {other:?}"), + } + } + new_exts.push(x.build(&x509_ctx).unwrap()); + } + _ => { /* ¯\_(ツ)_/¯ */ } + } + //cert_builder.append_extension(ext).unwrap(); + } + for ext in new_exts { + cert_builder.append_extension(ext).unwrap(); + } + + if let Some((_parent_cert, parent_key)) = &parent { + cert_builder.sign(parent_key, sig_hash).unwrap(); + } + + let new_cert = cert_builder.build(); + + new_chain.push(new_cert.clone()); + parent = Some((new_cert, new_key)); + } + + let mut cert_file = std::fs::OpenOptions::new() + .truncate(true) + .write(true) + .create(true) + .open(PathBuf::from(&self.certs_dir).join(format!("{servername}.crt"))) + .unwrap(); + for cert in new_chain.iter().rev() { + //println!( + // "New: {}", + // String::from_utf8(cert.to_text().unwrap()).unwrap() + //); + cert_file.write_all(&cert.to_pem().unwrap()).unwrap(); + } + + let mut ctx_builder = + openssl::ssl::SslContext::builder(openssl::ssl::SslMethod::tls_server()).unwrap(); + let (new_cert, new_key) = parent.unwrap(); + ctx_builder.set_certificate(new_cert.as_ref()).unwrap(); + ctx_builder.set_private_key(new_key.as_ref()).unwrap(); + for cert in new_chain.into_iter().rev().skip(1) { + ctx_builder.add_extra_chain_cert(cert).unwrap(); + } + let ctx = ctx_builder.build(); + + let mut names: Vec = new_cert + .subject_name() + .entries() + .map(|e| { + let s: &str = &e.data().to_string().unwrap(); + s.to_string() + }) + .collect(); + if let Some(subject_alt_names) = new_cert.subject_alt_names() { + for alt_name in subject_alt_names { + let alt_name = alt_name.dnsname().unwrap(); + names.push(alt_name.to_string()); + } + } + Some(self.add_cert(names, ctx)) + } else { + error!("Fetching cert for `{servername}`: no certificate"); + None + } + } + + fn add_cert( + &self, + names: Vec, + ctx: openssl::ssl::SslContext, + ) -> &'static openssl::ssl::SslContext { + let ctx: &'static _ = Box::leak(Box::new(ctx)); + for name in names { + self.by_name.insert(name, ctx); + } + ctx + } +} + +pub static CERTIFICATES: OnceLock = OnceLock::new(); + fn write_record( file: &mut std::fs::File, direction: Direction, @@ -135,6 +465,18 @@ impl sslrelay::HandlerCallbacks for Handler { } } +fn servername_callback( + ssl: &mut openssl::ssl::SslRef, + _alert: &mut openssl::ssl::SslAlert, +) -> Result<(), openssl::ssl::SniError> { + if let Some(servername) = ssl.servername(openssl::ssl::NameType::HOST_NAME) + && let Some(ctx) = CERTIFICATES.get().unwrap().fetch(servername) + { + ssl.set_ssl_context(ctx.as_ref()).unwrap(); + } + Ok(()) +} + #[cfg(feature = "record")] pub fn make_record(path: &str) { let (mut recorder, sender) = Recorder::new(path); @@ -154,9 +496,8 @@ pub fn make_record(path: &str) { .unwrap_or_else(|| String::from("www.apple.com")) }, remote_port: "443".to_string(), - tls_config: sslrelay::TLSConfig::FILE { - certificate_path: "/dev/shm/exp/certs/prime256v1/all.crt".to_string(), - private_key_path: "/dev/shm/exp/certs/prime256v1/all.key".to_string(), + tls_config: sslrelay::TLSConfig::CALLBACK { + servername_callback, }, }, ); diff --git a/src/server.rs b/src/server.rs index 855d724..208dc66 100644 --- a/src/server.rs +++ b/src/server.rs @@ -216,14 +216,20 @@ pub async fn play( let mut break_next = false; //let mut previous = Vec::new(); loop { - let Ok(req) = - tokio::time::timeout(tokio::time::Duration::from_secs(5), stream.next()) - .await - else { - if break_next { - break; - } else { - continue; + let req = match tokio::time::timeout( + tokio::time::Duration::from_secs(5), + stream.next(), + ) + .await + { + Ok(req) => req, + Err(e) => { + println!("Error receiving for `{server_name}`: {e:?}"); + if break_next { + break; + } else { + continue; + } } }; let req = req.unwrap(); diff --git a/src/util.rs b/src/util.rs index c7194ea..1b24a4e 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,6 +1,8 @@ use crate::record::Direction; use log::info; +#[cfg(feature = "record")] +use std::collections::HashMap; use std::iter::Peekable; use tokio_rustls::rustls::crypto::CryptoProvider; @@ -429,3 +431,84 @@ pub fn init_provider() { _provider = CryptoProvider::install_default(prov); } } + +#[cfg(feature = "record")] +pub fn fetch_server_cert_chain(servername: &str) -> Option> { + use log::error; + let addr = dns_lookup::lookup_host(servername) + .inspect_err(|e| error!("Fetching cert for (DNS) `{servername}`: {e:?}")) + .ok()? + .next()?; + let stream = std::net::TcpStream::connect((addr, 443)) + .inspect_err(|e| error!("Fetching cert (connect) for `{servername}`: {e:?}")) + .ok()?; + let connector = openssl::ssl::SslConnector::builder(openssl::ssl::SslMethod::tls_client()) + .unwrap() + .build(); + let mut stream = connector + .connect(servername, stream) + .inspect_err(|e| error!("Fetching cert (TLS connect) for `{servername}`: {e:?}")) + .ok()?; + stream + .do_handshake() + .inspect_err(|e| error!("Fetching cert (handshake) for `{servername}`: {e:?}")) + .ok()?; + //stream.connect() + if let Some(cert_chain) = stream.ssl().peer_cert_chain() { + //println!("Chain:"); + //for cert in cert_chain { + // println!("{}", String::from_utf8(cert.to_text().unwrap()).unwrap()); + //} + Some(cert_chain.iter().map(|cert| cert.to_owned()).collect()) + } else { + use log::warn; + warn!("no certificate"); + None + } +} + +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] +pub enum SigAlg { + P256, + P384, + Rsa2048, + Rsa3072, + Rsa4096, +} + +#[cfg(feature = "record")] +pub fn load_cas( + ca_dir: &str, +) -> HashMap< + SigAlg, + ( + openssl::x509::X509, + openssl::pkey::PKey, + ), +> { + let mut cas = HashMap::new(); + for f in std::fs::read_dir(ca_dir).unwrap() { + let f = f.unwrap(); + if f.file_name().as_encoded_bytes().ends_with(b".crt") { + let cert = openssl::x509::X509::from_pem(&std::fs::read(f.path()).unwrap()).unwrap(); + let pk = cert.public_key().unwrap(); + let alg = match (pk.id(), pk.bits()) { + (openssl::pkey::Id::EC, 256) => SigAlg::P256, + (openssl::pkey::Id::EC, 384) => SigAlg::P384, + (openssl::pkey::Id::RSA, 2048) => SigAlg::Rsa2048, + (openssl::pkey::Id::RSA, 3072) => SigAlg::Rsa3072, + (openssl::pkey::Id::RSA, 4096) => SigAlg::Rsa4096, + key => { + panic!("Unknown key type {key:?}"); + } + }; + let mut key_path = f.path().to_str().unwrap().to_string(); + key_path.truncate(key_path.len() - 3); + key_path.push_str("key"); + let key = openssl::pkey::PKey::private_key_from_pem(&std::fs::read(key_path).unwrap()) + .unwrap(); + cas.insert(alg, (cert, key)); + } + } + cas +}