diff --git a/CHANGELOG.md b/CHANGELOG.md index f9c6b81..e8701e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ - Avoid using dropped handlers for HTTP proxies. +### Changed + +- Update dependencies. + ## 0.9.2 (2026-03-28) ### Added diff --git a/Cargo.lock b/Cargo.lock index d87f7ec..4865526 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,6 +27,16 @@ dependencies = [ "generic-array 0.14.7", ] +[[package]] +name = "aead" +version = "0.6.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b657e772794c6b04730ea897b66a058ccd866c16d1967da05eeeecec39043fe" +dependencies = [ + "crypto-common 0.2.1", + "inout 0.2.2", +] + [[package]] name = "aes" version = "0.8.4" @@ -34,8 +44,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", - "cipher", - "cpufeatures", + "cipher 0.4.4", + "cpufeatures 0.2.17", +] + +[[package]] +name = "aes" +version = "0.9.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04097e08a47d9ad181c2e1f4a5fabc9ae06ce8839a333ba9a949bcb0d31fd2a3" +dependencies = [ + "cipher 0.5.1", + "cpubits", + "cpufeatures 0.2.17", ] [[package]] @@ -44,11 +65,25 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", + "aead 0.5.2", + "aes 0.8.4", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash 0.5.1", + "subtle", +] + +[[package]] +name = "aes-gcm" +version = "0.11.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22c0c90bbe8d4f77c3ca9ddabe41a1f8382d6fc1f7cea89459d0f320371f972" +dependencies = [ + "aead 0.6.0-rc.10", + "aes 0.9.0-rc.4", + "cipher 0.5.1", + "ctr 0.10.0-rc.4", + "ghash 0.6.0", "subtle", ] @@ -195,7 +230,7 @@ checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" dependencies = [ "base64ct", "blake2", - "cpufeatures", + "cpufeatures 0.2.17", "password-hash", ] @@ -476,15 +511,15 @@ dependencies = [ [[package]] name = "base16ct" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "d8b59d472eab27ade8d770dcb11da7201c11234bef9f82ce7aa517be028d462b" [[package]] name = "base16ct" -version = "0.3.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b59d472eab27ade8d770dcb11da7201c11234bef9f82ce7aa517be028d462b" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" [[package]] name = "base64" @@ -505,7 +540,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2" dependencies = [ "blowfish", - "pbkdf2", + "pbkdf2 0.12.2", "sha2 0.10.9", ] @@ -541,11 +576,11 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96eb4cdd6cf1b31d671e9efe75c5d1ec614776856cefbe109ca373554a6d514f" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" dependencies = [ - "hybrid-array 0.4.5", + "hybrid-array", ] [[package]] @@ -568,6 +603,15 @@ dependencies = [ "generic-array 0.14.7", ] +[[package]] +name = "block-padding" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" +dependencies = [ + "hybrid-array", +] + [[package]] name = "blocking" version = "1.6.2" @@ -588,7 +632,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" dependencies = [ "byteorder", - "cipher", + "cipher 0.4.4", ] [[package]] @@ -655,7 +699,16 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ - "cipher", + "cipher 0.4.4", +] + +[[package]] +name = "cbc" +version = "0.2.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab1412b9ae2463ede01f1e591412dfbcfeacecf40e8c4c3e0655814c19065c38" +dependencies = [ + "cipher 0.5.1", ] [[package]] @@ -695,8 +748,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", - "cipher", - "cpufeatures", + "cipher 0.4.4", + "cpufeatures 0.2.17", +] + +[[package]] +name = "chacha20" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.0", ] [[package]] @@ -734,7 +798,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common 0.1.7", - "inout", + "inout 0.1.4", +] + +[[package]] +name = "cipher" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34d8227fe1ba289043aeb13792056ff80fd6de1a9f49137a5f499de8e8c78ea" +dependencies = [ + "block-buffer 0.12.0", + "crypto-common 0.2.1", + "inout 0.2.2", ] [[package]] @@ -786,6 +861,12 @@ dependencies = [ "cc", ] +[[package]] +name = "cmov" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" + [[package]] name = "color-eyre" version = "0.6.5" @@ -931,6 +1012,12 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "cpubits" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef0c543070d296ea414df2dd7625d1b24866ce206709d8a4a424f28377f5861" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -940,6 +1027,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -1018,24 +1114,16 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-bigint" -version = "0.7.0-rc.10" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6715836b4946e8585016e80b79c7561476aff3b22f7b756778e7b109d86086c6" +checksum = "42a0d26b245348befa0c121944541476763dcc46ede886c88f9d12e1697d27c3" dependencies = [ + "cpubits", + "ctutils", + "getrandom 0.4.2", + "hybrid-array", "num-traits", - "rand_core 0.10.0-rc-3", + "rand_core 0.10.0", "serdect", "subtle", "zeroize", @@ -1053,22 +1141,24 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.0-rc.5" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919bd05924682a5480aec713596b9e2aabed3a0a6022fab6847f85a99e5f190a" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" dependencies = [ - "hybrid-array 0.4.5", + "getrandom 0.4.2", + "hybrid-array", + "rand_core 0.10.0", ] [[package]] name = "crypto-primes" -version = "0.7.0-pre.4" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd9b2855017318a49714c07ee8895b89d3510d54fa6d86be5835de74c389609" +checksum = "21f41f23de7d24cdbda7f0c4d9c0351f99a4ceb258ef30e5c1927af8987ffe5a" dependencies = [ - "crypto-bigint 0.7.0-rc.10", + "crypto-bigint", "libm", - "rand_core 0.10.0-rc-3", + "rand_core 0.10.0", ] [[package]] @@ -1077,19 +1167,38 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher", + "cipher 0.4.4", +] + +[[package]] +name = "ctr" +version = "0.10.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee683dd898fbd052617b4514bc31f98bc32081a83b69ec46adef3b1ef4ae36f" +dependencies = [ + "cipher 0.5.1", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", + "subtle", ] [[package]] name = "curve25519-dalek" -version = "4.1.3" +version = "5.0.0-pre.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "335f1947f241137a14106b6f5acc5918a5ede29c9d71d3f2cb1678d5075d9fc3" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", - "digest 0.10.7", + "digest 0.11.2", "fiat-crypto", "rustc_version", "subtle", @@ -1224,20 +1333,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid 0.9.6", - "pem-rfc7468 0.7.0", - "zeroize", -] - -[[package]] -name = "der" -version = "0.8.0-rc.10" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c1d73e9668ea6b6a28172aa55f3ebec38507131ce179051c8033b5c6037653" +checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" dependencies = [ "const-oid 0.10.1", "pem-rfc7468 1.0.0", @@ -1303,13 +1401,14 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.0-rc.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea390c940e465846d64775e55e3115d5dc934acb953de6f6e6360bc232fe2bf7" +checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" dependencies = [ - "block-buffer 0.11.0", + "block-buffer 0.12.0", "const-oid 0.10.1", - "crypto-common 0.2.0-rc.5", + "crypto-common 0.2.1", + "ctutils", ] [[package]] @@ -1370,39 +1469,41 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.9" +version = "0.17.0-rc.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "91bbdd377139884fafcad8dc43a760a3e1e681aa26db910257fa6535b70e1829" dependencies = [ - "der 0.7.10", - "digest 0.10.7", + "der", + "digest 0.11.2", "elliptic-curve", "rfc6979", - "signature 2.2.0", - "spki 0.7.3", + "signature", + "spki", + "zeroize", ] [[package]] name = "ed25519" -version = "2.2.3" +version = "3.0.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +checksum = "c6e914c7c52decb085cea910552e24c63ac019e3ab8bf001ff736da9a9d9d890" dependencies = [ - "pkcs8 0.10.2", - "signature 2.2.0", + "pkcs8", + "signature", ] [[package]] name = "ed25519-dalek" -version = "2.2.0" +version = "3.0.0-pre.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +checksum = "053618a4c3d3bc24f188aa660ae75a46eeab74ef07fb415c61431e5e7cd4749b" dependencies = [ "curve25519-dalek", "ed25519", - "rand_core 0.6.4", + "rand_core 0.10.0", "serde", - "sha2 0.10.9", + "sha2 0.11.0", + "signature", "subtle", "zeroize", ] @@ -1415,20 +1516,22 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.14.0-rc.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "e84043d573efd4ac9d2d125817979a379204bf7e328b25a4a30487e8d100e618" dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.5", - "digest 0.10.7", - "ff", - "generic-array 0.14.7", - "group", + "base16ct 1.0.0", + "crypto-bigint", + "crypto-common 0.2.1", + "digest 0.11.2", "hkdf", - "pem-rfc7468 0.7.0", - "pkcs8 0.10.2", - "rand_core 0.6.4", + "hybrid-array", + "once_cell", + "pem-rfc7468 1.0.0", + "pkcs8", + "rand_core 0.10.0", + "rustcrypto-ff", + "rustcrypto-group", "sec1", "subtle", "zeroize", @@ -1567,21 +1670,11 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "fiat-crypto" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[package]] name = "fid-rs" @@ -1803,7 +1896,6 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -1839,11 +1931,25 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.0", + "wasip2", + "wasip3", +] + [[package]] name = "ghash" version = "0.5.1" @@ -1851,25 +1957,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ "opaque-debug", - "polyval", + "polyval 0.6.2", ] [[package]] -name = "gimli" -version = "0.32.3" +name = "ghash" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" +checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5" +dependencies = [ + "polyval 0.7.1", +] [[package]] -name = "group" -version = "0.13.0" +name = "gimli" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "h2" @@ -1938,9 +2042,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-literal" -version = "0.4.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +checksum = "e712f64ec3850b98572bffac52e2c6f282b29fe6c5fa6d42334b30be438d95c1" [[package]] name = "hickory-proto" @@ -1990,11 +2094,11 @@ dependencies = [ [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ - "hmac", + "hmac 0.13.0", ] [[package]] @@ -2006,6 +2110,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "hmac" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" +dependencies = [ + "digest 0.11.2", +] + [[package]] name = "http" version = "1.4.0" @@ -2059,20 +2172,14 @@ checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hybrid-array" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d35805454dc9f8662a98d6d61886ffe26bd465f5960e0e55345c70d5c0d2a9" -dependencies = [ - "typenum", -] - -[[package]] -name = "hybrid-array" -version = "0.4.5" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f471e0a81b2f90ffc0cb2f951ae04da57de8baa46fa99112b062a5173a5088d0" +checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" dependencies = [ + "ctutils", + "subtle", "typenum", + "zeroize", ] [[package]] @@ -2246,6 +2353,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -2287,6 +2400,8 @@ checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", "hashbrown 0.16.1", + "serde", + "serde_core", ] [[package]] @@ -2324,10 +2439,20 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "block-padding", + "block-padding 0.3.3", "generic-array 0.14.7", ] +[[package]] +name = "inout" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" +dependencies = [ + "block-padding 0.4.2", + "hybrid-array", +] + [[package]] name = "insta" version = "1.46.3" @@ -2356,35 +2481,45 @@ dependencies = [ [[package]] name = "internal-russh-forked-ssh-key" -version = "0.6.16+upstream-0.6.7" +version = "0.6.18+upstream-0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe44f2bbd99fcb302e246e2d6bcf51aeda346d02a365f80296a07a8c711b6da6" +checksum = "25f8a978272e3cbdf4768f7363eb1c8e1e6ba63c52a3ed05e29e222da4aec7cb" dependencies = [ "argon2", "bcrypt-pbkdf", - "digest 0.11.0-rc.4", + "crypto-bigint", "ecdsa", "ed25519-dalek", "hex", - "hmac", + "hmac 0.13.0", "num-bigint-dig", "p256", "p384", "p521", - "rand_core 0.6.4", + "rand_core 0.10.0", "rsa", "sec1", - "sha1 0.10.6", - "sha1 0.11.0-rc.3", - "sha2 0.10.9", - "signature 2.2.0", - "signature 3.0.0-rc.5", + "sha1 0.11.0", + "sha2 0.11.0", + "signature", "ssh-cipher", "ssh-encoding", "subtle", "zeroize", ] +[[package]] +name = "internal-russh-num-bigint" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8e22120c32fb4d19ec55fba35015f57095cd95a2e3b732e44457f5915b2ee8" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.10.0", + "rand_core 0.10.0", +] + [[package]] name = "ipconfig" version = "0.3.2" @@ -2534,21 +2669,22 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.6" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" dependencies = [ - "cpufeatures", + "cfg-if", + "cpufeatures 0.3.0", ] [[package]] name = "kem" -version = "0.3.0-pre.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8645470337db67b01a7f966decf7d0bafedbae74147d33e641c67a91df239f" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" dependencies = [ - "rand_core 0.6.4", - "zeroize", + "crypto-common 0.2.1", + "rand_core 0.10.0", ] [[package]] @@ -2580,6 +2716,12 @@ dependencies = [ "spin", ] +[[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.182" @@ -2769,13 +2911,14 @@ dependencies = [ [[package]] name = "ml-kem" -version = "0.2.3" +version = "0.3.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de49b3df74c35498c0232031bb7e85f9389f913e2796169c8ab47a53993a18f" +checksum = "04437cb1a66c0b78740927b76cc61f218344b9f6ef3dd430e283274a718ef0e9" dependencies = [ - "hybrid-array 0.2.3", + "hybrid-array", "kem", - "rand_core 0.6.4", + "module-lattice", + "rand_core 0.10.0", "sha3", ] @@ -2805,6 +2948,17 @@ dependencies = [ "syn", ] +[[package]] +name = "module-lattice" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cbdc2ac6ead7d0889a5d96e70b7f11a8812702a100ca7c65c5c71fdf076e182" +dependencies = [ + "ctutils", + "hybrid-array", + "num-traits", +] + [[package]] name = "moka" version = "0.12.12" @@ -2822,18 +2976,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "cfg_aliases", - "libc", -] - [[package]] name = "nix" version = "0.31.2" @@ -2906,7 +3048,6 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", - "rand 0.8.5", ] [[package]] @@ -3094,40 +3235,43 @@ dependencies = [ [[package]] name = "p256" -version = "0.13.2" +version = "0.14.0-rc.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +checksum = "44f0a10fe314869359cb2901342b045f4e5a962ef9febc006f03d2a8c848fe4c" dependencies = [ "ecdsa", "elliptic-curve", + "primefield", "primeorder", - "sha2 0.10.9", + "sha2 0.11.0", ] [[package]] name = "p384" -version = "0.13.1" +version = "0.14.0-rc.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +checksum = "b079e66810c55ab3d6ba424e056dc4aefcdb8046c8c3f3816142edbdd7af7721" dependencies = [ "ecdsa", "elliptic-curve", + "fiat-crypto", + "primefield", "primeorder", - "sha2 0.10.9", + "sha2 0.11.0", ] [[package]] name = "p521" -version = "0.13.3" +version = "0.14.0-rc.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" +checksum = "9eecc34c4c6e6596d5271fecf90ac4f16593fa198e77282214d0c22736aa9266" dependencies = [ - "base16ct 0.2.0", + "base16ct 1.0.0", "ecdsa", "elliptic-curve", + "primefield", "primeorder", - "rand_core 0.6.4", - "sha2 0.10.9", + "sha2 0.11.0", ] [[package]] @@ -3196,7 +3340,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", +] + +[[package]] +name = "pbkdf2" +version = "0.13.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f24f3eb2f4471b1730d59e4b730b747939960a8c7eb0c33c5a9076f2d3dddea" +dependencies = [ + "digest 0.11.2", + "hmac 0.13.0", ] [[package]] @@ -3262,45 +3416,37 @@ version = "0.8.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "986d2e952779af96ea048f160fd9194e1751b4faea78bcf3ceb456efe008088e" dependencies = [ - "der 0.8.0-rc.10", - "spki 0.8.0-rc.4", + "der", + "spki", ] [[package]] name = "pkcs5" -version = "0.7.1" +version = "0.8.0-rc.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" +checksum = "c5a777c6e26664bc9504b3ce3f6133f8f20d9071f130a4f9fcbd3186959d8dd6" dependencies = [ - "aes", - "cbc", - "der 0.7.10", - "pbkdf2", + "aes 0.9.0-rc.4", + "aes-gcm 0.11.0-rc.3", + "cbc 0.2.0-rc.4", + "der", + "pbkdf2 0.13.0-rc.10", + "rand_core 0.10.0", "scrypt", - "sha2 0.10.9", - "spki 0.7.3", + "sha2 0.11.0", + "spki", ] [[package]] name = "pkcs8" -version = "0.10.2" +version = "0.11.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "12922b6296c06eb741b02d7b5161e3aaa22864af38dfa025a1a3ba3f68c84577" dependencies = [ - "der 0.7.10", + "der", "pkcs5", - "rand_core 0.6.4", - "spki 0.7.3", -] - -[[package]] -name = "pkcs8" -version = "0.11.0-rc.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77089aec8290d0b7bb01b671b091095cf1937670725af4fd73d47249f03b12c0" -dependencies = [ - "der 0.8.0-rc.10", - "spki 0.8.0-rc.4", + "rand_core 0.10.0", + "spki", ] [[package]] @@ -3329,9 +3475,9 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", - "universal-hash", + "universal-hash 0.5.1", ] [[package]] @@ -3341,9 +3487,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", - "universal-hash", + "universal-hash 0.5.1", +] + +[[package]] +name = "polyval" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dfc63250416fea14f5749b90725916a6c903f599d51cb635aa7a52bfd03eede" +dependencies = [ + "cpubits", + "cpufeatures 0.3.0", + "universal-hash 0.6.1", ] [[package]] @@ -3428,11 +3585,25 @@ dependencies = [ "syn", ] +[[package]] +name = "primefield" +version = "0.14.0-rc.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6543f5eec854fbf74ba5ef651fbdc9408919b47c3e1526623687135c16d12e9" +dependencies = [ + "crypto-bigint", + "crypto-common 0.2.1", + "rand_core 0.10.0", + "rustcrypto-ff", + "subtle", + "zeroize", +] + [[package]] name = "primeorder" -version = "0.13.6" +version = "0.14.0-rc.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +checksum = "569d9ad6ef822bb0322c7e7d84e5e286244050bd5246cac4c013535ae91c2c90" dependencies = [ "elliptic-curve", ] @@ -3542,6 +3713,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" version = "0.8.5" @@ -3563,6 +3740,17 @@ dependencies = [ "rand_core 0.9.3", ] +[[package]] +name = "rand" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" +dependencies = [ + "chacha20 0.10.0", + "getrandom 0.4.2", + "rand_core 0.10.0", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -3583,6 +3771,16 @@ dependencies = [ "rand_core 0.9.3", ] +[[package]] +name = "rand_chacha" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e6af7f3e25ded52c41df4e0b1af2d047e45896c2f3281792ed68a1c243daedb" +dependencies = [ + "ppv-lite86", + "rand_core 0.10.0", +] + [[package]] name = "rand_core" version = "0.6.4" @@ -3603,9 +3801,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.10.0-rc-3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f66ee92bc15280519ef199a274fe0cafff4245d31bc39aaa31c011ad56cb1f05" +checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" [[package]] name = "rand_pcg" @@ -3618,11 +3816,11 @@ dependencies = [ [[package]] name = "rand_seeder" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502927fdfc3c9645d53e0c95bb2d53783b5a15bfeaeeb96f7703c21fbb76841e" +checksum = "45225a2ea2a8f7b2038a32088f3cc551ff50d764ffea05525f84cbfb5ee06626" dependencies = [ - "rand_core 0.9.3", + "rand_core 0.10.0", ] [[package]] @@ -3844,11 +4042,11 @@ checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "rfc6979" -version = "0.4.0" +version = "0.5.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "23a3127ee32baec36af75b4107082d9bd823501ec14a4e016be4b6b37faa74ae" dependencies = [ - "hmac", + "hmac 0.13.0", "subtle", ] @@ -3868,42 +4066,43 @@ dependencies = [ [[package]] name = "rsa" -version = "0.10.0-rc.10" +version = "0.10.0-rc.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e499c52862d75a86c0024cc99dcb6d7127d15af3beae7b03573d62fab7ade08a" +checksum = "87ed3e93fc7e473e464b9726f4759659e72bc8665e4b8ea227547024f416d905" dependencies = [ "const-oid 0.10.1", - "crypto-bigint 0.7.0-rc.10", + "crypto-bigint", "crypto-primes", - "digest 0.11.0-rc.4", + "digest 0.11.2", "pkcs1", - "pkcs8 0.11.0-rc.8", - "rand_core 0.10.0-rc-3", - "sha2 0.11.0-rc.3", - "signature 3.0.0-rc.5", - "spki 0.8.0-rc.4", - "subtle", + "pkcs8", + "rand_core 0.10.0", + "sha2 0.11.0", + "signature", + "spki", "zeroize", ] [[package]] name = "russh" -version = "0.58.1" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d53bd2e1d6c49e32ae183c09bdc710ace41e7c8c564cc8a2286aad3bffe10d" +checksum = "3b530252dc3ff163b73a7e48c97b925450d2ca53edcb466a46ad0a231e45f998" dependencies = [ - "aes", + "aes 0.8.4", "aws-lc-rs", "bitflags 2.10.0", - "block-padding", + "block-padding 0.3.3", "byteorder", "bytes", - "cbc", - "ctr", + "cbc 0.1.2", + "cipher 0.5.1", + "crypto-bigint", + "ctr 0.9.2", "curve25519-dalek", "data-encoding", "delegate", - "der 0.7.10", + "der", "digest 0.10.7", "ecdsa", "ed25519-dalek", @@ -3914,49 +4113,52 @@ dependencies = [ "generic-array 1.3.5", "getrandom 0.2.16", "hex-literal", - "hmac", - "inout", + "hmac 0.12.1", + "inout 0.1.4", "internal-russh-forked-ssh-key", + "internal-russh-num-bigint", "log", "md5", "ml-kem", - "num-bigint", + "module-lattice", "p256", "p384", "p521", "pageant", - "pbkdf2", + "pbkdf2 0.12.2", "pkcs1", "pkcs5", - "pkcs8 0.10.2", - "rand 0.9.2", - "rand_core 0.10.0-rc-3", + "pkcs8", + "polyval 0.7.1", + "rand 0.10.0", + "rand_core 0.10.0", "rsa", "russh-cryptovec", "russh-util", "sec1", "sha1 0.10.6", "sha2 0.10.9", - "signature 2.2.0", - "spki 0.7.3", + "signature", + "spki", "ssh-encoding", "subtle", "thiserror 2.0.18", "tokio", "typenum", + "universal-hash 0.6.1", "zeroize", ] [[package]] name = "russh-cryptovec" -version = "0.58.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc109749696a6853cf2c3fba3537635264f3519a78a9f43c6b08c91edc024384" +checksum = "36140e8a20297bc2e8338807c3d9ca911f7fa49d7539cbcd6d48d3befd70efd8" dependencies = [ "log", - "nix 0.29.0", + "nix", "ssh-encoding", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3998,6 +4200,27 @@ dependencies = [ "semver", ] +[[package]] +name = "rustcrypto-ff" +version = "0.14.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd2a8adb347447693cd2ba0d218c4b66c62da9b0a5672b17b981e4291ec65ff6" +dependencies = [ + "rand_core 0.10.0", + "subtle", +] + +[[package]] +name = "rustcrypto-group" +version = "0.14.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "369f9b61aa45933c062c9f6b5c3c50ab710687eca83dd3802653b140b43f85ed" +dependencies = [ + "rand_core 0.10.0", + "rustcrypto-ff", + "subtle", +] + [[package]] name = "rusticata-macros" version = "4.1.0" @@ -4155,11 +4378,12 @@ checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea" [[package]] name = "salsa20" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c" dependencies = [ - "cipher", + "cfg-if", + "cipher 0.5.1", ] [[package]] @@ -4204,13 +4428,13 @@ dependencies = [ "metrics", "metrics-exporter-prometheus", "mockall", - "nix 0.31.2", + "nix", "notify", "openssl", "owo-colors", "pretty-duration", - "rand 0.9.2", - "rand_chacha 0.9.0", + "rand 0.10.0", + "rand_chacha 0.10.0", "rand_seeder", "ratatui", "regex", @@ -4259,25 +4483,26 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" -version = "0.11.0" +version = "0.12.0-rc.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +checksum = "e03ed5b54ed5fcc8e016cd94301416bc2c01c05c87a6742b97468337c8804598" dependencies = [ - "pbkdf2", + "cfg-if", + "pbkdf2 0.13.0-rc.10", "salsa20", - "sha2 0.10.9", + "sha2 0.11.0", ] [[package]] name = "sec1" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ - "base16ct 0.2.0", - "der 0.7.10", - "generic-array 0.14.7", - "pkcs8 0.10.2", + "base16ct 1.0.0", + "ctutils", + "der", + "hybrid-array", "subtle", "zeroize", ] @@ -4394,19 +4619,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", ] [[package]] name = "sha1" -version = "0.11.0-rc.3" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa1ae819b9870cadc959a052363de870944a1646932d274a4e270f64bf79e5ef" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", - "cpufeatures", - "digest 0.11.0-rc.4", + "cpufeatures 0.3.0", + "digest 0.11.2", ] [[package]] @@ -4416,28 +4641,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", ] [[package]] name = "sha2" -version = "0.11.0-rc.3" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d43dc0354d88b791216bb5c1bfbb60c0814460cc653ae0ebd71f286d0bd927" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures", - "digest 0.11.0-rc.4", + "cpufeatures 0.3.0", + "digest 0.11.2", ] [[package]] name = "sha3" -version = "0.10.8" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" dependencies = [ - "digest 0.10.7", + "digest 0.11.2", "keccak", ] @@ -4488,22 +4713,12 @@ dependencies = [ [[package]] name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "signature" -version = "3.0.0-rc.5" +version = "3.0.0-rc.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0251c9d6468f4ba853b6352b190fb7c1e405087779917c238445eb03993826" +checksum = "7f1880df446116126965eeec169136b2e0251dba37c6223bcc819569550edea3" dependencies = [ - "digest 0.11.0-rc.4", - "rand_core 0.10.0-rc-3", + "digest 0.11.2", + "rand_core 0.10.0", ] [[package]] @@ -4562,16 +4777,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der 0.7.10", -] - [[package]] name = "spki" version = "0.8.0-rc.4" @@ -4579,7 +4784,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8baeff88f34ed0691978ec34440140e1572b68c7dd4a495fd14a3dc1944daa80" dependencies = [ "base64ct", - "der 0.8.0-rc.10", + "der", ] [[package]] @@ -4588,12 +4793,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" dependencies = [ - "aes", - "aes-gcm", - "cbc", - "chacha20", - "cipher", - "ctr", + "aes 0.8.4", + "aes-gcm 0.10.3", + "cbc 0.1.2", + "chacha20 0.9.1", + "cipher 0.4.4", + "ctr 0.9.2", "poly1305", "ssh-encoding", "subtle", @@ -5215,6 +5420,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "universal-hash" version = "0.5.1" @@ -5225,6 +5436,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "universal-hash" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" +dependencies = [ + "crypto-common 0.2.1", + "ctutils", +] + [[package]] name = "untrusted" version = "0.7.1" @@ -5360,7 +5581,16 @@ version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.46.0", +] + +[[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" +dependencies = [ + "wit-bindgen 0.51.0", ] [[package]] @@ -5421,6 +5651,40 @@ 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 2.10.0", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + [[package]] name = "web-sys" version = "0.3.83" @@ -5939,6 +6203,94 @@ version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +[[package]] +name = "wit-bindgen" +version = "0.51.0" +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 2.10.0", + "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", +] + [[package]] name = "writeable" version = "0.6.2" diff --git a/Cargo.toml b/Cargo.toml index 6dc42ed..511c912 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -53,14 +53,14 @@ metrics-exporter-prometheus = { version = "0.18.1", optional = true } notify = "8.2.0" owo-colors = { version = "4.3.0", features = [ "supports-colors" ] } pretty-duration = "0.1.1" -rand = { version = "0.9.2", default-features = false, features = [ +rand = { version = "0.10.0", default-features = false, features = [ "std", "std_rng", - "os_rng", + "sys_rng", "thread_rng", ] } -rand_chacha = "0.9.0" -rand_seeder = "0.4.0" +rand_chacha = "0.10.0" +rand_seeder = "0.5.0" ratatui = { version = "0.30.0", default-features = false, features = [ "crossterm", ] } @@ -71,7 +71,7 @@ reqwest = { version = "0.13.2", optional = true, default-features = false, featu "json", "rustls", ] } -russh = "0.58.1" +russh = "0.60.0" rustls = "0.23.37" rustls-acme = { version = "0.15.1", optional = true, default-features = false, features = [ "tokio", diff --git a/nix/checks.nix b/nix/checks.nix index 2a90803..c64466e 100644 --- a/nix/checks.nix +++ b/nix/checks.nix @@ -99,4 +99,12 @@ machine.wait_for_unit("sandhole-nextest.service") ''; }; + + sandhole-module-test-blacklist = pkgs.testers.runNixOSTest ( + import ./modules/tests/blacklist.nix { inherit pkgs sandhole; } + ); + + sandhole-module-test-with-container = pkgs.testers.runNixOSTest ( + import ./modules/tests/with-container.nix { inherit pkgs sandhole; } + ); } diff --git a/nix/modules/tests/blacklist.nix b/nix/modules/tests/blacklist.nix new file mode 100644 index 0000000..c3533d2 --- /dev/null +++ b/nix/modules/tests/blacklist.nix @@ -0,0 +1,193 @@ +# Set up a Sandhole server with HTTPS certificates, +# a proxied service in a different machine, and a +# client who's blacklisted by Sandhole. + +{ pkgs, sandhole, ... }: + +let + pubKeys = "${../../../tests/data/user_keys}"; + privKey = "${../../../tests/data/private_keys/key1}"; + + sandholeCerts = import ./generate-certs.nix { + inherit pkgs; + domain = "sandhole.nix"; + }; +in + +{ + name = "sandhole-module-test-blacklist"; + + nodes = { + # The reverse proxy running Sandhole. + sandhole = + { lib, ... }: + with lib; + { + imports = [ ../sandhole.nix ]; + virtualisation.vlans = [ 10 ]; + networking = { + useDHCP = false; + interfaces.eth1 = { + useDHCP = false; + ipv4 = { + addresses = [ + { + address = "192.168.10.10"; + prefixLength = 24; + } + ]; + routes = mkForce [ + { + address = "0.0.0.0"; + prefixLength = 0; + via = "192.168.10.1"; + } + ]; + }; + }; + nameservers = [ + "8.8.8.8" + "8.8.4.4" + ]; + }; + services.sandhole = { + enable = true; + package = sandhole; + openFirewall = true; + settings = { + domain = "sandhole.nix"; + user-keys-directory = pubKeys; + certificates-directory = sandholeCerts; + bind-hostnames = "all"; + ip-blocklist = "192.168.10.30/32"; + force-https = true; + }; + }; + }; + + # The server that will be proxied via SSH. + server = + { lib, ... }: + with lib; + { + virtualisation.vlans = [ 10 ]; + networking = { + useDHCP = false; + interfaces.eth1 = { + useDHCP = false; + ipv4 = { + addresses = [ + { + address = "192.168.10.20"; + prefixLength = 24; + } + ]; + routes = mkForce [ + { + address = "0.0.0.0"; + prefixLength = 0; + via = "192.168.10.1"; + } + ]; + }; + }; + firewall.allowedTCPPorts = [ 80 ]; + }; + + users.users.autossh = { + isNormalUser = true; + }; + users.groups.autossh = { }; + + services.nginx = { + enable = true; + virtualHosts.localhost = { + locations."/" = { + return = "200 '
Hello, NixOS!'"; + extraConfig = '' + default_type text/html; + ''; + }; + }; + }; + + services.autossh.sessions = [ + { + name = "sandhole"; + user = "autossh"; + extraArguments = '' + -i ${privKey} \ + -o StrictHostKeyChecking=accept-new \ + -o ServerAliveInterval=30 \ + -R hello.sandhole.nix:443:localhost:80 \ + -p 2222 \ + 192.168.10.10 + ''; + } + ]; + }; + + # The client that will be blocked from accessing Sandhole. + blocked = + { lib, ... }: + with lib; + { + virtualisation.vlans = [ 10 ]; + networking = { + useDHCP = false; + interfaces.eth1 = { + useDHCP = false; + ipv4 = { + addresses = [ + { + address = "192.168.10.30"; + prefixLength = 24; + } + ]; + routes = mkForce [ + { + address = "0.0.0.0"; + prefixLength = 0; + via = "192.168.10.1"; + } + ]; + }; + }; + }; + }; + }; + + testScript = '' + sandhole.start() + sandhole.wait_for_unit("sandhole.service") + sandhole.wait_for_open_port(2222) + + with subtest("connect to Sandhole"): + server.start() + server.wait_for_unit("autossh-sandhole.service") + server.wait_until_succeeds( + "${pkgs.curl}/bin/curl --fail" + " --resolve hello.sandhole.nix:443:192.168.10.10" + " --cacert ${sandholeCerts}/ca.cert.pem" + " https://hello.sandhole.nix" + " | grep 'Hello, NixOS!'", + timeout=30, + ) + + with subtest("get blocklisted by Sandhole"): + blocked.start() + blocked.wait_for_unit("network.target") + blocked.wait_until_succeeds( + "${pkgs.curl}/bin/curl --fail" + " http://192.168.10.20" + " | grep 'Hello, NixOS!'", + timeout=30, + ) + blocked.fail( + "${pkgs.curl}/bin/curl --fail" + " --resolve hello.sandhole.nix:443:192.168.10.10" + " --cacert ${sandholeCerts}/ca.cert.pem" + " https://hello.sandhole.nix" + ) + ''; +} diff --git a/nix/modules/tests/generate-certs.nix b/nix/modules/tests/generate-certs.nix new file mode 100644 index 0000000..e781934 --- /dev/null +++ b/nix/modules/tests/generate-certs.nix @@ -0,0 +1,35 @@ +# Copy of nixpkgs/nixos/tests/common/acme/server/generate-certs.nix +# to generate wildcard certificates with the directory +# structure expected by Sandhole. +{ + pkgs, + domain, + minica ? pkgs.minica, + mkDerivation ? pkgs.stdenv.mkDerivation, +}: + +let + caKey = ../../../tests/data/ca/rootCA-key.pem; + caCert = ../../../tests/data/ca/rootCA.pem; +in + +mkDerivation { + name = "sandhole-generate-certs"; + nativeBuildInputs = [ minica ]; + dontUnpack = true; + + buildPhase = '' + minica \ + --ca-key ${caKey} \ + --ca-cert ${caCert} \ + --domains '${domain},*.${domain}' + ''; + + installPhase = '' + mkdir -p $out/${domain} + cp ${caKey} $out/ca.key.pem + cp ${caCert} $out/ca.cert.pem + cp ${domain}/key.pem $out/${domain}/privkey.pem + cp ${domain}/cert.pem $out/${domain}/fullchain.pem + ''; +} diff --git a/nix/modules/tests/with-container.nix b/nix/modules/tests/with-container.nix new file mode 100644 index 0000000..76d64cb --- /dev/null +++ b/nix/modules/tests/with-container.nix @@ -0,0 +1,90 @@ +# Set up a Sandhole server without any privileged ports, +# and a container on the same machine running httpd, +# which will be proxied via Sandhole. + +{ pkgs, sandhole, ... }: + +let + pubKeys = "${../../../tests/data/user_keys}"; + privKey = "${../../../tests/data/private_keys/key1}"; +in + +{ + name = "sandhole-module-test-with-container"; + + nodes.machine = + { ... }: + { + imports = [ ../sandhole.nix ]; + virtualisation.vlans = [ 10 ]; + networking = { + nameservers = [ + "8.8.8.8" + "8.8.4.4" + ]; + }; + + services.sandhole = { + enable = true; + package = sandhole; + openFirewall = true; + settings = { + domain = "sandhole.nix"; + user-keys-directory = pubKeys; + bind-hostnames = "all"; + disable-https = true; + http-port = 8080; + }; + }; + + containers.httpd = { + autoStart = true; + privateNetwork = true; + hostAddress = "172.16.0.1"; + localAddress = "172.16.0.2"; + config = { + services.httpd = { + enable = true; + adminAddr = "foo@example.org"; + }; + networking.firewall.allowedTCPPorts = [ 80 ]; + system.stateVersion = "25.11"; + }; + }; + + users.users.autossh = { + isNormalUser = true; + }; + users.groups.autossh = { }; + services.autossh.sessions = [ + { + name = "httpd"; + user = "autossh"; + extraArguments = '' + -i ${privKey} \ + -o StrictHostKeyChecking=accept-new \ + -o ServerAliveInterval=30 \ + -R httpd.sandhole.nix:80:172.16.0.2:80 \ + -p 2222 \ + 127.0.0.1 + ''; + } + ]; + }; + + testScript = '' + start_all() + + machine.wait_for_unit("sandhole.service") + machine.wait_for_open_port(2222) + machine.wait_for_unit("autossh-httpd.service") + machine.wait_for_unit("multi-user.target") + machine.wait_until_succeeds( + "${pkgs.curl}/bin/curl --fail" + " --resolve httpd.sandhole.nix:8080:127.0.0.1" + " http://httpd.sandhole.nix:8080" + " | grep 'It works!'", + timeout=30, + ) + ''; +} diff --git a/src/addressing.rs b/src/addressing.rs index e4120fd..d652ce0 100644 --- a/src/addressing.rs +++ b/src/addressing.rs @@ -4,7 +4,7 @@ use block_id::{Alphabet, BlockId}; use bon::Builder; use hickory_resolver::{TokioResolver, proto::rr::RecordType}; use itertools::Itertools; -use rand::{self, Rng, SeedableRng, seq::IndexedRandom}; +use rand::{self, RngExt, SeedableRng, seq::IndexedRandom}; use rand_chacha::ChaCha20Rng; use rand_seeder::SipHasher; use russh::keys::ssh_key::Fingerprint; @@ -417,7 +417,7 @@ mod address_delegator_tests { use std::{collections::HashSet, net::SocketAddr}; use mockall::predicate::*; - use rand::{Rng, SeedableRng}; + use rand::{RngExt, SeedableRng}; use rand_chacha::ChaCha20Rng; use regex::Regex; use russh::keys::{HashAlg, ssh_key::private::Ed25519Keypair}; @@ -526,7 +526,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_provided_address_if_cname_matches_fingerprint() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -566,7 +566,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_provided_address_if_txt_record_matches_fingerprint() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -636,7 +636,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_subdomain_if_no_txt_record_matches_fingerprint() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -704,7 +704,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_host_domain_if_address_equals_host_domain_and_has_fingerprint() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -741,7 +741,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_random_subdomain_if_address_equals_host_domain_and_doesnt_have_fingerprint() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -783,7 +783,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_random_subdomain_if_requested_address_is_not_direct_subdomain() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -825,7 +825,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_random_subdomain_if_invalid_address() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -865,7 +865,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_unique_random_subdomains_if_forced() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -914,7 +914,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_unique_random_subdomains_with_different_size_and_no_profanities() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -1120,11 +1120,11 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_unique_random_subdomains_per_fingerprint_user_and_address_if_forced() { let f1: russh::keys::ssh_key::Fingerprint = russh::keys::PrivateKey::from( - Ed25519Keypair::from_seed(&ChaCha20Rng::from_os_rng().random()), + Ed25519Keypair::from_seed(&ChaCha20Rng::from_rng(&mut rand::rng()).random()), ) .fingerprint(HashAlg::Sha256); let f2 = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -1769,7 +1769,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn returns_domain_when_binding_valid_txt_without_root_domain() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); @@ -1838,7 +1838,7 @@ mod address_delegator_tests { #[test_log::test(tokio::test)] async fn errors_on_domain_with_invalid_txt_without_root_domain() { let fingerprint = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )) .fingerprint(HashAlg::Sha256); let mut mock = MockResolver::new(); diff --git a/src/connections.rs b/src/connections.rs index a9feee6..5da91d5 100644 --- a/src/connections.rs +++ b/src/connections.rs @@ -9,7 +9,7 @@ use std::{ use ahash::RandomState; use bon::Builder; use dashmap::DashMap; -use rand::{Rng, rng, seq::IndexedRandom}; +use rand::{RngExt, rng, seq::IndexedRandom}; use rand_seeder::SipHasher; use crate::{ diff --git a/src/entrypoint.rs b/src/entrypoint.rs index e6a37b0..99845a4 100644 --- a/src/entrypoint.rs +++ b/src/entrypoint.rs @@ -12,7 +12,7 @@ use hyper_util::{ server::conn::auto, }; use metrics::{counter, gauge}; -use rand::{Rng, SeedableRng}; +use rand::{RngExt, SeedableRng}; use rand_chacha::ChaCha20Rng; use russh::{ keys::{ @@ -133,7 +133,7 @@ pub async fn entrypoint(config: ApplicationConfig) -> color_eyre::Result<()> { #[cfg(not(coverage_nightly))] tracing::info!("Key file not found. Creating..."); let key = russh::keys::PrivateKey::from(Ed25519Keypair::from_seed( - &ChaCha20Rng::from_os_rng().random(), + &ChaCha20Rng::from_rng(&mut rand::rng()).random(), )); if !config.disable_directory_creation { fs::create_dir_all( diff --git a/src/quota.rs b/src/quota.rs index dd2d1a1..873038c 100644 --- a/src/quota.rs +++ b/src/quota.rs @@ -167,7 +167,7 @@ impl QuotaHandler for Arc