From 08f91c88d3d7a4a01c7884a0b6a65c26741b3e44 Mon Sep 17 00:00:00 2001 From: mmorrissette-devolutions Date: Mon, 1 Jun 2026 14:24:08 -0400 Subject: [PATCH 1/4] chore: update dependencies Bump RustCrypto crates, rand, strum, and arbitrary to current versions and adapt to their API changes. - aes 0.8 -> 0.9, cbc 0.1 -> 0.2 (cipher 0.5 trait/method renames) - hmac 0.12 -> 0.13, pbkdf2 0.12 -> 0.13, scrypt 0.11 -> 0.12, sha2 0.10 -> 0.11 (digest 0.11) - strum 0.27 -> 0.28 - rand 0.9 -> 0.10: OsRng -> SysRng, TryRngCore -> TryRng; wasm getrandom 0.3 -> 0.4 - arbitrary 0.4 -> 1 with lifetime annotations; libfuzzer-sys 0.3 -> 0.4 - getrandom_v02 feature list reduced to ["js"], dropping the redundant wasm-bindgen entry and fixing cargo outdated resolution ShareV1 gets a hand-written Arbitrary impl that builds the share from raw bytes, since blahaj::Share only implements arbitrary 0.4 and cannot be derived under 1.x. getrandom_v02 (0.2) and rand_08 (0.8) are kept because the rand_core 0.6 line (dalek crates, chacha20poly1305, rand 0.8) still requires them. arbitrary is gated behind the fuzz feature so none of these changes affect production crypto. Verified: native test suite (125 tests, including conformity), wasm32 build, wasm-pack browser tests in Firefox, and a 15s fuzz run of join_shares (371k executions, no crashes). --- Cargo.lock | 958 +++++++++++++----- Cargo.toml | 24 +- fuzz/Cargo.toml | 4 +- src/argon2parameters.rs | 8 +- src/ciphertext/ciphertext_v1.rs | 12 +- src/ciphertext/ciphertext_v2.rs | 8 +- src/error.rs | 2 +- src/header.rs | 4 +- src/key/key_v1.rs | 8 +- src/key/secret_key_v1.rs | 4 +- src/key_derivation/key_derivation_v1.rs | 6 +- src/key_derivation/mod.rs | 8 +- src/online_ciphertext/online_ciphertext_v1.rs | 6 +- src/password_hash/password_hash_v1.rs | 8 +- src/password_hash/password_hash_v2.rs | 4 +- src/secret_sharing/secret_sharing_v1.rs | 15 +- src/signature/signature_v1.rs | 4 +- src/signing_key/signing_key_v1.rs | 8 +- src/utils.rs | 6 +- 19 files changed, 763 insertions(+), 334 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7e63036bb..719245493 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,19 +8,19 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "generic-array", ] [[package]] name = "aes" -version = "0.8.4" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", + "cipher 0.5.2", + "cpubits", + "cpufeatures 0.3.0", ] [[package]] @@ -31,9 +31,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -46,15 +46,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] @@ -81,9 +81,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "arbitrary" @@ -91,7 +91,16 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db55d72333851e17d572bec876e390cd3b11eb1ef53ae821dd9f3b653d2b4569" dependencies = [ - "derive_arbitrary", + "derive_arbitrary 0.4.7", +] + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary 1.4.2", ] [[package]] @@ -136,7 +145,7 @@ dependencies = [ "rustc-hash", "serde", "serde_derive", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -148,14 +157,25 @@ dependencies = [ "memchr", "serde", "serde_derive", - "winnow", + "winnow 0.7.15", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "base64" @@ -171,9 +191,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.0" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "basic-toml" @@ -186,9 +206,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" [[package]] name = "blahaj" @@ -196,33 +216,34 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5106bf2680d585dc5f29711b8aa5dde353180b8e14af89b7f0424f760c84e7ce" dependencies = [ - "arbitrary", + "arbitrary 0.4.7", "hashbrown 0.15.5", - "rand 0.8.5", + "rand 0.8.6", ] [[package]] name = "blake2b_simd" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +checksum = "b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq 0.3.1", + "constant_time_eq", ] [[package]] name = "blake3" -version = "1.8.2" +version = "1.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", - "constant_time_eq 0.3.1", + "constant_time_eq", + "cpufeatures 0.3.0", "zeroize", ] @@ -235,20 +256,29 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block-padding" -version = "0.3.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byteorder" @@ -258,15 +288,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "camino" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" dependencies = [ "serde_core", ] @@ -294,22 +324,30 @@ dependencies = [ "thiserror", ] +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + [[package]] name = "cbc" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896" dependencies = [ - "cipher", + "cipher 0.5.2", ] [[package]] name = "cc" -version = "1.2.46" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97463e1064cb1b1c1384ad0a0b9c8abd0988e2a91f52606c80ef14aadb63e36" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] @@ -326,8 +364,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.1", ] [[package]] @@ -337,8 +386,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ "aead", - "chacha20", - "cipher", + "chacha20 0.9.1", + "cipher 0.4.4", "poly1305", "zeroize", ] @@ -349,16 +398,27 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", - "inout", + "crypto-common 0.1.7", + "inout 0.1.4", "zeroize", ] +[[package]] +name = "cipher" +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", +] + [[package]] name = "clap" -version = "4.5.52" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa8120877db0e5c011242f96806ce3c94e0737ab8108532a76a3300a01db2ab8" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -366,9 +426,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.52" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02576b399397b659c26064fbc92a75fede9d18ffd5f80ca1cd74ddab167016e1" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstream", "anstyle", @@ -378,27 +438,33 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "cmov" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "const-oid" @@ -407,10 +473,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] -name = "constant_time_eq" -version = "0.3.1" +name = "const-oid" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "constant_time_eq" @@ -418,6 +484,12 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -427,6 +499,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 = "crypto-common" version = "0.1.7" @@ -438,6 +519,24 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -445,9 +544,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", - "digest", + "digest 0.10.7", "fiat-crypto", "rustc_version", "subtle", @@ -462,7 +561,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -471,7 +570,7 @@ version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ - "const-oid", + "const-oid 0.9.6", "zeroize", ] @@ -486,13 +585,24 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "devolutions-crypto" version = "0.9.3" dependencies = [ "aead", "aes", - "arbitrary", + "arbitrary 1.4.2", "base64 0.22.1", "blahaj", "blake3", @@ -502,19 +612,19 @@ dependencies = [ "chacha20poly1305", "dyn-clone", "ed25519-dalek", - "getrandom 0.2.16", - "getrandom 0.3.4", + "getrandom 0.2.17", + "getrandom 0.4.2", "hmac", "js-sys", "num_enum", "paste", "pbkdf2", - "rand 0.8.5", - "rand 0.9.2", + "rand 0.10.1", + "rand 0.8.6", "rust-argon2", "scrypt", "serde-wasm-bindgen", - "sha2", + "sha2 0.11.0", "strum", "subtle", "thiserror", @@ -547,7 +657,7 @@ dependencies = [ name = "devolutions-crypto-fuzz" version = "0.9.3" dependencies = [ - "arbitrary", + "arbitrary 1.4.2", "devolutions-crypto", "libfuzzer-sys", ] @@ -577,9 +687,20 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", - "subtle", + "block-buffer 0.10.4", + "crypto-common 0.1.7", +] + +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.0", + "const-oid 0.10.2", + "crypto-common 0.2.2", + "ctutils", ] [[package]] @@ -608,7 +729,7 @@ dependencies = [ "ed25519", "rand_core 0.6.4", "serde", - "sha2", + "sha2 0.10.9", "subtle", "zeroize", ] @@ -631,9 +752,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "fiat-crypto" @@ -643,9 +764,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "foldhash" @@ -662,6 +783,30 @@ dependencies = [ "autocfg", ] +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -674,9 +819,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -690,12 +835,26 @@ name = "getrandom" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 6.0.0", + "rand_core 0.10.1", "wasip2", + "wasip3", "wasm-bindgen", ] @@ -729,9 +888,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heck" @@ -741,21 +900,36 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "digest", + "digest 0.11.3", ] +[[package]] +name = "hybrid-array" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +dependencies = [ + "typenum", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "indexmap" -version = "2.12.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -775,10 +949,19 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "block-padding", "generic-array", ] +[[package]] +name = "inout" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" +dependencies = [ + "block-padding", + "hybrid-array", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -787,53 +970,77 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] +[[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.177" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libfuzzer-sys" -version = "0.3.5" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf184a4b6b274f82a5df6b357da6055d3e82272327bba281c28bbba6f1664ef" +checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" dependencies = [ - "arbitrary", + "arbitrary 1.4.2", "cc", ] +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "log" -version = "0.4.28" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "memoffset" @@ -846,9 +1053,9 @@ dependencies = [ [[package]] name = "minicov" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" +checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d" dependencies = [ "cc", "walkdir", @@ -870,11 +1077,30 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + [[package]] name = "num_enum" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", "rustversion", @@ -882,21 +1108,21 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" @@ -904,6 +1130,12 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + [[package]] name = "opaque-debug" version = "0.3.1" @@ -918,11 +1150,11 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pbkdf2" -version = "0.12.2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" dependencies = [ - "digest", + "digest 0.11.3", "hmac", ] @@ -932,6 +1164,12 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + [[package]] name = "pkcs8" version = "0.10.2" @@ -954,16 +1192,16 @@ 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", ] [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "ppv-lite86" @@ -974,20 +1212,30 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.117", +] + [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -1038,7 +1286,7 @@ dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1051,23 +1299,23 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "python3-dll-a" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d381ef313ae70b4da5f95f8a4de773c6aa5cd28f73adec4b4a31df70b66780d8" +checksum = "d80ba7540edb18890d444c5aa8e1f1f99b1bdf26fb26ae383135325f4a36042b" dependencies = [ "cc", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -1078,25 +1326,32 @@ 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" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", - "rand_chacha 0.3.1", + "rand_chacha", "rand_core 0.6.4", ] [[package]] name = "rand" -version = "0.9.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", + "chacha20 0.10.0", + "getrandom 0.4.2", + "rand_core 0.10.1", ] [[package]] @@ -1109,33 +1364,20 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.3", -] - [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -dependencies = [ - "getrandom 0.3.4", -] +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "rust-argon2" @@ -1145,14 +1387,14 @@ checksum = "8ae76b7506744d254fd0eb2c0ff5c5d108201ccbb083111ac04a44eeda105680" dependencies = [ "base64 0.22.1", "blake2b_simd", - "constant_time_eq 0.4.2", + "constant_time_eq", ] [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] name = "rustc_version" @@ -1165,9 +1407,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags", "errno", @@ -1182,19 +1424,14 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - [[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.2", ] [[package]] @@ -1223,25 +1460,26 @@ checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "scrypt" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +checksum = "d87af57419b594aa23fa95f09f0e06d80d84ba01c26148c43844cad6ff4485f0" dependencies = [ + "cfg-if", "pbkdf2", "salsa20", - "sha2", + "sha2 0.11.0", ] [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" dependencies = [ "serde", "serde_core", @@ -1285,27 +1523,27 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] name = "serde_spanned" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ "serde_core", ] @@ -1317,15 +1555,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signature" @@ -1338,9 +1587,15 @@ dependencies = [ [[package]] name = "siphasher" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smawk" @@ -1372,23 +1627,23 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1410,9 +1665,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.110" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -1421,18 +1676,18 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.13.3" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" +checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" [[package]] name = "tempfile" -version = "3.23.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.2", "once_cell", "rustix", "windows-sys", @@ -1449,74 +1704,83 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "toml" -version = "0.9.8" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap", "serde_core", "serde_spanned", - "toml_datetime", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.15", ] [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", - "toml_datetime", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow", + "winnow 1.0.3", ] [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow", + "winnow 1.0.3", ] [[package]] name = "toml_writer" -version = "1.0.6+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "typed-builder" @@ -1535,20 +1799,26 @@ checksum = "076a02dc54dd46795c2e9c8282ed40bcfb1e22747e955de9389a1de28190fb26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "uniffi" @@ -1621,7 +1891,7 @@ dependencies = [ "indexmap", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1636,7 +1906,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.110", + "syn 2.0.117", "toml", "uniffi_meta", ] @@ -1690,7 +1960,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "subtle", ] @@ -1724,18 +1994,27 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.3+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +dependencies = [ + "wit-bindgen 0.57.1", +] + +[[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 = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -1746,22 +2025,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.55" +version = "0.4.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" dependencies = [ - "cfg-if", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1769,58 +2045,97 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.55" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc379bfb624eb59050b509c13e77b4eb53150c350db69628141abce842f2373" +checksum = "74fde991ccdc895cb7fbaa14b137d62af74d9011be67b71c694bfc40edd3119c" dependencies = [ + "async-trait", + "cast", "js-sys", + "libm", "minicov", + "nu-ansi-term", + "num-traits", + "oorandom", + "serde", + "serde_json", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", + "wasm-bindgen-test-shared", ] [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.55" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "085b2df989e1e6f9620c1311df6c996e83fe16f57792b272ce1e024ac16a90f1" +checksum = "e925354648d2a4d1bf205412e36d520a800280622eef4719678d268e5d40e978" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] -name = "web-sys" -version = "0.3.82" +name = "wasm-bindgen-test-shared" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +checksum = "684365b586a9a6256c1cc3544eee8680de48d6041142f581776ec7b139622ae9" + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" dependencies = [ - "js-sys", - "wasm-bindgen", + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap", + "semver", ] [[package]] @@ -1858,18 +2173,115 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] [[package]] name = "wit-bindgen" -version = "0.46.0" +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" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[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 = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn 2.0.117", + "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 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "x25519-dalek" @@ -1885,22 +2297,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] [[package]] @@ -1914,11 +2326,17 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.117", ] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/Cargo.toml b/Cargo.toml index efc26817c..cc5b52e81 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,22 +31,22 @@ crate-type = ["cdylib", "rlib"] [dependencies] aead = { version = "0.5", features = ["stream"] } -aes = "0.8" +aes = "0.9" base64 = "0.22" -cbc = { version = "0.1.2", features = ["block-padding", "alloc"] } +cbc = { version = "0.2", features = ["block-padding", "alloc"] } byteorder = "1" chacha20poly1305 = "0.10" cfg-if = "1" -hmac = "0.12" +hmac = "0.13" num_enum = "0.7" -pbkdf2 = { version = "0.12", default-features = false } -scrypt = { version = "0.11", default-features = false } +pbkdf2 = { version = "0.13", default-features = false } +scrypt = { version = "0.12", default-features = false } blahaj = { version = "0.6", default-features = false } -sha2 = "0.10" -strum = { version = "0.27", features = ["derive"] } +sha2 = "0.11" +strum = { version = "0.28", features = ["derive"] } subtle = "2" zeroize = { version = "1.8" } -rand = "0.9" +rand = "0.10" rand_08 = { package = "rand", version = "0.8" } thiserror = "2.0.12" typed-builder = "0.23.2" @@ -56,9 +56,7 @@ ed25519-dalek = { version = "2", features = [ "rand_core" ] } x25519-dalek = { version = "2", features = [ "static_secrets" ] } # used for fuzzing -# Version is pinned because newer version requires lifetime annotations -# that isn't compatible with the header trait -arbitrary = { version = "0.4.7", features = ["derive"], optional = true } +arbitrary = { version = "1", features = ["derive"], optional = true } blake3 = { version = "1.8", features = ["zeroize"] } paste = "1.0.15" dyn-clone = "1.0" @@ -67,7 +65,7 @@ dyn-clone = "1.0" wasm-bindgen = { version = "0.2.100", optional = true } serde-wasm-bindgen = { version = "0.6.5", optional = true } js-sys = { version = "0.3.77", optional = true } -getrandom = { version = "0.3", features = ["wasm_js"] } +getrandom = { version = "0.4", features = ["wasm_js"] } [target.wasm32-unknown-unknown.dev-dependencies] wasm-bindgen-test = "0.3" @@ -80,4 +78,4 @@ wbindgen = ["wasm-bindgen", "serde-wasm-bindgen", "js-sys"] [dependencies.getrandom_v02] package = "getrandom" version = "0.2" -features = ["js", "wasm-bindgen"] \ No newline at end of file +features = ["js"] \ No newline at end of file diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index b9849a592..9f7512cee 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -10,8 +10,8 @@ edition = "2018" cargo-fuzz = true [dependencies] -libfuzzer-sys = "0.3" -arbitrary = { version = "0.4.2", features = ["derive"] } +libfuzzer-sys = "0.4" +arbitrary = { version = "1", features = ["derive"] } [dependencies.devolutions-crypto] path = ".." diff --git a/src/argon2parameters.rs b/src/argon2parameters.rs index a01a891e1..df256387e 100644 --- a/src/argon2parameters.rs +++ b/src/argon2parameters.rs @@ -5,7 +5,7 @@ use std::{ use argon2::{Config, Variant, Version}; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; -use rand::TryRngCore; +use rand::TryRng; use typed_builder::TypedBuilder; #[cfg(feature = "wbindgen")] @@ -19,7 +19,7 @@ pub mod defaults { use super::Result; use argon2::Variant; use argon2::Version; - use rand::TryRngCore; + use rand::TryRng; pub const LENGTH: u32 = 32; pub const LANES: u32 = 1; @@ -31,7 +31,7 @@ pub mod defaults { pub fn salt() -> Result> { let mut salt = vec![0u8; 16]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(salt.as_mut_slice()) .map_err(|_| Error::RandomError)?; Ok(salt) @@ -98,7 +98,7 @@ impl Default for Argon2Parameters { fn default() -> Self { let mut salt = vec![0u8; 16]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(salt.as_mut_slice()) .unwrap(); diff --git a/src/ciphertext/ciphertext_v1.rs b/src/ciphertext/ciphertext_v1.rs index 2aa1d5a57..94e797b57 100644 --- a/src/ciphertext/ciphertext_v1.rs +++ b/src/ciphertext/ciphertext_v1.rs @@ -8,13 +8,13 @@ use super::Ciphertext; use std::convert::TryFrom; use aes::Aes256; -use cbc::cipher::{block_padding::Pkcs7, BlockDecryptMut, BlockEncryptMut, KeyIvInit}; -use hmac::{Hmac, Mac}; +use cbc::cipher::{block_padding::Pkcs7, BlockModeDecrypt, BlockModeEncrypt, KeyIvInit}; +use hmac::{Hmac, KeyInit, Mac}; use pbkdf2::pbkdf2; use sha2::Sha256; use zeroize::{Zeroize, Zeroizing}; -use rand::TryRngCore; +use rand::TryRng; #[cfg(feature = "fuzz")] use arbitrary::Arbitrary; @@ -85,13 +85,13 @@ impl CiphertextV1 { // Generate IV let mut iv = [0u8; 16]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(&mut iv) .map_err(|_| Error::RandomError)?; // Create cipher object let cipher = cbc::Encryptor::::new_from_slices(&encryption_key, &iv)?; - let ciphertext = cipher.encrypt_padded_vec_mut::(data); + let ciphertext = cipher.encrypt_padded_vec::(data); // Append MAC data let mut mac_data: Zeroizing> = Zeroizing::new(header.into()); @@ -129,7 +129,7 @@ impl CiphertextV1 { mac.verify_slice(&self.hmac)?; let cipher = cbc::Decryptor::::new_from_slices(&encryption_key, &self.iv)?; - let result = cipher.decrypt_padded_vec_mut::(&self.ciphertext)?; + let result = cipher.decrypt_padded_vec::(&self.ciphertext)?; Ok(result) } diff --git a/src/ciphertext/ciphertext_v2.rs b/src/ciphertext/ciphertext_v2.rs index aae1f2781..3f57d9099 100644 --- a/src/ciphertext/ciphertext_v2.rs +++ b/src/ciphertext/ciphertext_v2.rs @@ -16,7 +16,7 @@ use sha2::{Digest, Sha256}; use x25519_dalek::StaticSecret; use zeroize::{Zeroize, Zeroizing}; -use rand::TryRngCore; +use rand::TryRng; #[cfg(feature = "fuzz")] use arbitrary::Arbitrary; @@ -36,8 +36,8 @@ pub struct CiphertextV2Asymmetric { } #[cfg(feature = "fuzz")] -impl Arbitrary for CiphertextV2Asymmetric { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for CiphertextV2Asymmetric { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { let public_key: [u8; 32] = Arbitrary::arbitrary(u)?; let public_key = x25519_dalek::PublicKey::from(public_key); let ciphertext = CiphertextV2Symmetric::arbitrary(u)?; @@ -93,7 +93,7 @@ impl CiphertextV2Symmetric { // Generate nonce let mut nonce_bytes = [0u8; 24]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(&mut nonce_bytes) .map_err(|_| Error::RandomError)?; diff --git a/src/error.rs b/src/error.rs index 99a8d5ee4..22c27e55c 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,5 +1,5 @@ //! Possible errors in the library. -use cbc::cipher::block_padding::UnpadError; +use cbc::cipher::block_padding::Error as UnpadError; #[cfg(feature = "wbindgen")] use wasm_bindgen::JsValue; diff --git a/src/header.rs b/src/header.rs index 37140c119..c9caeb75b 100644 --- a/src/header.rs +++ b/src/header.rs @@ -18,8 +18,8 @@ const SIGNATURE: u16 = 0x0C0D; pub trait HeaderType { cfg_if! { if #[cfg(feature = "fuzz")] { - type Version: Into + TryFrom + Clone + Default + Zeroize + std::fmt::Debug + Arbitrary; - type Subtype: Into + TryFrom + Clone + Default + Zeroize + std::fmt::Debug + Arbitrary; + type Version: Into + TryFrom + Clone + Default + Zeroize + std::fmt::Debug + for<'a> Arbitrary<'a>; + type Subtype: Into + TryFrom + Clone + Default + Zeroize + std::fmt::Debug + for<'a> Arbitrary<'a>; } else { type Version: Into + TryFrom + Clone + Default + Zeroize + std::fmt::Debug; diff --git a/src/key/key_v1.rs b/src/key/key_v1.rs index 822626b2e..02a2469f5 100644 --- a/src/key/key_v1.rs +++ b/src/key/key_v1.rs @@ -27,8 +27,8 @@ impl core::fmt::Debug for KeyV1Private { } #[cfg(feature = "fuzz")] -impl Arbitrary for KeyV1Private { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for KeyV1Private { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { let private_key: [u8; 32] = Arbitrary::arbitrary(u)?; Ok(Self { key: x25519_dalek::StaticSecret::from(private_key), @@ -42,8 +42,8 @@ pub struct KeyV1Public { } #[cfg(feature = "fuzz")] -impl Arbitrary for KeyV1Public { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for KeyV1Public { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { let public_key: [u8; 32] = Arbitrary::arbitrary(u)?; Ok(Self { key: x25519_dalek::PublicKey::from(public_key), diff --git a/src/key/secret_key_v1.rs b/src/key/secret_key_v1.rs index 508cc5a18..8ef022a46 100644 --- a/src/key/secret_key_v1.rs +++ b/src/key/secret_key_v1.rs @@ -22,8 +22,8 @@ impl core::fmt::Debug for SecretKeyV1 { } #[cfg(feature = "fuzz")] -impl Arbitrary for SecretKeyV1 { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for SecretKeyV1 { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { let key: [u8; 32] = Arbitrary::arbitrary(u)?; Ok(Self { key: Zeroizing::new(key), diff --git a/src/key_derivation/key_derivation_v1.rs b/src/key_derivation/key_derivation_v1.rs index 559aa1c4f..251c54d98 100644 --- a/src/key_derivation/key_derivation_v1.rs +++ b/src/key_derivation/key_derivation_v1.rs @@ -5,7 +5,7 @@ use std::io::{Cursor, Read, Write}; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use zeroize::Zeroizing; -use rand::TryRngCore; +use rand::TryRng; use crate::key::{secret_key_from_raw, SecretKey}; use crate::utils::derive_key_pbkdf2; @@ -86,7 +86,7 @@ impl Pbkdf2 { /// Derives the key using a randomly generated salt. pub fn derive(&self, key: &[u8]) -> Result<(SecretKey, DerivationParameters)> { let mut salt = vec![0u8; 16]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(&mut salt) .map_err(|_| Error::RandomError)?; self.derive_with_salt(key, &salt) @@ -121,7 +121,7 @@ impl Pbkdf2 { /// Useful for passing custom parameters to [`crate::password_hash::hash_password_with_parameters`]. pub fn parameters(self) -> Result { let mut salt = vec![0u8; 16]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(&mut salt) .map_err(|_| Error::RandomError)?; let v1 = KeyDerivationV1 { diff --git a/src/key_derivation/mod.rs b/src/key_derivation/mod.rs index ec13b3da0..6bb7301fc 100644 --- a/src/key_derivation/mod.rs +++ b/src/key_derivation/mod.rs @@ -77,8 +77,8 @@ pub(super) enum DerivationParametersPayload { } #[cfg(feature = "fuzz")] -impl Arbitrary for KeyDerivationV1 { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for KeyDerivationV1 { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { Ok(KeyDerivationV1 { iterations: u32::arbitrary(u)?, salt: Vec::::arbitrary(u)?, @@ -87,8 +87,8 @@ impl Arbitrary for KeyDerivationV1 { } #[cfg(feature = "fuzz")] -impl Arbitrary for KeyDerivationV2 { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for KeyDerivationV2 { + fn arbitrary(_u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { Ok(KeyDerivationV2 { params: Argon2Parameters::default(), }) diff --git a/src/online_ciphertext/online_ciphertext_v1.rs b/src/online_ciphertext/online_ciphertext_v1.rs index 30c2ba9f3..a54f4d7e5 100644 --- a/src/online_ciphertext/online_ciphertext_v1.rs +++ b/src/online_ciphertext/online_ciphertext_v1.rs @@ -16,7 +16,7 @@ use chacha20poly1305::{KeyInit, XChaCha20Poly1305}; use x25519_dalek::StaticSecret; use zeroize::Zeroizing; -use rand::TryRngCore; +use rand::TryRng; use paste::paste; @@ -298,7 +298,7 @@ impl OnlineCiphertextV1Encryptor { pub fn new(key: &[u8], mut aad: Vec, chunk_size: u32) -> Result { // Generate a new nonce let mut nonce = [0u8; 20]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(&mut nonce) .map_err(|_| Error::RandomError)?; @@ -337,7 +337,7 @@ impl OnlineCiphertextV1Encryptor { // Generate a new nonce let mut nonce = [0u8; 20]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(&mut nonce) .map_err(|_| Error::RandomError)?; diff --git a/src/password_hash/password_hash_v1.rs b/src/password_hash/password_hash_v1.rs index b57347bf5..bf9c98303 100644 --- a/src/password_hash/password_hash_v1.rs +++ b/src/password_hash/password_hash_v1.rs @@ -12,7 +12,7 @@ use sha2::Sha256; use subtle::ConstantTimeEq as _; use zeroize::{Zeroize, Zeroizing}; -use rand::TryRngCore; +use rand::TryRng; #[cfg(feature = "fuzz")] use arbitrary::Arbitrary; @@ -26,8 +26,8 @@ pub struct PasswordHashV1 { } #[cfg(feature = "fuzz")] -impl Arbitrary for PasswordHashV1 { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for PasswordHashV1 { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { let salt: [u8; 32] = Arbitrary::arbitrary(u)?; let hash: [u8; 32] = Arbitrary::arbitrary(u)?; Ok(Self { @@ -79,7 +79,7 @@ impl PasswordHashV1 { pub fn hash_password(pass: &[u8], iterations: u32) -> Result { // Generate salt let mut salt = [0u8; 32]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(&mut salt) .map_err(|_| Error::RandomError)?; diff --git a/src/password_hash/password_hash_v2.rs b/src/password_hash/password_hash_v2.rs index 4cc2650cc..7800896c9 100644 --- a/src/password_hash/password_hash_v2.rs +++ b/src/password_hash/password_hash_v2.rs @@ -36,8 +36,8 @@ pub struct PasswordHashV2 { } #[cfg(feature = "fuzz")] -impl Arbitrary for PasswordHashV2 { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for PasswordHashV2 { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { Ok(Self { params: DerivationParameters::arbitrary(u)?, hash: Zeroizing::new(Vec::::arbitrary(u)?), diff --git a/src/secret_sharing/secret_sharing_v1.rs b/src/secret_sharing/secret_sharing_v1.rs index 0092b335e..e3f48938c 100644 --- a/src/secret_sharing/secret_sharing_v1.rs +++ b/src/secret_sharing/secret_sharing_v1.rs @@ -13,13 +13,26 @@ use arbitrary::Arbitrary; // This will need some work in the Sharks crate to get the zeroize working. //#[derive(Zeroize)] //#[zeroize(drop)] -#[cfg_attr(feature = "fuzz", derive(Arbitrary))] #[derive(Clone)] pub struct ShareV1 { threshold: u8, share: Share, } +// `blahaj::Share` only implements `arbitrary` 0.4's `Arbitrary`, so it can't be +// derived under `arbitrary` 1.x. Build the share from raw bytes instead, the same +// way `TryFrom<&[u8]>` does, to avoid depending on `blahaj::Share: Arbitrary`. +#[cfg(feature = "fuzz")] +impl<'a> Arbitrary<'a> for ShareV1 { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { + let threshold = u8::arbitrary(u)?; + let bytes = >::arbitrary(u)?; + let share = Share::try_from(bytes.as_slice()).map_err(|_| arbitrary::Error::IncorrectFormat)?; + + Ok(ShareV1 { threshold, share }) + } +} + impl core::fmt::Debug for ShareV1 { fn fmt(&self, f: &mut core::fmt::Formatter) -> std::result::Result<(), core::fmt::Error> { write!(f, "Share with threshold {}", self.threshold) diff --git a/src/signature/signature_v1.rs b/src/signature/signature_v1.rs index 79e063765..592ed19ad 100644 --- a/src/signature/signature_v1.rs +++ b/src/signature/signature_v1.rs @@ -17,8 +17,8 @@ pub struct SignatureV1 { } #[cfg(feature = "fuzz")] -impl Arbitrary for SignatureV1 { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for SignatureV1 { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { let mut signature = [0u8; 64]; u.fill_buffer(&mut signature)?; diff --git a/src/signing_key/signing_key_v1.rs b/src/signing_key/signing_key_v1.rs index 21fdec7dc..7e85b12a1 100644 --- a/src/signing_key/signing_key_v1.rs +++ b/src/signing_key/signing_key_v1.rs @@ -28,8 +28,8 @@ impl core::fmt::Debug for SigningKeyV1Pair { } #[cfg(feature = "fuzz")] -impl Arbitrary for SigningKeyV1Pair { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for SigningKeyV1Pair { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { let mut keypair = [0u8; 64]; u.fill_buffer(&mut keypair)?; @@ -46,8 +46,8 @@ pub struct SigningKeyV1Public { } #[cfg(feature = "fuzz")] -impl Arbitrary for SigningKeyV1Public { - fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result { +impl<'a> Arbitrary<'a> for SigningKeyV1Public { + fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { let public_key: [u8; 32] = Arbitrary::arbitrary(u)?; match VerifyingKey::from_bytes(&public_key) { Ok(key) => Ok(Self { key }), diff --git a/src/utils.rs b/src/utils.rs index 2a7e7322b..010b59b4e 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -7,7 +7,7 @@ use base64::{ }; use hmac::Hmac; use pbkdf2::pbkdf2; -use rand::TryRngCore; +use rand::TryRng; use sha2::Sha256; use subtle::ConstantTimeEq as _; @@ -32,7 +32,7 @@ use super::Result; /// ``` pub fn generate_key(length: usize) -> Result> { let mut key = vec![0u8; length]; - rand::rngs::OsRng + rand::rngs::SysRng .try_fill_bytes(&mut key) .map_err(|_| Error::RandomError)?; Ok(key) @@ -143,7 +143,7 @@ pub fn validate_header(data: &[u8], data_type: DataType) -> bool { pub fn scrypt_simple(password: &[u8], salt: &[u8], log_n: u8, r: u32, p: u32) -> String { use byteorder::{ByteOrder, LittleEndian}; - let params = scrypt::Params::new(log_n, r, p, 32).expect("params should be valid"); + let params = scrypt::Params::new(log_n, r, p).expect("params should be valid"); // 256-bit derived key let mut dk = [0u8; 32]; From 0f18840cd57cf08328cab513defbcf3c1ccdb8a7 Mon Sep 17 00:00:00 2001 From: mmorrissette-devolutions Date: Mon, 1 Jun 2026 14:27:03 -0400 Subject: [PATCH 2/4] style: rustfmt --- src/secret_sharing/secret_sharing_v1.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/secret_sharing/secret_sharing_v1.rs b/src/secret_sharing/secret_sharing_v1.rs index e3f48938c..389a04f12 100644 --- a/src/secret_sharing/secret_sharing_v1.rs +++ b/src/secret_sharing/secret_sharing_v1.rs @@ -27,7 +27,8 @@ impl<'a> Arbitrary<'a> for ShareV1 { fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result { let threshold = u8::arbitrary(u)?; let bytes = >::arbitrary(u)?; - let share = Share::try_from(bytes.as_slice()).map_err(|_| arbitrary::Error::IncorrectFormat)?; + let share = + Share::try_from(bytes.as_slice()).map_err(|_| arbitrary::Error::IncorrectFormat)?; Ok(ShareV1 { threshold, share }) } From c46ee04598e18e823c536469b975794d607cb11e Mon Sep 17 00:00:00 2001 From: mmorrissette-devolutions Date: Mon, 1 Jun 2026 14:38:49 -0400 Subject: [PATCH 3/4] test: add scrypt_simple regression tests Lock the scrypt_simple output and $rscrypt$ format with a golden vector, plus determinism and distinct-input checks. The golden value was verified byte-identical against scrypt 0.11 (the pre-bump version), confirming the 0.11 -> 0.12 update does not change derived output. --- src/utils.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/utils.rs b/src/utils.rs index 010b59b4e..dca4b3748 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -292,3 +292,37 @@ fn test_validate_header() { assert!(!validate_header(¬_long_enough, DataType::Key)); } + +#[test] +fn test_scrypt_simple() { + // Regression vector: locks the scrypt output and the `$rscrypt$` format so any + // future scrypt crate bump that changes the derived bytes is caught. + let hash = scrypt_simple(b"password", b"devolutions-salt", 8, 8, 1); + + assert_eq!( + hash, + "$rscrypt$0$CAgB$ZGV2b2x1dGlvbnMtc2FsdA==$hIK4WZ1ct+CgcxYxMoi+lkk5RztS/EJBxxm0zmsNVY0=$" + ); +} + +#[test] +fn test_scrypt_simple_is_deterministic() { + let a = scrypt_simple(b"password", b"devolutions-salt", 8, 8, 1); + let b = scrypt_simple(b"password", b"devolutions-salt", 8, 8, 1); + + assert_eq!(a, b); +} + +#[test] +fn test_scrypt_simple_different_input_differs() { + let base = scrypt_simple(b"password", b"devolutions-salt", 8, 8, 1); + + assert_ne!( + base, + scrypt_simple(b"password2", b"devolutions-salt", 8, 8, 1) + ); + assert_ne!( + base, + scrypt_simple(b"password", b"devolutions-salt2", 8, 8, 1) + ); +} From 24260e6a997e5df66cfbffe97f42abb2436275cf Mon Sep 17 00:00:00 2001 From: mmorrissette-devolutions Date: Mon, 1 Jun 2026 14:54:31 -0400 Subject: [PATCH 4/4] test: trim scrypt tests to the golden vector Drop the determinism and distinct-input tests: scrypt is a pure function and the golden vector already pins a concrete deterministic value and exercises the full password/salt pipeline, so they added no real coverage. --- src/utils.rs | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/src/utils.rs b/src/utils.rs index dca4b3748..54ffd380c 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -296,7 +296,8 @@ fn test_validate_header() { #[test] fn test_scrypt_simple() { // Regression vector: locks the scrypt output and the `$rscrypt$` format so any - // future scrypt crate bump that changes the derived bytes is caught. + // future scrypt crate bump that changes the derived bytes is caught. This value + // was verified byte-identical against scrypt 0.11 (the pre-bump version). let hash = scrypt_simple(b"password", b"devolutions-salt", 8, 8, 1); assert_eq!( @@ -304,25 +305,3 @@ fn test_scrypt_simple() { "$rscrypt$0$CAgB$ZGV2b2x1dGlvbnMtc2FsdA==$hIK4WZ1ct+CgcxYxMoi+lkk5RztS/EJBxxm0zmsNVY0=$" ); } - -#[test] -fn test_scrypt_simple_is_deterministic() { - let a = scrypt_simple(b"password", b"devolutions-salt", 8, 8, 1); - let b = scrypt_simple(b"password", b"devolutions-salt", 8, 8, 1); - - assert_eq!(a, b); -} - -#[test] -fn test_scrypt_simple_different_input_differs() { - let base = scrypt_simple(b"password", b"devolutions-salt", 8, 8, 1); - - assert_ne!( - base, - scrypt_simple(b"password2", b"devolutions-salt", 8, 8, 1) - ); - assert_ne!( - base, - scrypt_simple(b"password", b"devolutions-salt2", 8, 8, 1) - ); -}