From 7f25bb681c7e429e0f22aaac3880e4d0392e3641 Mon Sep 17 00:00:00 2001 From: Miles Ward Date: Tue, 9 Jun 2026 19:47:13 -0400 Subject: [PATCH] v0.6.3: russh 0.61 security bump (CVE batch) + bergshamra 0.5 + axum 0.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Security-driven dependency release. - russh =0.55.0 (pinned) -> 0.61.2: closes the advisory batch reachable from our SFTP *client* path — unbounded/allocation-first packet parsing (CVE-2026-48110, CVE-2026-46702, CVE-2026-46673, HIGH) plus CVE-2026-48107 in client auth. A malicious or compromised SFTP server an operator pointed us at could previously OOM the PXE server. Also drops mlock on non-secret buffers (~21% SSH throughput upstream) — directly in the remote-share ISO streaming path. ring backend kept; zero code changes needed in sftp_share.rs. - bergshamra 0.4 -> 0.5.1: the pin's blocking condition (stable RustCrypto generation, pkcs8 0.11) is now met upstream, so the =0.55.0 pin is deleted and its comment rewritten as history. 0.5 is secure-by-default for DSig (flags we already set explicitly) and fixes an XML-Enc DerivedKey fallthrough. - axum 0.7 -> 0.8.9: route captures /:id -> {id} across the router and the /api/docs listing; ConnectInfo optional extraction moves to the Result form. Gains the HEAD content-length fix (iPXE/sanboot clients probe with HEAD before Range requests) and puts us back on the maintained line. Validation: clippy clean, fmt clean, all 272 workspace tests green. Co-Authored-By: Claude Opus 4.8 (1M context) --- Cargo.lock | 1302 +++++++++++++++++----------- Cargo.toml | 29 +- crates/http-api/src/app.rs | 96 +- crates/http-api/tests/full_flow.rs | 5 +- 4 files changed, 851 insertions(+), 581 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 084d87f..23d6182 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,6 +18,16 @@ dependencies = [ "generic-array 0.14.7", ] +[[package]] +name = "aead" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef60ac202874e574ce7a7158cc8bca7313dd344322482e4fadee288bf4a306b8" +dependencies = [ + "crypto-common 0.2.2", + "inout 0.2.2", +] + [[package]] name = "aes" version = "0.8.4" @@ -29,27 +39,54 @@ dependencies = [ "cpufeatures 0.2.17", ] +[[package]] +name = "aes" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" +dependencies = [ + "cipher 0.5.2", + "cpubits", + "cpufeatures 0.3.0", + "zeroize", +] + [[package]] name = "aes-gcm" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ - "aead", - "aes", + "aead 0.5.2", + "aes 0.8.4", "cipher 0.4.4", - "ctr", - "ghash", + "ctr 0.9.2", + "ghash 0.5.1", "subtle", ] +[[package]] +name = "aes-gcm" +version = "0.11.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da8c919c118108f144adecad74b425b804ad075580d605d9b33c2d6d1c62a2f8" +dependencies = [ + "aead 0.6.0", + "aes 0.9.1", + "cipher 0.5.2", + "ctr 0.10.1", + "ghash 0.6.0", + "subtle", + "zeroize", +] + [[package]] name = "aes-kw" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69fa2b352dcefb5f7f3a5fb840e02665d311d878955380515e4fd50095dd3d8c" dependencies = [ - "aes", + "aes 0.8.4", ] [[package]] @@ -128,13 +165,13 @@ checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "argon2" -version = "0.5.3" +version = "0.6.0-rc.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +checksum = "7af50940b73bf4e16c15c448a2b121c63f2d68e3e54b6a8731673cb4aa0cdff5" dependencies = [ "base64ct", "blake2", - "cpufeatures 0.2.17", + "cpufeatures 0.3.0", "password-hash", ] @@ -150,7 +187,7 @@ dependencies = [ "nom 7.1.3", "num-traits", "rusticata-macros", - "thiserror 2.0.18", + "thiserror", "time", ] @@ -221,14 +258,14 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "axum" -version = "0.7.9" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ - "async-trait", "axum-core", "axum-macros", "bytes", + "form_urlencoded", "futures-util", "http", "http-body", @@ -242,8 +279,7 @@ dependencies = [ "multer", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "serde_json", "serde_path_to_error", "serde_urlencoded", @@ -257,19 +293,17 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.4.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ - "async-trait", "bytes", - "futures-util", + "futures-core", "http", "http-body", "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper", "tower-layer", "tower-service", @@ -278,9 +312,9 @@ dependencies = [ [[package]] name = "axum-macros" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" +checksum = "7aa268c23bfbbd2c4363b9cd302a4f504fb2a9dfe7e3451d66f35dd392e20aca" dependencies = [ "proc-macro2", "quote", @@ -318,7 +352,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24ae5479c93d3720e4c1dbd6b945b97457c50cb672781104768190371df1a905" dependencies = [ "base64", - "blowfish 0.10.0", + "blowfish", "getrandom 0.4.2", "subtle", "zeroize", @@ -326,20 +360,20 @@ dependencies = [ [[package]] name = "bcrypt-pbkdf" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2" +checksum = "144e573728da132683b9488acd528274c790e07fc06ff81ee29f9d8f8b1041e0" dependencies = [ - "blowfish 0.9.1", - "pbkdf2", - "sha2 0.10.9", + "blowfish", + "pbkdf2 0.13.0", + "sha2 0.11.0", ] [[package]] name = "bergshamra" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8d7fa82e5a4437e4766511843d661355af8005b30576db52b96b595865353dc" +checksum = "e8de2a24da6668062582e91a645072fd37548d40220c5100881e03dd7033a9ad" dependencies = [ "base64", "bergshamra-c14n", @@ -357,9 +391,9 @@ dependencies = [ [[package]] name = "bergshamra-c14n" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5802757aa34889959a88721cf22044fb13ab3b3fae556bfc94d3679f74d2b6" +checksum = "58ca6d3e7f9feac696955542543b6fa2a0fc73c1acb44e8fd7a7e7904944e431" dependencies = [ "bergshamra-core", "bergshamra-xml", @@ -368,47 +402,48 @@ dependencies = [ [[package]] name = "bergshamra-core" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de25efa9a8386aad3d17cfd029277ae8ccb917475848eb66d6bf72c6a70ad75" +checksum = "55b84b45351fa895727d60062a25e5423ccfbab715ed7fcc8bd584ffd32fbd04" dependencies = [ - "thiserror 2.0.18", + "thiserror", ] [[package]] name = "bergshamra-crypto" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7486bf4a51a6277de8b8f3979c43151ffed8c6636381b84b4825e19ca803884d" +checksum = "d99a30ae3309ea195496b27bb133360d8f19b69aa315d96c42357c7603a76836" dependencies = [ - "aes", - "aes-gcm", + "aes 0.8.4", + "aes-gcm 0.10.3", "aes-kw", "bergshamra-core", - "cbc", - "des", + "cbc 0.1.2", + "des 0.8.1", "digest 0.10.7", "dsa", - "ecdsa", - "ed25519-dalek", - "hkdf", + "ecdsa 0.16.9", + "ed25519-dalek 2.2.0", + "getrandom 0.4.2", + "hkdf 0.12.4", "hmac 0.12.1", "kryptering", "md-5", "ml-dsa", "num-bigint-dig", "num-traits", - "p256", - "p384", - "p521", - "pbkdf2", + "p256 0.13.2", + "p384 0.13.1", + "p521 0.13.3", + "pbkdf2 0.12.2", "pkcs1", "pkcs8 0.10.2", - "pkcs8 0.11.0-rc.11", + "pkcs8 0.11.0", "rand 0.8.6", "ripemd", "rsa", - "sha1", + "sha1 0.10.6", "sha2 0.10.9", "sha3 0.10.9", "signature 2.2.0", @@ -418,9 +453,9 @@ dependencies = [ [[package]] name = "bergshamra-dsig" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79a4f0a9ec25c1a804dbb717ecf47da4579d41e35a0db127d83c29396fc79290" +checksum = "77b4da9dedf7ff55d566243e9fcd4ded304c455c15d5c4dfca624dc5afd88ed8" dependencies = [ "base64", "bergshamra-c14n", @@ -431,11 +466,11 @@ dependencies = [ "bergshamra-xml", "der 0.7.10", "dsa", - "ed25519-dalek", + "ed25519-dalek 2.2.0", "kryptering", - "p256", - "p384", - "p521", + "p256 0.13.2", + "p384 0.13.1", + "p521 0.13.3", "rsa", "uppsala", "x509-cert", @@ -443,9 +478,9 @@ dependencies = [ [[package]] name = "bergshamra-enc" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41620927810588fc9155932f1020fd501d8b658a2a4831e56333748a49ee647e" +checksum = "949020f300b5084ef2b6ad1373a4af39a3bcffb536d188bc84043d07cc914fb1" dependencies = [ "base64", "bergshamra-c14n", @@ -455,18 +490,18 @@ dependencies = [ "bergshamra-transforms", "bergshamra-xml", "kryptering", - "p256", - "p384", - "p521", + "p256 0.13.2", + "p384 0.13.1", + "p521 0.13.3", "rand 0.8.6", "uppsala", ] [[package]] name = "bergshamra-keys" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4b1a745bef9d6ea50a8ed8145d364a85892a8b2e5a499b9435089b14df167b" +checksum = "588151f20d7289208959d20f8bb3e8134a5ed6eb29ad0d9f548dc436b4cda241" dependencies = [ "base64", "bergshamra-core", @@ -476,22 +511,22 @@ dependencies = [ "der 0.7.10", "digest 0.10.7", "dsa", - "ecdsa", - "ed25519-dalek", + "ecdsa 0.16.9", + "ed25519-dalek 2.2.0", "md-5", "ml-dsa", "num-bigint-dig", "num-traits", - "p256", - "p384", - "p521", - "pem-rfc7468", + "p256 0.13.2", + "p384 0.13.1", + "p521 0.13.3", + "pem-rfc7468 0.7.0", "pkcs1", - "pkcs5", + "pkcs5 0.7.1", "pkcs8 0.10.2", - "pkcs8 0.11.0-rc.11", + "pkcs8 0.11.0", "rsa", - "sha1", + "sha1 0.10.6", "sha2 0.10.9", "signature 2.2.0", "slh-dsa", @@ -504,27 +539,27 @@ dependencies = [ [[package]] name = "bergshamra-pkcs12" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d46759b4868e86830544904e1d15ae061bc387384c7a806703096fb51e380c5" +checksum = "05af483a06eab517aad705ff48dbc0537ee34cb07b0518220d471ee236925092" dependencies = [ - "aes", + "aes 0.8.4", "bergshamra-core", - "cbc", + "cbc 0.1.2", "cipher 0.4.4", - "des", + "des 0.8.1", "hmac 0.12.1", - "pbkdf2", - "sha1", + "pbkdf2 0.12.2", + "sha1 0.10.6", "sha2 0.10.9", "yasna", ] [[package]] name = "bergshamra-transforms" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e467a1622d7fe18fc784f19d2ba0355dc82d2d425c90b2269c10361dc9b8e88a" +checksum = "966b5850e3ed05afb3ddc2c950b96572608efd3b94ba90f3b657ad901dbd9950" dependencies = [ "base64", "bergshamra-c14n", @@ -537,20 +572,14 @@ dependencies = [ [[package]] name = "bergshamra-xml" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644aeb454e2791fd16ce90db48a9175a2a464991dc76022e1ca7503815c79772" +checksum = "c164fd176781764f16570f02061f1eb61527a03f6a81a6e7eac8d6e3e5e4128b" dependencies = [ "bergshamra-core", "uppsala", ] -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.13.0" @@ -562,11 +591,11 @@ dependencies = [ [[package]] name = "blake2" -version = "0.10.6" +version = "0.11.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +checksum = "061f1a09225e328e1ffbb378d2d49923c0ca5fee19fb5ac1cc9c1e9d52b93690" dependencies = [ - "digest 0.10.7", + "digest 0.11.3", ] [[package]] @@ -585,6 +614,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" dependencies = [ "hybrid-array", + "zeroize", ] [[package]] @@ -597,13 +627,12 @@ dependencies = [ ] [[package]] -name = "blowfish" -version = "0.9.1" +name = "block-padding" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" +checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" dependencies = [ - "byteorder", - "cipher 0.4.4", + "hybrid-array", ] [[package]] @@ -665,6 +694,15 @@ dependencies = [ "cipher 0.4.4", ] +[[package]] +name = "cbc" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896" +dependencies = [ + "cipher 0.5.2", +] + [[package]] name = "cc" version = "1.2.63" @@ -687,17 +725,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher 0.4.4", - "cpufeatures 0.2.17", -] - [[package]] name = "chacha20" version = "0.10.0" @@ -705,8 +732,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", + "cipher 0.5.2", "cpufeatures 0.3.0", "rand_core 0.10.1", + "zeroize", ] [[package]] @@ -738,8 +767,10 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ + "block-buffer 0.12.0", "crypto-common 0.2.2", "inout 0.2.2", + "zeroize", ] [[package]] @@ -852,15 +883,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "core-models" -version = "0.0.4" +name = "cpubits" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0940496e5c83c54f3b753d5317daec82e8edac71c33aaa1f666d76f518de2444" -dependencies = [ - "hax-lib", - "pastey", - "rand 0.9.4", -] +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" [[package]] name = "cpufeatures" @@ -913,6 +939,23 @@ dependencies = [ "zeroize", ] +[[package]] +name = "crypto-bigint" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a0d26b245348befa0c121944541476763dcc46ede886c88f9d12e1697d27c3" +dependencies = [ + "cpubits", + "ctutils", + "getrandom 0.4.2", + "hybrid-array", + "num-traits", + "rand_core 0.10.1", + "serdect", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.7" @@ -930,28 +973,29 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ + "getrandom 0.4.2", "hybrid-array", + "rand_core 0.10.1", ] [[package]] name = "cryptoki" -version = "0.7.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d645cc2c5faf466571c0c752d39d8fbc2746773b2f043ac8f9cd73bec55db9" +checksum = "ff765b99fc49f3116c9a908484486a2b92fd73c48da45c3a69716471c6cc56c6" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cryptoki-sys", "libloading", "log", - "paste", "secrecy", ] [[package]] name = "cryptoki-sys" -version = "0.1.8" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "750380200f47d4ff677be725b6e0d78b590e1d0343573dcd4b62147f25dc6efa" +checksum = "f1fd850498411e4057f1cba79e6e2bc7cbe960544c1046ab46d4685c403a1121" dependencies = [ "libloading", ] @@ -965,6 +1009,15 @@ dependencies = [ "cipher 0.4.4", ] +[[package]] +name = "ctr" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21" +dependencies = [ + "cipher 0.5.2", +] + [[package]] name = "ctutils" version = "0.4.2" @@ -972,6 +1025,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" dependencies = [ "cmov", + "subtle", ] [[package]] @@ -984,7 +1038,23 @@ dependencies = [ "cpufeatures 0.2.17", "curve25519-dalek-derive", "digest 0.10.7", - "fiat-crypto", + "fiat-crypto 0.2.9", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "5.0.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f359e08ca85e7bd759e1fd933ff2bccd81864c60a8fba0e259c7f822b0924bf" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "curve25519-dalek-derive", + "digest 0.11.3", + "fiat-crypto 0.3.0", "rustc_version", "subtle", "zeroize", @@ -1059,7 +1129,7 @@ dependencies = [ "const-oid 0.9.6", "der_derive", "flagset", - "pem-rfc7468", + "pem-rfc7468 0.7.0", "zeroize", ] @@ -1070,6 +1140,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" dependencies = [ "const-oid 0.10.2", + "pem-rfc7468 1.0.0", "zeroize", ] @@ -1117,6 +1188,15 @@ dependencies = [ "cipher 0.4.4", ] +[[package]] +name = "des" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a94e407b54f9034d71dd748234cd1e516ced6284009906ae246f177eafe5a" +dependencies = [ + "cipher 0.5.2", +] + [[package]] name = "dhcproto" version = "0.15.0" @@ -1127,7 +1207,7 @@ dependencies = [ "hickory-proto", "ipnet", "rand 0.10.1", - "thiserror 2.0.18", + "thiserror", ] [[package]] @@ -1186,7 +1266,7 @@ dependencies = [ "num-bigint-dig", "num-traits", "pkcs8 0.10.2", - "rfc6979", + "rfc6979 0.4.0", "sha2 0.10.9", "signature 2.2.0", "zeroize", @@ -1200,12 +1280,27 @@ checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der 0.7.10", "digest 0.10.7", - "elliptic-curve", - "rfc6979", + "elliptic-curve 0.13.8", + "rfc6979 0.4.0", "signature 2.2.0", "spki 0.7.3", ] +[[package]] +name = "ecdsa" +version = "0.17.0-rc.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54fb064faabbee66e1fc8e5c5a9458d4269dc2d8b638fe86a425adb2510d1a96" +dependencies = [ + "der 0.8.0", + "digest 0.11.3", + "elliptic-curve 0.14.0-rc.33", + "rfc6979 0.5.0", + "signature 3.0.0", + "spki 0.8.0", + "zeroize", +] + [[package]] name = "ed25519" version = "2.2.3" @@ -1216,14 +1311,24 @@ dependencies = [ "signature 2.2.0", ] +[[package]] +name = "ed25519" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" +dependencies = [ + "pkcs8 0.11.0", + "signature 3.0.0", +] + [[package]] name = "ed25519-dalek" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ - "curve25519-dalek", - "ed25519", + "curve25519-dalek 4.1.3", + "ed25519 2.2.3", "rand_core 0.6.4", "serde", "sha2 0.10.9", @@ -1231,6 +1336,22 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519-dalek" +version = "3.0.0-rc.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b011170fe4f04665565b4110afef66774fe9ffff278f3eb5b81cc73d26e27d60" +dependencies = [ + "curve25519-dalek 5.0.0-rc.0", + "ed25519 3.0.0", + "rand_core 0.10.1", + "serde", + "sha2 0.11.0", + "signature 3.0.0", + "subtle", + "zeroize", +] + [[package]] name = "elliptic-curve" version = "0.13.8" @@ -1238,16 +1359,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct 0.2.0", - "crypto-bigint", + "crypto-bigint 0.5.5", "digest 0.10.7", - "ff", + "ff 0.13.1", "generic-array 0.14.7", - "group", - "hkdf", - "pem-rfc7468", + "group 0.13.0", + "hkdf 0.12.4", + "pem-rfc7468 0.7.0", "pkcs8 0.10.2", "rand_core 0.6.4", - "sec1", + "sec1 0.7.3", + "subtle", + "zeroize", +] + +[[package]] +name = "elliptic-curve" +version = "0.14.0-rc.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "102d3643d30dd8b559613c5cced68317199597fffb278cdc88daa2ef7fafc935" +dependencies = [ + "base16ct 1.0.0", + "crypto-bigint 0.7.3", + "crypto-common 0.2.2", + "digest 0.11.3", + "ff 0.14.0", + "group 0.14.0", + "hkdf 0.13.0", + "hybrid-array", + "once_cell", + "pem-rfc7468 1.0.0", + "pkcs8 0.11.0", + "rand_core 0.10.1", + "sec1 0.8.1", "subtle", "zeroize", ] @@ -1336,12 +1480,28 @@ dependencies = [ "subtle", ] +[[package]] +name = "ff" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" +dependencies = [ + "rand_core 0.10.1", + "subtle", +] + [[package]] name = "fiat-crypto" version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "fiat-crypto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" + [[package]] name = "figment" version = "0.10.19" @@ -1545,11 +1705,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", "rand_core 0.10.1", "wasip2", "wasip3", + "wasm-bindgen", ] [[package]] @@ -1559,7 +1721,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ "opaque-debug", - "polyval", + "polyval 0.6.2", +] + +[[package]] +name = "ghash" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5" +dependencies = [ + "polyval 0.7.1", ] [[package]] @@ -1603,11 +1774,22 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "ff", + "ff 0.13.1", "rand_core 0.6.4", "subtle", ] +[[package]] +name = "group" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" +dependencies = [ + "ff 0.14.0", + "rand_core 0.10.1", + "subtle", +] + [[package]] name = "h2" version = "0.4.14" @@ -1648,43 +1830,6 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -[[package]] -name = "hax-lib" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d9ba66d1739c68e0219b2b2238b5c4145f491ebf181b9c6ab561a19352ae86" -dependencies = [ - "hax-lib-macros", - "num-bigint", - "num-traits", -] - -[[package]] -name = "hax-lib-macros" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ba777a231a58d1bce1d68313fa6b6afcc7966adef23d60f45b8a2b9b688bf1" -dependencies = [ - "hax-lib-macros-types", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "hax-lib-macros-types" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "867e19177d7425140b417cd27c2e05320e727ee682e98368f88b7194e80ad515" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_json", - "uuid", -] - [[package]] name = "heck" version = "0.5.0" @@ -1705,9 +1850,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" @@ -1721,7 +1866,7 @@ dependencies = [ "jni", "once_cell", "rand 0.10.1", - "thiserror 2.0.18", + "thiserror", "tinyvec", "tracing", "url", @@ -1736,6 +1881,15 @@ dependencies = [ "hmac 0.12.1", ] +[[package]] +name = "hkdf" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" +dependencies = [ + "hmac 0.13.0", +] + [[package]] name = "hmac" version = "0.12.1" @@ -1754,15 +1908,6 @@ dependencies = [ "digest 0.11.3", ] -[[package]] -name = "home" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "hostname" version = "0.4.2" @@ -1831,7 +1976,10 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" dependencies = [ + "ctutils", + "subtle", "typenum", + "zeroize", ] [[package]] @@ -2080,7 +2228,7 @@ 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", ] @@ -2090,6 +2238,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ + "block-padding 0.4.2", "hybrid-array", ] @@ -2106,30 +2255,15 @@ dependencies = [ ] [[package]] -name = "internal-russh-forked-ssh-key" -version = "0.6.11+upstream-0.6.7" +name = "internal-russh-num-bigint" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a77eae781ed6a7709fb15b64862fcca13d886b07c7e2786f5ed34e5e2b9187" +checksum = "ae8e22120c32fb4d19ec55fba35015f57095cd95a2e3b732e44457f5915b2ee8" dependencies = [ - "argon2", - "bcrypt-pbkdf", - "ecdsa", - "ed25519-dalek", - "hex", - "hmac 0.12.1", - "p256", - "p384", - "p521", - "rand_core 0.6.4", - "rsa", - "sec1", - "sha1", - "sha2 0.10.9", - "signature 2.2.0", - "ssh-cipher", - "ssh-encoding", - "subtle", - "zeroize", + "num-integer", + "num-traits", + "rand 0.10.1", + "rand_core 0.10.1", ] [[package]] @@ -2162,7 +2296,7 @@ dependencies = [ "jni-sys", "log", "simd_cesu8", - "thiserror 2.0.18", + "thiserror", "walkdir", "windows-link", ] @@ -2230,42 +2364,53 @@ dependencies = [ ] [[package]] -name = "kryptering" -version = "0.1.0" +name = "kem" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2448476edac64a0fed5f3dc93a8ce0298711e6e3e856908c3b5ef2fe26464c" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" dependencies = [ - "aes", - "aes-gcm", + "crypto-common 0.2.2", + "rand_core 0.10.1", +] + +[[package]] +name = "kryptering" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91a2f2be6c09c89d098b24ccfe26cec2e993d8588ea0d48b0e388ac99fc6b49" +dependencies = [ + "aes 0.8.4", + "aes-gcm 0.10.3", "aes-kw", - "cbc", + "cbc 0.1.2", + "crypto-bigint 0.7.3", "cryptoki", - "des", + "des 0.8.1", "digest 0.10.7", "dsa", - "ecdsa", - "ed25519-dalek", - "hkdf", + "ecdsa 0.16.9", + "ed25519-dalek 2.2.0", + "getrandom 0.4.2", + "hkdf 0.12.4", "hmac 0.12.1", "md-5", "ml-dsa", - "num-bigint-dig", - "num-traits", - "p256", - "p384", - "p521", - "pbkdf2", - "pkcs8 0.11.0-rc.11", + "p256 0.13.2", + "p384 0.13.1", + "p521 0.13.3", + "pbkdf2 0.12.2", + "pkcs8 0.11.0", "rand 0.8.6", "ripemd", "rsa", - "sha1", + "sha1 0.10.6", "sha2 0.10.9", "sha3 0.10.9", "signature 2.2.0", "slh-dsa", - "thiserror 2.0.18", + "thiserror", "x25519-dalek", + "zeroize", ] [[package]] @@ -2317,80 +2462,14 @@ version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" -[[package]] -name = "libcrux-intrinsics" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9ee7ef66569dd7516454fe26de4e401c0c62073929803486b96744594b9632" -dependencies = [ - "core-models", - "hax-lib", -] - -[[package]] -name = "libcrux-ml-kem" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6a88086bf11bd2ec90926c749c4a427f2e59841437dbdede8cde8a96334ab" -dependencies = [ - "hax-lib", - "libcrux-intrinsics", - "libcrux-platform", - "libcrux-secrets", - "libcrux-sha3", - "libcrux-traits", - "rand 0.9.4", - "tls_codec", -] - -[[package]] -name = "libcrux-platform" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db82d058aa76ea315a3b2092f69dfbd67ddb0e462038a206e1dcd73f058c0778" -dependencies = [ - "libc", -] - -[[package]] -name = "libcrux-secrets" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4dbbf6bc9f2bc0f20dc3bea3e5c99adff3bdccf6d2a40488963da69e2ec307" -dependencies = [ - "hax-lib", -] - -[[package]] -name = "libcrux-sha3" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2400bec764d1c75b8a496d5747cffe32f1fb864a12577f0aca2f55a92021c962" -dependencies = [ - "hax-lib", - "libcrux-intrinsics", - "libcrux-platform", - "libcrux-traits", -] - -[[package]] -name = "libcrux-traits" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9adfd58e79d860f6b9e40e35127bfae9e5bd3ade33201d1347459011a2add034" -dependencies = [ - "libcrux-secrets", - "rand 0.9.4", -] - [[package]] name = "libloading" -version = "0.7.4" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "winapi", + "windows-link", ] [[package]] @@ -2443,9 +2522,9 @@ dependencies = [ [[package]] name = "matchit" -version = "0.7.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "md-5" @@ -2459,9 +2538,9 @@ dependencies = [ [[package]] name = "md5" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" +checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0" [[package]] name = "memchr" @@ -2514,25 +2593,41 @@ dependencies = [ [[package]] name = "ml-dsa" -version = "0.1.0-rc.7" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af6e554a2affc86740759dbe568a92abd58b47fea4e28ebe1b7bb4da99e490d4" +checksum = "add6b9d92e496f16f4526d68ff29da1483aba4b119baeab8bed3b9e3544a6f3d" dependencies = [ "const-oid 0.10.2", + "crypto-common 0.2.2", + "ctutils", "hybrid-array", "module-lattice", - "pkcs8 0.11.0-rc.11", - "rand_core 0.10.1", - "sha3 0.11.0", + "pkcs8 0.11.0", + "shake", "signature 3.0.0", ] [[package]] -name = "module-lattice" -version = "0.1.0" +name = "ml-kem" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dfecc750073acc09af2f8899b2342d520d570392ba1c3aed53eeb0d84ca4103" +checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66" dependencies = [ + "hybrid-array", + "kem", + "module-lattice", + "pkcs8 0.11.0", + "rand_core 0.10.1", + "sha3 0.11.0", +] + +[[package]] +name = "module-lattice" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" +dependencies = [ + "ctutils", "hybrid-array", "num-traits", ] @@ -2597,11 +2692,11 @@ dependencies = [ [[package]] name = "nix" -version = "0.29.0" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.13.0", + "bitflags", "cfg-if", "cfg_aliases", "libc", @@ -2643,7 +2738,6 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", - "rand 0.8.6", ] [[package]] @@ -2742,7 +2836,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openpxe" -version = "0.6.2" +version = "0.6.3" dependencies = [ "anyhow", "axum", @@ -2764,7 +2858,7 @@ dependencies = [ [[package]] name = "openpxe-core" -version = "0.6.2" +version = "0.6.3" dependencies = [ "anyhow", "base64", @@ -2779,7 +2873,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "thiserror 2.0.18", + "thiserror", "time", "tokio", "toml", @@ -2791,7 +2885,7 @@ dependencies = [ [[package]] name = "openpxe-dhcp-proxy" -version = "0.6.2" +version = "0.6.3" dependencies = [ "anyhow", "bytes", @@ -2799,14 +2893,14 @@ dependencies = [ "openpxe-core", "parking_lot", "socket2", - "thiserror 2.0.18", + "thiserror", "tokio", "tracing", ] [[package]] name = "openpxe-http-api" -version = "0.6.2" +version = "0.6.3" dependencies = [ "anyhow", "axum", @@ -2828,7 +2922,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "thiserror 2.0.18", + "thiserror", "time", "tokio", "tokio-stream", @@ -2842,17 +2936,17 @@ dependencies = [ [[package]] name = "openpxe-ipxe-assets" -version = "0.6.2" +version = "0.6.3" dependencies = [ "openpxe-core", "rust-embed", - "thiserror 2.0.18", + "thiserror", "tracing", ] [[package]] name = "openpxe-iso-store" -version = "0.6.2" +version = "0.6.3" dependencies = [ "anyhow", "bcrypt", @@ -2871,7 +2965,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "tempfile", - "thiserror 2.0.18", + "thiserror", "time", "tokio", "tokio-util", @@ -2881,21 +2975,21 @@ dependencies = [ [[package]] name = "openpxe-tftp" -version = "0.6.2" +version = "0.6.3" dependencies = [ "anyhow", "bytes", "openpxe-core", "openpxe-ipxe-assets", "socket2", - "thiserror 2.0.18", + "thiserror", "tokio", "tracing", ] [[package]] name = "openpxe-webui" -version = "0.6.2" +version = "0.6.3" [[package]] name = "p256" @@ -2903,24 +2997,51 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder 0.13.6", "sha2 0.10.9", ] +[[package]] +name = "p256" +version = "0.14.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41adc63effe99d48837a8cc0e6d7a77e32ae6a07f6000df466178dbc2193093e" +dependencies = [ + "ecdsa 0.17.0-rc.18", + "elliptic-curve 0.14.0-rc.33", + "primefield", + "primeorder 0.14.0-rc.10", + "sha2 0.11.0", +] + [[package]] name = "p384" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder 0.13.6", "sha2 0.10.9", ] +[[package]] +name = "p384" +version = "0.14.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd5333afa5ae0347f39e6a0f2c9c155da431583fd71fe5555bd0521b4ccaf02" +dependencies = [ + "ecdsa 0.17.0-rc.18", + "elliptic-curve 0.14.0-rc.33", + "fiat-crypto 0.3.0", + "primefield", + "primeorder 0.14.0-rc.10", + "sha2 0.11.0", +] + [[package]] name = "p521" version = "0.13.3" @@ -2928,13 +3049,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" dependencies = [ "base16ct 0.2.0", - "ecdsa", - "elliptic-curve", - "primeorder", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder 0.13.6", "rand_core 0.6.4", "sha2 0.10.9", ] +[[package]] +name = "p521" +version = "0.14.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3a5297f53dc16d35909060ba3032cff7867e8809f01e273ff325579d5f0ceae" +dependencies = [ + "base16ct 1.0.0", + "ecdsa 0.17.0-rc.18", + "elliptic-curve 0.14.0-rc.33", + "primefield", + "primeorder 0.14.0-rc.10", + "sha2 0.11.0", +] + [[package]] name = "pageant" version = "0.2.1" @@ -2949,7 +3084,7 @@ dependencies = [ "log", "rand 0.10.1", "sha2 0.11.0", - "thiserror 2.0.18", + "thiserror", "tokio", "windows", "windows-strings", @@ -2980,27 +3115,13 @@ dependencies = [ [[package]] name = "password-hash" -version = "0.5.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +checksum = "aab41826031698d6ffcd9cff78ef56ef998e39dc7e5067cdfebe373842d4723b" dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", + "phc", ] -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pastey" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" - [[package]] name = "pbkdf2" version = "0.12.2" @@ -3011,6 +3132,16 @@ dependencies = [ "hmac 0.12.1", ] +[[package]] +name = "pbkdf2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" +dependencies = [ + "digest 0.11.3", + "hmac 0.13.0", +] + [[package]] name = "pear" version = "0.2.9" @@ -3053,12 +3184,31 @@ dependencies = [ "base64ct", ] +[[package]] +name = "pem-rfc7468" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "phc" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44dc769b75f93afdddd8c7fa12d685292ddeff1e66f7f0f3a234cf1818afe892" +dependencies = [ + "base64ct", + "ctutils", +] + [[package]] name = "pin-project-lite" version = "0.2.17" @@ -3082,17 +3232,33 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" dependencies = [ - "aes", - "cbc", + "aes 0.8.4", + "cbc 0.1.2", "der 0.7.10", - "des", - "pbkdf2", - "scrypt", - "sha1", + "des 0.8.1", + "pbkdf2 0.12.2", + "scrypt 0.11.0", + "sha1 0.10.6", "sha2 0.10.9", "spki 0.7.3", ] +[[package]] +name = "pkcs5" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279a91971a1d8eb1260a30938eae3be9cb67b472dffecb222fbbbe2fd2dc1453" +dependencies = [ + "aes 0.9.1", + "cbc 0.2.1", + "der 0.8.0", + "pbkdf2 0.13.0", + "rand_core 0.10.1", + "scrypt 0.12.0", + "sha2 0.11.0", + "spki 0.8.0", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -3100,18 +3266,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der 0.7.10", - "pkcs5", + "pkcs5 0.7.1", "rand_core 0.6.4", "spki 0.7.3", ] [[package]] name = "pkcs8" -version = "0.11.0-rc.11" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12922b6296c06eb741b02d7b5161e3aaa22864af38dfa025a1a3ba3f68c84577" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" dependencies = [ "der 0.8.0", + "pkcs5 0.8.0", + "rand_core 0.10.1", "spki 0.8.0", ] @@ -3121,7 +3289,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.13.0", + "bitflags", "crc32fast", "fdeflate", "flate2", @@ -3130,13 +3298,13 @@ dependencies = [ [[package]] name = "poly1305" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "a00baa632505d05512f48a963e16051c54fda9a95cc9acea1a4e3c90991c4a2e" dependencies = [ - "cpufeatures 0.2.17", - "opaque-debug", - "universal-hash", + "cpufeatures 0.3.0", + "universal-hash 0.6.1", + "zeroize", ] [[package]] @@ -3148,7 +3316,18 @@ dependencies = [ "cfg-if", "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]] @@ -3191,35 +3370,36 @@ dependencies = [ "syn", ] +[[package]] +name = "primefield" +version = "0.14.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f845ec3240cd5ed5e1e31cf3ff633a5bf47c698dc4092ba9e767415b3d393406" +dependencies = [ + "crypto-bigint 0.7.3", + "crypto-common 0.2.2", + "ff 0.14.0", + "rand_core 0.10.1", + "subtle", + "zeroize", +] + [[package]] name = "primeorder" version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ - "elliptic-curve", + "elliptic-curve 0.13.8", ] [[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" +name = "primeorder" +version = "0.14.0-rc.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +checksum = "7d2793f22b9b6fd11ef3ac1d59bf003c2573593e4968702341605c2748fd90bf" dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn", + "elliptic-curve 0.14.0-rc.33", ] [[package]] @@ -3279,7 +3459,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.18", + "thiserror", "tokio", "tracing", "web-time", @@ -3300,7 +3480,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.18", + "thiserror", "tinyvec", "tracing", "web-time", @@ -3374,7 +3554,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ - "chacha20 0.10.0", + "chacha20", "getrandom 0.4.2", "rand_core 0.10.1", ] @@ -3442,7 +3622,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags", ] [[package]] @@ -3525,6 +3705,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "rfc6979" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5236ce872cac07e0fb3969b0cbf468c7d2f37d432f1b627dcb7b8d34563fb0c3" +dependencies = [ + "hmac 0.13.0", + "subtle", +] + [[package]] name = "ring" version = "0.17.14" @@ -3580,74 +3770,83 @@ dependencies = [ [[package]] name = "russh" -version = "0.55.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b4d036bb45d7bbe99dbfef4ec60eaeb614708d22ff107124272f8ef6b54548" +checksum = "bbf893f64684e58da8a68d56a5e84d1cf0440226274c515770fe267707a7d0b0" dependencies = [ - "aes", - "bitflags 2.13.0", - "block-padding", + "aes 0.9.1", + "bitflags", + "block-padding 0.4.2", "byteorder", "bytes", - "cbc", - "ctr", - "curve25519-dalek", + "cbc 0.2.1", + "cipher 0.5.2", + "crypto-bigint 0.7.3", + "ctr 0.10.1", + "curve25519-dalek 5.0.0-rc.0", "data-encoding", "delegate", - "der 0.7.10", - "digest 0.10.7", - "ecdsa", - "ed25519-dalek", - "elliptic-curve", + "der 0.8.0", + "digest 0.11.3", + "ecdsa 0.17.0-rc.18", + "ed25519-dalek 3.0.0-rc.0", + "elliptic-curve 0.14.0-rc.33", "enum_dispatch", "futures", "generic-array 1.4.3", - "getrandom 0.2.17", + "getrandom 0.4.2", + "ghash 0.6.0", "hex-literal", - "hmac 0.12.1", - "home", - "inout 0.1.4", - "internal-russh-forked-ssh-key", - "libcrux-ml-kem", + "hmac 0.13.0", + "inout 0.2.2", + "internal-russh-num-bigint", + "keccak 0.2.0", "log", "md5", + "ml-kem", + "module-lattice", "num-bigint", - "p256", - "p384", - "p521", + "p256 0.14.0-rc.10", + "p384 0.14.0-rc.10", + "p521 0.14.0-rc.10", "pageant", - "pbkdf2", - "pkcs5", - "pkcs8 0.10.2", - "rand 0.8.6", - "rand_core 0.6.4", + "pbkdf2 0.13.0", + "pkcs5 0.8.0", + "pkcs8 0.11.0", + "polyval 0.7.1", + "rand 0.10.1", + "rand_core 0.10.1", "ring", "russh-cryptovec", "russh-util", - "sec1", - "sha1", - "sha2 0.10.9", - "signature 2.2.0", - "spki 0.7.3", + "salsa20 0.11.0", + "scrypt 0.12.0", + "sec1 0.8.1", + "sha1 0.11.0", + "sha2 0.11.0", + "sha3 0.11.0", + "signature 3.0.0", + "spki 0.8.0", "ssh-encoding", + "ssh-key", "subtle", - "thiserror 1.0.69", + "thiserror", "tokio", "typenum", + "universal-hash 0.6.1", "zeroize", ] [[package]] name = "russh-cryptovec" -version = "0.52.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb0ed583ff0f6b4aa44c7867dd7108df01b30571ee9423e250b4cc939f8c6cf" +checksum = "443f6bbcfacb34a1aab2b12b99bf08e0c63abdc5a0db261901365df9d57fff51" dependencies = [ - "libc", "log", "nix", "ssh-encoding", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -3656,7 +3855,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed8949eca4163c18a8f59ff96d32cf61e9c13b9735e21ef32b3907f4aafa1a9" dependencies = [ - "bitflags 2.13.0", + "bitflags", "bytes", "chrono", "dashmap", @@ -3664,7 +3863,7 @@ dependencies = [ "log", "serde", "serde_bytes", - "thiserror 2.0.18", + "thiserror", "tokio", "tokio-util", "wasm-bindgen-futures", @@ -3747,7 +3946,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -3811,6 +4010,16 @@ dependencies = [ "cipher 0.4.4", ] +[[package]] +name = "salsa20" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c" +dependencies = [ + "cfg-if", + "cipher 0.5.2", +] + [[package]] name = "same-file" version = "1.0.6" @@ -3832,11 +4041,23 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "pbkdf2", - "salsa20", + "pbkdf2 0.12.2", + "salsa20 0.10.2", "sha2 0.10.9", ] +[[package]] +name = "scrypt" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87af57419b594aa23fa95f09f0e06d80d84ba01c26148c43844cad6ff4485f0" +dependencies = [ + "cfg-if", + "pbkdf2 0.13.0", + "salsa20 0.11.0", + "sha2 0.11.0", +] + [[package]] name = "sec1" version = "0.7.3" @@ -3852,10 +4073,24 @@ dependencies = [ ] [[package]] -name = "secrecy" -version = "0.8.0" +name = "sec1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" +dependencies = [ + "base16ct 1.0.0", + "ctutils", + "der 0.8.0", + "hybrid-array", + "subtle", + "zeroize", +] + +[[package]] +name = "secrecy" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" dependencies = [ "zeroize", ] @@ -3951,6 +4186,16 @@ dependencies = [ "serde", ] +[[package]] +name = "serdect" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +dependencies = [ + "base16ct 1.0.0", + "serde", +] + [[package]] name = "sha1" version = "0.10.6" @@ -3962,6 +4207,17 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha1" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", +] + [[package]] name = "sha2" version = "0.10.9" @@ -4004,6 +4260,17 @@ dependencies = [ "keccak 0.2.0", ] +[[package]] +name = "shake" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09057cb2149ad4cbd2da1e26b351f9a4c354219421229c69c3063e6f61947c4a" +dependencies = [ + "digest 0.11.3", + "keccak 0.2.0", + "sponge-cursor", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -4085,15 +4352,15 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slh-dsa" -version = "0.2.0-rc.4" +version = "0.2.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85f6f9b5317f06189671584c283b3f26339b89c97f21b5c50ae24aec397304a7" +checksum = "371c02fe34044d8866ddf7cb0e8204a87ef31a39f0408bed41c4253ea9dd61ed" dependencies = [ "const-oid 0.10.2", "digest 0.11.3", "hmac 0.13.0", "hybrid-array", - "pkcs8 0.11.0-rc.11", + "pkcs8 0.11.0", "rand_core 0.10.1", "sha2 0.11.0", "sha3 0.11.0", @@ -4145,32 +4412,68 @@ dependencies = [ ] [[package]] -name = "ssh-cipher" -version = "0.2.0" +name = "sponge-cursor" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" + +[[package]] +name = "ssh-cipher" +version = "0.3.0-rc.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10db6f219196a8528f9ec904d9d45cdad692d65b0e57e72be4dedd1c5fddce36" dependencies = [ - "aes", - "aes-gcm", - "cbc", - "chacha20 0.9.1", - "cipher 0.4.4", - "ctr", + "aead 0.6.0", + "aes 0.9.1", + "aes-gcm 0.11.0-rc.4", + "cbc 0.2.1", + "chacha20", + "cipher 0.5.2", + "ctr 0.10.1", + "ctutils", + "des 0.9.0", "poly1305", "ssh-encoding", - "subtle", + "zeroize", ] [[package]] name = "ssh-encoding" -version = "0.2.0" +version = "0.3.0-rc.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" +checksum = "7abf34aa716da5d5b4c496936d042ea282ab392092cd68a72ef6a8863ff8c96a" dependencies = [ "base64ct", "bytes", - "pem-rfc7468", - "sha2 0.10.9", + "ctutils", + "digest 0.11.3", + "pem-rfc7468 1.0.0", + "zeroize", +] + +[[package]] +name = "ssh-key" +version = "0.7.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45735ce3dea95690e4a9e414c4cfde7f79835063c3dcd35881df85a84118e74b" +dependencies = [ + "argon2", + "bcrypt-pbkdf", + "ctutils", + "ed25519-dalek 3.0.0-rc.0", + "hex", + "hmac 0.13.0", + "p256 0.14.0-rc.10", + "p384 0.14.0-rc.10", + "p521 0.14.0-rc.10", + "rand_core 0.10.1", + "sec1 0.8.1", + "sha1 0.11.0", + "sha2 0.11.0", + "signature 3.0.0", + "ssh-cipher", + "ssh-encoding", + "zeroize", ] [[package]] @@ -4235,33 +4538,13 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.18", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "thiserror-impl", ] [[package]] @@ -4488,7 +4771,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.13.0", + "bitflags", "bytes", "futures-core", "futures-util", @@ -4605,9 +4888,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tsp-ltv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "072e18abb3fbc096b1c607cbb3eefffda07430f226c1a4cf8a9411185bc004d9" +checksum = "af6699c957eb2d3142aef0e5e1221dd4f307c314fefa5bcc48e5fc95c9b4309c" dependencies = [ "base64", "chrono", @@ -4615,22 +4898,23 @@ dependencies = [ "const-oid 0.9.6", "der 0.7.10", "digest 0.10.7", - "ecdsa", - "ed25519-dalek", + "ecdsa 0.16.9", + "ed25519-dalek 2.2.0", + "getrandom 0.2.17", "hex", "log", "md-5", - "p256", - "p384", - "p521", - "pem-rfc7468", + "p256 0.13.2", + "p384 0.13.1", + "p521 0.13.3", + "pem-rfc7468 0.7.0", "rsa", - "sha1", + "sha1 0.10.6", "sha2 0.10.9", "sha3 0.10.9", "signature 2.2.0", "spki 0.7.3", - "thiserror 2.0.18", + "thiserror", "x509-cert", ] @@ -4677,6 +4961,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.2", + "ctutils", +] + [[package]] name = "untrusted" version = "0.9.0" @@ -4685,9 +4979,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "uppsala" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1600dc6ec465bbba4056042fc73041b82081849ab3117f5d2e233eb96e3e1725" +checksum = "9d87ccb81b1e9ddc119871ecbd40a5e93f173f0777838db1e8c0dec223ae3c49" [[package]] name = "url" @@ -4876,7 +5170,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.13.0", + "bitflags", "hashbrown 0.15.5", "indexmap", "semver", @@ -4917,22 +5211,6 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.11" @@ -4942,12 +5220,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows" version = "0.62.2" @@ -5310,7 +5582,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.13.0", + "bitflags", "indexmap", "log", "serde", @@ -5352,7 +5624,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek", + "curve25519-dalek 4.1.3", "rand_core 0.6.4", "serde", "zeroize", @@ -5383,7 +5655,7 @@ dependencies = [ "nom 7.1.3", "oid-registry", "rusticata-macros", - "thiserror 2.0.18", + "thiserror", "time", ] diff --git a/Cargo.toml b/Cargo.toml index 42b6d19..12622f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ members = [ ] [workspace.package] -version = "0.6.2" +version = "0.6.3" edition = "2021" rust-version = "1.95" license = "MIT OR Apache-2.0" @@ -33,7 +33,7 @@ dhcproto = "0.15" socket2 = { version = "0.6", features = ["all"] } bytes = "1.7" -axum = { version = "0.7", features = ["macros", "multipart", "http2"] } +axum = { version = "0.8", features = ["macros", "multipart", "http2"] } tower = "0.5" tower-http = { version = "0.6", features = ["fs", "trace", "cors", "limit"] } hyper = "1.9" @@ -80,7 +80,7 @@ lettre = { version = "0.11", default-features = false, features = ["smtp-transpo # C deps), so the static musl binary stays OpenSSL-free — samael was # rejected precisely because it hard-requires OpenSSL. We build the thin # SP layer (AuthnRequest, metadata parse, SAMLResponse semantics) on top. -bergshamra = "0.4" +bergshamra = "0.5" roxmltree = "0.21" quick-xml = "0.40" x509-parser = "0.18" @@ -99,24 +99,19 @@ base64 = "0.22" # binary via rustls + bergshamra — so SFTP adds ZERO new C/crypto deps # and the static-musl build stays OpenSSL-free. # -# CRITICAL #2 — pinned to EXACTLY 0.55.0, the newest russh that -# coexists with bergshamra-crypto (our SAML core). The RustCrypto -# ecosystem is mid-transition: bergshamra-crypto pins a constellation of -# release-CANDIDATE crates (`pkcs8 =0.11.0-rc.11` and its matching -# pkcs5/spki RCs) that are API-incompatible with the STABLE versions of -# the same crates in the same semver bucket. russh 0.56+ pulls those -# stable crates (`pkcs5 0.8`), which silently replaces bergshamra's RC -# copies and breaks compilation. russh ≤0.55 stays on the previous stable -# generation (`pkcs5 0.7`, `ssh-key 0.6`), which unifies with bergshamra's -# *stable* deps and leaves the RC bucket untouched — verified to compile. -# 0.55 still has the merged `russh::keys` API (keys merged at 0.50). -# IMPORTANT: do NOT bump russh past 0.55 until bergshamra-crypto adopts -# the stable RustCrypto generation; 0.56+ will not compile in this tree. +# CRITICAL #2 — history: this was pinned to =0.55.0 from v0.5.5 until +# v0.6.3 because bergshamra-crypto pinned release-candidate RustCrypto +# crates that conflicted with the stable generation russh 0.56+ pulls. +# bergshamra 0.5 (2026-06) moved to the stable generation (pkcs8 0.11), +# lifting the pin. v0.6.3 bumps to 0.61+, which also closes a batch of +# RUSTSEC advisories reachable from the SFTP *client* path (unbounded +# allocations in packet parsing — CVE-2026-48110/-46702/-46673 et al.) +# and drops mlock on non-secret buffers (~21% SSH throughput upstream). # # SCP was deliberately rejected: the protocol is sequential-only (no # random access → no HTTP Range, unlike SFTP/NFS) and the mature SCP # crates wrap libssh2 (C + OpenSSL), which would break this build. -russh = { version = "=0.55.0", default-features = false, features = ["ring"] } +russh = { version = "0.61", default-features = false, features = ["ring"] } russh-sftp = "2.3" openpxe-core = { path = "crates/core" } diff --git a/crates/http-api/src/app.rs b/crates/http-api/src/app.rs index f091712..d0a3d17 100644 --- a/crates/http-api/src/app.rs +++ b/crates/http-api/src/app.rs @@ -71,7 +71,7 @@ pub fn build_router(state: AppState) -> Router { .route("/branding/pxe-logo", get(ui_pxe_logo)) // iPXE script endpoints. .route("/boot.ipxe", get(boot_top_menu)) - .route("/boot/:filename", get(boot_sub)) + .route("/boot/{filename}", get(boot_sub)) // v0.5.2: unattended answer-file *serving* — public (like /iso), // because the booting installer fetches these with no session. // `/unattended/:id` serves a Kickstart/Preseed with `{{HOSTNAME}}` @@ -80,12 +80,12 @@ pub fn build_router(state: AppState) -> Router { // autoinstall (`…//user-data` + `/meta-data`), where `` // base64url-encodes the per-host hostname/ip/mac. Management // (upload/list/delete) lives under the gated `/api/unattended`. - .route("/unattended/:id", get(serve_unattended)) - .route("/unattended/:id/:ctx/:sub", get(serve_unattended_seed)) + .route("/unattended/{id}", get(serve_unattended)) + .route("/unattended/{id}/{ctx}/{sub}", get(serve_unattended_seed)) // Bundled binaries and raw ISO access. - .route("/ipxe/:name", get(ipxe_binary)) - .route("/iso/:filename", get(iso_raw)) - .route("/iso/:id/*path", get(iso_file)) + .route("/ipxe/{name}", get(ipxe_binary)) + .route("/iso/{filename}", get(iso_raw)) + .route("/iso/{id}/{*path}", get(iso_file)) // Container health/readiness probes. `/healthz` is always 200 OK // while the HTTP task is alive. `/readyz` additionally requires at // least one bundled iPXE binary (without one, no client can PXE). @@ -93,23 +93,23 @@ pub fn build_router(state: AppState) -> Router { .route("/readyz", get(readyz)) // JSON API. .route("/api/isos", get(api_list_isos).post(api_upload_iso)) - .route("/api/isos/:id", delete(api_delete_iso)) + .route("/api/isos/{id}", delete(api_delete_iso)) .route("/api/uploads", post(api_upload_begin)) .route( - "/api/uploads/:upload_id", + "/api/uploads/{upload_id}", put(api_upload_chunk).delete(api_upload_abort), ) // Per-ISO password prompt. PUT body `{ "password": "..." }` // sets, `{ "password": null }` (or DELETE) clears. .route( - "/api/isos/:id/password", + "/api/isos/{id}/password", axum::routing::put(api_set_iso_password).delete(api_clear_iso_password), ) // v0.4.4: per-ISO menu category (Os / Tools). Drives whether the // image appears under Linux/Windows Installers (default) or in // the Tools submenu next to memtest / shell / NIC info. .route( - "/api/isos/:id/category", + "/api/isos/{id}/category", axum::routing::put(api_set_iso_category), ) // v0.4.4: filesystem free-space telemetry for the ISO directory's @@ -120,7 +120,7 @@ pub fn build_router(state: AppState) -> Router { // logo). v0.5.2: split into three slots — `light` / `dark` / // `client`. Multipart upload to POST; DELETE clears one slot. .route( - "/api/branding/logo/:slot", + "/api/branding/logo/{slot}", post(api_branding_upload).delete(api_branding_clear), ) // v0.5.2: unattended-install answer-file management (gated). @@ -130,7 +130,7 @@ pub fn build_router(state: AppState) -> Router { "/api/unattended", get(api_unattended_list).post(api_unattended_upload), ) - .route("/api/unattended/:id", delete(api_unattended_delete)) + .route("/api/unattended/{id}", delete(api_unattended_delete)) // v0.4.4: self-rendered API reference, served as JSON so the UI // can format it consistently with the rest of the chrome. Lives // under the Settings tab — operators chasing an integration get @@ -161,12 +161,12 @@ pub fn build_router(state: AppState) -> Router { .route("/api/settings", get(api_get_settings).put(api_put_settings)) .route("/api/queue", get(api_list_queue)) .route("/api/queue/join", get(api_queue_join)) - .route("/api/queue/poll/:entry_id", get(api_queue_poll)) + .route("/api/queue/poll/{entry_id}", get(api_queue_poll)) .route("/api/queue/assign", post(api_queue_assign)) // v0.5.2: per-device deployment profile (auto hostname / IP / // unattended file) set from the queue "Profile" button. - .route("/api/queue/:entry_id/profile", put(api_queue_set_profile)) - .route("/api/queue/:entry_id", delete(api_queue_release)) + .route("/api/queue/{entry_id}/profile", put(api_queue_set_profile)) + .route("/api/queue/{entry_id}", delete(api_queue_release)) // v0.4.65: SMB share manager (userspace via smbclient). The // kernel-mount NFS routes that v0.4.64 shipped are gone — they // didn't work on hosts whose kernel lacked the nfs client @@ -177,8 +177,8 @@ pub fn build_router(state: AppState) -> Router { "/api/smb-shares", get(api_smb_shares_list).post(api_smb_shares_add), ) - .route("/api/smb-shares/:id", delete(api_smb_shares_remove)) - .route("/api/smb-shares/:id/scan", post(api_smb_shares_scan)) + .route("/api/smb-shares/{id}", delete(api_smb_shares_remove)) + .route("/api/smb-shares/{id}/scan", post(api_smb_shares_scan)) // v0.4.67: NFSv3 share manager (pure-Rust in-process client). // Ships alongside SMB. Routes are parallel so the UI can // reuse the same form/error/hint rendering for both. @@ -186,8 +186,8 @@ pub fn build_router(state: AppState) -> Router { "/api/nfs-shares", get(api_nfs_shares_list).post(api_nfs_shares_add), ) - .route("/api/nfs-shares/:id", delete(api_nfs_shares_remove)) - .route("/api/nfs-shares/:id/scan", post(api_nfs_shares_scan)) + .route("/api/nfs-shares/{id}", delete(api_nfs_shares_remove)) + .route("/api/nfs-shares/{id}/scan", post(api_nfs_shares_scan)) // v0.5.5: SFTP-over-SSH share manager (pure-Rust russh client). // Parallel to SMB/NFS so the UI reuses the same form/error/hint // rendering. Like NFS, SFTP-sourced ISOs support Range requests. @@ -195,8 +195,8 @@ pub fn build_router(state: AppState) -> Router { "/api/sftp-shares", get(api_sftp_shares_list).post(api_sftp_shares_add), ) - .route("/api/sftp-shares/:id", delete(api_sftp_shares_remove)) - .route("/api/sftp-shares/:id/scan", post(api_sftp_shares_scan)) + .route("/api/sftp-shares/{id}", delete(api_sftp_shares_remove)) + .route("/api/sftp-shares/{id}/scan", post(api_sftp_shares_scan)) // Phase 4: Network info (read-only) + DNS edit. .route("/api/network", get(api_network).put(api_network_put)) // Phase 4: live-log stream + recent buffer for the Terminal tab. @@ -208,10 +208,10 @@ pub fn build_router(state: AppState) -> Router { // Phase 5: per-MAC host bindings. Operator // pins a MAC to a boot entry; /boot.ipxe?mac=... chains directly. .route("/api/hosts", get(api_hosts_list).post(api_hosts_upsert)) - .route("/api/hosts/:mac", delete(api_hosts_remove)) + .route("/api/hosts/{mac}", delete(api_hosts_remove)) // v0.5.0: Wake-on-LAN a bound host. Sends a magic packet to the // limited broadcast + the server's own subnet broadcast. - .route("/api/hosts/:mac/wol", post(api_hosts_wol)) + .route("/api/hosts/{mac}/wol", post(api_hosts_wol)) // Rolling "host log" of boot events: what image actually // started installing on what MAC/IP, and when. Persisted to disk. .route("/api/boot-log", get(api_boot_log)) @@ -520,14 +520,15 @@ fn text_plain(body: String) -> Response { /// to the bound target instead of rendering the menu. async fn boot_top_menu( State(state): State, - peer: Option>, + peer: Result, axum::extract::rejection::ExtensionRejection>, Query(p): Query, ) -> Response { // `ConnectInfo` is only populated when axum was started with // `into_make_service_with_connect_info` (production path). Tests // call the router via `oneshot`, which skips that wiring — we // tolerate it by treating the peer as unknown rather than 500ing. - let peer_ip = peer.map(|c| c.0.ip()); + // (axum 0.8: `Result` is the optional-extractor form.) + let peer_ip = peer.ok().map(|c| c.0.ip()); state .metrics .record_http(openpxe_core::HttpRoute::BootScript); @@ -619,11 +620,12 @@ struct BootSubParams { async fn boot_sub( State(state): State, - peer: Option>, + peer: Result, axum::extract::rejection::ExtensionRejection>, AxumPath(filename): AxumPath, Query(p): Query, ) -> Response { - let peer_ip = peer.map(|c| c.0.ip()); + // axum 0.8: `Result` is the optional-extractor form. + let peer_ip = peer.ok().map(|c| c.0.ip()); // `/boot/.ipxe` where `` is either one of our reserved // submenu names (prefixed `_`) or a boot entry id. let name = filename.strip_suffix(".ipxe").unwrap_or(&filename); @@ -1560,13 +1562,13 @@ async fn api_docs() -> Json { "summary": "List ISOs (local + NFS) with size, family, boot entries, category."}, {"method": "POST", "path": "/api/isos", "summary": "Legacy single-shot multipart upload. Prefer /api/uploads for big files."}, - {"method": "DELETE", "path": "/api/isos/:id", + {"method": "DELETE", "path": "/api/isos/{id}", "summary": "Delete a local ISO and its sidecar metadata."}, - {"method": "PUT", "path": "/api/isos/:id/password", + {"method": "PUT", "path": "/api/isos/{id}/password", "summary": "Set or update an ISO's boot password (bcrypt-hashed; plaintext never stored)."}, - {"method": "DELETE", "path": "/api/isos/:id/password", + {"method": "DELETE", "path": "/api/isos/{id}/password", "summary": "Clear an ISO's boot password."}, - {"method": "PUT", "path": "/api/isos/:id/category", + {"method": "PUT", "path": "/api/isos/{id}/category", "summary": "Set the menu category. Body: { \"category\": \"os\" | \"tools\" }."}, ], }, @@ -1575,9 +1577,9 @@ async fn api_docs() -> Json { "endpoints": [ {"method": "POST", "path": "/api/uploads", "summary": "Begin a chunked upload session. Body: { \"filename\", \"size_bytes\" }."}, - {"method": "PUT", "path": "/api/uploads/:upload_id", + {"method": "PUT", "path": "/api/uploads/{upload_id}", "summary": "Append a chunk. Headers: x-openpxe-upload-offset, x-openpxe-upload-complete."}, - {"method": "DELETE", "path": "/api/uploads/:upload_id", + {"method": "DELETE", "path": "/api/uploads/{upload_id}", "summary": "Abort a chunked upload session and remove the .partial file."}, ], }, @@ -1588,9 +1590,9 @@ async fn api_docs() -> Json { "summary": "List configured SMB shares with connection state and iso counts."}, {"method": "POST", "path": "/api/smb-shares", "summary": "Register an SMB share. Body: { server, share, guest, username?, password?, port? }."}, - {"method": "DELETE", "path": "/api/smb-shares/:id", + {"method": "DELETE", "path": "/api/smb-shares/{id}", "summary": "Forget a share and drop its entries from the ISO store."}, - {"method": "POST", "path": "/api/smb-shares/:id/scan", + {"method": "POST", "path": "/api/smb-shares/{id}/scan", "summary": "Re-list a share for new ISOs."}, ], }, @@ -1601,9 +1603,9 @@ async fn api_docs() -> Json { "summary": "List configured NFSv3 shares with connection state and iso counts."}, {"method": "POST", "path": "/api/nfs-shares", "summary": "Register an NFSv3 share. Body: { server, export, port? }. Auth is AUTH_SYS only; access control is by client IP on the server side."}, - {"method": "DELETE", "path": "/api/nfs-shares/:id", + {"method": "DELETE", "path": "/api/nfs-shares/{id}", "summary": "Forget a share and drop its entries from the ISO store."}, - {"method": "POST", "path": "/api/nfs-shares/:id/scan", + {"method": "POST", "path": "/api/nfs-shares/{id}/scan", "summary": "Re-list a share for new ISOs."}, ], }, @@ -1614,9 +1616,9 @@ async fn api_docs() -> Json { "summary": "List configured SFTP-over-SSH shares with connection state and iso counts."}, {"method": "POST", "path": "/api/sftp-shares", "summary": "Register an SFTP share. Body: { server, export, username, port?, password? | private_key? + passphrase? }. The server's SSH host key is pinned trust-on-first-use."}, - {"method": "DELETE", "path": "/api/sftp-shares/:id", + {"method": "DELETE", "path": "/api/sftp-shares/{id}", "summary": "Forget a share, drop its entries from the ISO store, and scrub its credentials file."}, - {"method": "POST", "path": "/api/sftp-shares/:id/scan", + {"method": "POST", "path": "/api/sftp-shares/{id}/scan", "summary": "Re-list a share for new ISOs."}, ], }, @@ -1636,9 +1638,9 @@ async fn api_docs() -> Json { "summary": "Current runtime settings (Windows toggle, timeout, dns hint, …)."}, {"method": "PUT", "path": "/api/settings", "summary": "Replace runtime settings. Guards against enabling Windows when wimboot isn't bundled."}, - {"method": "POST", "path": "/api/branding/logo/:slot", + {"method": "POST", "path": "/api/branding/logo/{slot}", "summary": "Upload a custom logo for a slot (light | dark | client). Multipart 'file', PNG/SVG/JPEG/WebP/GIF up to 2 MB. The client slot is raster-only."}, - {"method": "DELETE", "path": "/api/branding/logo/:slot", + {"method": "DELETE", "path": "/api/branding/logo/{slot}", "summary": "Remove the custom logo for a slot and revert to the bundled mark."}, {"method": "GET", "path": "/branding/pxe-logo", "summary": "Raster form of the operator's 'client' logo for the iPXE menu's `console --picture`. Default background when unset/SVG."}, @@ -1679,9 +1681,9 @@ async fn api_docs() -> Json { "summary": "List uploaded answer files (Kickstart / Preseed / Autoinstall / Windows answer file)."}, {"method": "POST", "path": "/api/unattended", "summary": "Upload an answer file (multipart 'file', .ks/.cfg/.seed/.yaml/.yml/.xml/user-data, up to 1 MB)."}, - {"method": "DELETE", "path": "/api/unattended/:id", + {"method": "DELETE", "path": "/api/unattended/{id}", "summary": "Delete an uploaded answer file."}, - {"method": "GET", "path": "/unattended/:id", + {"method": "GET", "path": "/unattended/{id}", "summary": "Public: serve an answer file with {{HOSTNAME}}/{{IP}}/{{MAC}} substituted from the query string."}, ], }, @@ -1692,9 +1694,9 @@ async fn api_docs() -> Json { "summary": "List queue entries (waiting + assigned, with any deployment profile)."}, {"method": "POST", "path": "/api/queue/assign", "summary": "Assign a target image to queued clients. Body: { target, entry_ids }."}, - {"method": "PUT", "path": "/api/queue/:entry_id/profile", + {"method": "PUT", "path": "/api/queue/{entry_id}/profile", "summary": "Set a queued device's deployment profile. Body: { auto_hostname?, auto_ip?, unattended_file? }."}, - {"method": "DELETE", "path": "/api/queue/:entry_id", + {"method": "DELETE", "path": "/api/queue/{entry_id}", "summary": "Release a queue entry without assigning."}, ], }, @@ -1705,9 +1707,9 @@ async fn api_docs() -> Json { "summary": "List per-MAC boot bindings."}, {"method": "POST", "path": "/api/hosts", "summary": "Pin a MAC to a boot target. Body: { mac, target, label, auto_hostname?, auto_ip?, unattended_file? }."}, - {"method": "DELETE", "path": "/api/hosts/:mac", + {"method": "DELETE", "path": "/api/hosts/{mac}", "summary": "Remove a binding."}, - {"method": "POST", "path": "/api/hosts/:mac/wol", + {"method": "POST", "path": "/api/hosts/{mac}/wol", "summary": "Send a Wake-on-LAN magic packet to a bound MAC (limited + subnet broadcast)."}, {"method": "GET", "path": "/api/boot-log", "summary": "Ring of recent boot events (timestamp, mac, ip, target)."}, diff --git a/crates/http-api/tests/full_flow.rs b/crates/http-api/tests/full_flow.rs index 4f3f0d2..9dafee3 100644 --- a/crates/http-api/tests/full_flow.rs +++ b/crates/http-api/tests/full_flow.rs @@ -1489,9 +1489,10 @@ async fn api_docs_lists_known_endpoints() { } for needle in [ "/api/isos", - "/api/isos/:id/category", + // v0.6.3: docs use axum 0.8's `{param}` capture syntax. + "/api/isos/{id}/category", "/api/storage/disk", - "/api/branding/logo/:slot", + "/api/branding/logo/{slot}", "/api/unattended", "/api/boot-log", "/metrics",