From 3b491908186545bc0fd9b0532c4065109cba0a70 Mon Sep 17 00:00:00 2001 From: Linwei Shang Date: Mon, 26 Oct 2026 06:18:44 +0000 Subject: [PATCH 1/5] chore(deps): bump ctutils to 0.4.6 for RUSTSEC-2026-0385 Co-Authored-By: Claude Opus 5.5 (1M context) --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8d04b35a7..85cae74de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1640,9 +1640,9 @@ dependencies = [ [[package]] name = "ctutils" -version = "0.4.2" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +checksum = "fe3e9d21d39e6f39ff46e03d5b621424f88ee23d8a1672c6bfc9ccc7f2da4f6a" dependencies = [ "cmov", ] From 30d7242ea3d97e35c339a0c09e331deebabd198c Mon Sep 17 00:00:00 2001 From: Linwei Shang Date: Mon, 26 Oct 2026 06:23:54 +0000 Subject: [PATCH 2/5] chore(deps): bump tokio to 1.54.1 for RUSTSEC-2026-0386 Co-Authored-By: Claude Opus 5.5 (1M context) --- Cargo.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 85cae74de..b702fd2e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -103,7 +103,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -114,7 +114,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -1014,7 +1014,7 @@ dependencies = [ "maybe-owned", "rustix", "rustix-linux-procfs", - "windows-sys 0.61.2", + "windows-sys 0.60.2", "winx", ] @@ -1967,7 +1967,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.3", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2223,7 +2223,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4096,7 +4096,7 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82cb6a9f675da968c63b6208c641b9dca58fc0133ae53375736b1767b0cab8bd" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4899,7 +4899,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5744,7 +5744,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6159,7 +6159,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6226,7 +6226,7 @@ dependencies = [ "security-framework 3.7.0", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6868,7 +6868,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -6897,7 +6897,7 @@ dependencies = [ "cfg-if", "libc", "psm", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -7085,7 +7085,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -7125,7 +7125,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874" dependencies = [ "rustix", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -7274,9 +7274,9 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.53.1" +version = "1.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3" dependencies = [ "bytes", "libc", @@ -7570,7 +7570,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -8330,7 +8330,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -8728,7 +8728,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d6f32a0ff4a9f6f01231eb2059cc85479330739333e0e58cadf03b6af2cca10" dependencies = [ "cfg-if", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] From a364562bc8784333959bf16f0bc6374d5c599c23 Mon Sep 17 00:00:00 2001 From: Linwei Shang Date: Mon, 26 Oct 2026 06:52:13 +0000 Subject: [PATCH 3/5] chore(deps): move to the RustCrypto 0.14 stack for RUSTSEC-2026-0387 crypto-bigint 0.5 has no fix for the non-constant-time arithmetic in RUSTSEC-2026-0387; it is pinned by the elliptic-curve 0.13 stack and by our own SLIP-0010 code. Move k256/p256/elliptic-curve to 0.14, pkcs8 to 0.11, sec1 to 0.8, crypto-bigint to 0.7, scrypt to 0.12 and bip32 to 0.6. ic-agent and friends come from the matching agent-rs branch via [patch.crates-io] until it is released; deny.toml allows that git source for now. Co-Authored-By: Claude Opus 5.5 (1M context) --- Cargo.lock | 523 +++++++++++++----- Cargo.toml | 23 +- crates/icp-app/src/identity/key.rs | 44 +- crates/icp-app/src/identity/seed/slip10.rs | 26 +- .../icp-cli/src/commands/identity/import.rs | 51 +- deny.toml | 3 + 6 files changed, 460 insertions(+), 210 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b702fd2e3..d1fa29d22 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,16 @@ dependencies = [ "gimli", ] +[[package]] +name = "aead" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" +dependencies = [ + "crypto-common 0.2.2", + "inout 0.2.5", +] + [[package]] name = "aes" version = "0.8.4" @@ -18,10 +28,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", - "cipher", + "cipher 0.4.4", "cpufeatures 0.2.17", ] +[[package]] +name = "aes" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35f0f96ce78e38c3dc6d8948aa8163d06385be74000f3c7a95bf1eef35d3ea32" +dependencies = [ + "cipher 0.5.2", + "cpubits", + "cpufeatures 0.3.1", +] + +[[package]] +name = "aes-gcm" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2b8006a0c83f52b62ba44a97b58bf76fe2f70a329e588f67f89691d93d498f" +dependencies = [ + "aead", + "aes 0.9.3", + "cipher 0.5.2", + "ctr", + "ctutils", + "ghash", +] + [[package]] name = "ahash" version = "0.8.12" @@ -103,7 +138,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -114,7 +149,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -574,9 +609,9 @@ dependencies = [ [[package]] name = "base16ct" -version = "0.2.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" [[package]] name = "base32" @@ -646,19 +681,16 @@ dependencies = [ [[package]] name = "bip32" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" +checksum = "0271a2fe2a6f05231419e878b5f50152a5a6dbcc60c18855d924892ecc85a33a" dependencies = [ "bs58", - "hmac 0.12.1", + "hmac 0.13.0", "k256", - "once_cell", - "pbkdf2", - "rand_core 0.6.4", "ripemd", "secp256k1", - "sha2 0.10.9", + "sha2 0.11.0", "subtle", "zeroize", ] @@ -742,6 +774,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block2" version = "0.6.2" @@ -1014,7 +1055,7 @@ dependencies = [ "maybe-owned", "rustix", "rustix-linux-procfs", - "windows-sys 0.60.2", + "windows-sys 0.61.2", "winx", ] @@ -1085,7 +1126,16 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ - "cipher", + "cipher 0.4.4", +] + +[[package]] +name = "cbc" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896" +dependencies = [ + "cipher 0.5.2", ] [[package]] @@ -1130,7 +1180,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common 0.1.7", - "inout", + "inout 0.1.4", +] + +[[package]] +name = "cipher" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" +dependencies = [ + "block-buffer 0.12.1", + "crypto-common 0.2.2", + "inout 0.2.5", ] [[package]] @@ -1361,6 +1422,12 @@ dependencies = [ "cfg-if", ] +[[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" @@ -1576,12 +1643,16 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" -version = "0.5.5" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "9c035cb64cba03dad2fb921f3e218785e8cf9a41790da5eb3a1400f62fa2be11" dependencies = [ - "generic-array", - "rand_core 0.6.4", + "cpubits", + "ctutils", + "getrandom 0.4.3", + "hybrid-array", + "num-traits", + "rand_core 0.10.1", "subtle", "zeroize", ] @@ -1602,7 +1673,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ + "getrandom 0.4.3", "hybrid-array", + "rand_core 0.10.1", ] [[package]] @@ -1627,6 +1700,15 @@ dependencies = [ "libloading 0.8.9", ] +[[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 = "ctrlc" version = "3.5.2" @@ -1645,6 +1727,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe3e9d21d39e6f39ff46e03d5b621424f88ee23d8a1672c6bfc9ccc7f2da4f6a" dependencies = [ "cmov", + "subtle", ] [[package]] @@ -1658,7 +1741,7 @@ dependencies = [ "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "group", + "group 0.13.0", "rand_core 0.6.4", "rustc_version", "subtle", @@ -1756,9 +1839,9 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "708b509edf7889e53d7efb0ffadd994cc6c2345ccb62f55cfd6b0682165e4fa6" dependencies = [ - "aes", - "block-padding", - "cbc", + "aes 0.8.4", + "block-padding 0.3.3", + "cbc 0.1.2", "dbus", "fastrand", "hkdf", @@ -1815,7 +1898,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid 0.9.6", - "pem-rfc7468", + "pem-rfc7468 0.7.0", + "zeroize", +] + +[[package]] +name = "der" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a996a108feb8b427a6e12fcf6af4aa83409b79d72c15337d7741368131ee004" +dependencies = [ + "const-oid 0.10.2", + "pem-rfc7468 1.0.0", "zeroize", ] @@ -1902,7 +1996,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", - "const-oid 0.9.6", "crypto-common 0.1.7", "subtle", ] @@ -1967,7 +2060,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.3", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2018,16 +2111,17 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" -version = "0.16.9" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" dependencies = [ - "der", - "digest 0.10.7", + "der 0.8.3", + "digest 0.11.3", "elliptic-curve", "rfc6979", - "signature", - "spki", + "signature 3.0.0", + "spki 0.8.1", + "zeroize", ] [[package]] @@ -2036,8 +2130,8 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "pkcs8", - "signature", + "pkcs8 0.10.2", + "signature 2.2.0", ] [[package]] @@ -2067,7 +2161,7 @@ dependencies = [ "rand_core 0.6.4", "serde", "sha2 0.10.9", - "signature", + "signature 2.2.0", "subtle", "zeroize", ] @@ -2080,19 +2174,20 @@ checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "900f37e7e18d74a2347389af6cd69e3a30d5cc9e697f40004865679aa75e9c7c" dependencies = [ "base16ct", "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array", - "group", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", + "crypto-common 0.2.2", + "digest 0.11.3", + "ff 0.14.0", + "group 0.14.0", + "hybrid-array", + "pem-rfc7468 1.0.0", + "pkcs8 0.11.0", + "rand_core 0.10.1", "sec1", "subtle", "zeroize", @@ -2223,7 +2318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2289,6 +2384,16 @@ 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" @@ -2580,7 +2685,6 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -2624,6 +2728,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "ghash" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5" +dependencies = [ + "polyval", +] + [[package]] name = "gimli" version = "0.33.0" @@ -2914,11 +3027,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.19" @@ -3162,6 +3286,7 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ + "subtle", "typenum", "zeroize", ] @@ -3257,9 +3382,8 @@ dependencies = [ [[package]] name = "ic-agent" -version = "0.49.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f9086b59107b6d6485a915762a2a3986ef208e80bb40eff22d099bbcd71deea" +version = "0.49.3" +source = "git+https://github.com/dfinity/agent-rs?branch=chore%2Frustcrypto-elliptic-curve-0.14#31cc277f2d40184824691ce375ffe7938127c0c4" dependencies = [ "arc-swap", "async-channel 2.5.0", @@ -3287,7 +3411,7 @@ dependencies = [ "leb128", "p256", "pem", - "pkcs8", + "pkcs8 0.11.0", "rand 0.10.3", "rangemap", "reqwest", @@ -3296,7 +3420,7 @@ dependencies = [ "serde_bytes", "serde_cbor", "serde_repr", - "sha2 0.10.9", + "sha2 0.11.0", "stop-token", "thiserror 2.0.20", "time", @@ -3390,14 +3514,13 @@ dependencies = [ [[package]] name = "ic-identity-hsm" -version = "0.49.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5eccaab3a11429af6ca9b8e803715769621f3f5afec604fcd3ba83e19ab6fa0" +version = "0.49.3" +source = "git+https://github.com/dfinity/agent-rs?branch=chore%2Frustcrypto-elliptic-curve-0.14#31cc277f2d40184824691ce375ffe7938127c0c4" dependencies = [ "hex", "ic-agent", "pkcs11", - "sha2 0.10.9", + "sha2 0.11.0", "simple_asn1", "thiserror 2.0.20", ] @@ -3461,9 +3584,8 @@ dependencies = [ [[package]] name = "ic-transport-types" -version = "0.49.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d13d859ea481e8d5766a54a3b4dfcf4c11ff6f21d5e2aeaf9a44dd710a76ff" +version = "0.49.3" +source = "git+https://github.com/dfinity/agent-rs?branch=chore%2Frustcrypto-elliptic-curve-0.14#31cc277f2d40184824691ce375ffe7938127c0c4" dependencies = [ "candid", "hex", @@ -3473,15 +3595,14 @@ dependencies = [ "serde_bytes", "serde_cbor", "serde_repr", - "sha2 0.10.9", + "sha2 0.11.0", "thiserror 2.0.20", ] [[package]] name = "ic-utils" -version = "0.49.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "750a78f121d81831af5cdf065cf1f89efd5b4fe7822130b4b32eb296ad515d67" +version = "0.49.3" +source = "git+https://github.com/dfinity/agent-rs?branch=chore%2Frustcrypto-elliptic-curve-0.14#31cc277f2d40184824691ce375ffe7938127c0c4" dependencies = [ "async-trait", "candid", @@ -3492,7 +3613,7 @@ dependencies = [ "semver", "serde", "serde_bytes", - "sha2 0.10.9", + "sha2 0.11.0", "strum 0.28.0", "strum_macros 0.28.0", "thiserror 2.0.20", @@ -3526,8 +3647,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1e828f9e804ccefe4b9b15b2195f474c60fd4f95ccd14fcb554eb6d7dfafde3" dependencies = [ "digest 0.10.7", - "ff", - "group", + "ff 0.13.1", + "group 0.13.0", "pairing", "rand_core 0.6.4", "subtle", @@ -3596,7 +3717,7 @@ dependencies = [ "p256", "pem", "phf", - "pkcs8", + "pkcs8 0.11.0", "rand 0.10.3", "reqwest", "scrypt", @@ -3682,7 +3803,7 @@ dependencies = [ "open", "p256", "pem", - "pkcs8", + "pkcs8 0.11.0", "predicates", "qrcode", "rand 0.10.3", @@ -4030,10 +4151,20 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "block-padding", + "block-padding 0.3.3", "generic-array", ] +[[package]] +name = "inout" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b5cf4372d022092674a83b8febf5865f7a573cc0c5baec5e49c879b6a20978f" +dependencies = [ + "block-padding 0.4.2", + "hybrid-array", +] + [[package]] name = "instant" version = "0.1.13" @@ -4096,7 +4227,7 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82cb6a9f675da968c63b6208c641b9dca58fc0133ae53375736b1767b0cab8bd" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4304,16 +4435,17 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.4" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +checksum = "93f50113171a713f4a4231ef82eb26703607139b35dcb56241f0ceab2ae1f7d8" dependencies = [ - "cfg-if", + "cpubits", "ecdsa", "elliptic-curve", - "once_cell", - "sha2 0.10.9", - "signature", + "primeorder", + "sha2 0.11.0", + "signature 3.0.0", + "wnaf", ] [[package]] @@ -4899,7 +5031,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5192,14 +5324,15 @@ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" [[package]] name = "p256" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +checksum = "d2c9239b2dbc807adbbe147e8cf72ea7450c3a0aabe62cb8e75ff4ec22e1f72a" dependencies = [ "ecdsa", "elliptic-curve", + "primefield", "primeorder", - "sha2 0.10.9", + "sha2 0.11.0", ] [[package]] @@ -5208,7 +5341,7 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" dependencies = [ - "group", + "group 0.13.0", ] [[package]] @@ -5240,17 +5373,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "password-hash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "paste" version = "1.0.15" @@ -5282,6 +5404,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 = "pem" version = "3.0.6" @@ -5301,6 +5433,15 @@ 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" @@ -5466,17 +5607,19 @@ dependencies = [ [[package]] name = "pkcs5" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" +checksum = "63d440a804ec8d6fafbb6b84471e013286658d373248927692ab3366686220ca" dependencies = [ - "aes", - "cbc", - "der", - "pbkdf2", + "aes 0.9.3", + "aes-gcm", + "cbc 0.2.1", + "der 0.8.3", + "pbkdf2 0.13.0", + "rand_core 0.10.1", "scrypt", - "sha2 0.10.9", - "spki", + "sha2 0.11.0", + "spki 0.8.1", ] [[package]] @@ -5485,10 +5628,20 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der", + "der 0.7.10", + "spki 0.7.3", +] + +[[package]] +name = "pkcs8" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" +dependencies = [ + "der 0.8.3", "pkcs5", - "rand_core 0.6.4", - "spki", + "rand_core 0.10.1", + "spki 0.8.1", ] [[package]] @@ -5511,6 +5664,17 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "polyval" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0fa31d631f2b2cb2a544d0aa321ce847a94764d701ca2becc411138b93d49cd" +dependencies = [ + "cpubits", + "cpufeatures 0.3.1", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.15.0" @@ -5609,13 +5773,31 @@ dependencies = [ "unicode-width 0.2.2", ] +[[package]] +name = "primefield" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" +dependencies = [ + "crypto-bigint", + "crypto-common 0.2.2", + "ff 0.14.0", + "rand_core 0.10.1", + "subtle", + "zeroize", +] + [[package]] name = "primeorder" -version = "0.13.6" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" dependencies = [ "elliptic-curve", + "once_cell", + "primefield", + "serdect", + "wnaf", ] [[package]] @@ -5744,7 +5926,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6046,12 +6228,12 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" dependencies = [ - "hmac 0.12.1", - "subtle", + "crypto-bigint", + "hmac 0.13.0", ] [[package]] @@ -6098,11 +6280,11 @@ dependencies = [ [[package]] name = "ripemd" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +checksum = "4dd4211456b4172d7e44261920c25acf07367c4f04bb5f5d54fc21b090d9b159" dependencies = [ - "digest 0.10.7", + "digest 0.11.3", ] [[package]] @@ -6159,7 +6341,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6226,7 +6408,7 @@ dependencies = [ "security-framework 3.7.0", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6261,11 +6443,12 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[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]] @@ -6340,44 +6523,44 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[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 = [ - "password-hash", - "pbkdf2", + "cfg-if", + "pbkdf2 0.13.0", "salsa20", - "sha2 0.10.9", + "sha2 0.11.0", ] [[package]] name = "sec1" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", - "der", - "generic-array", - "pkcs8", + "ctutils", + "der 0.8.3", + "hybrid-array", "subtle", "zeroize", ] [[package]] name = "secp256k1" -version = "0.27.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +checksum = "d7f404a8dab7a7a5a631e741d8699aa9c8e1d689fc26ccf897c7187565490b69" dependencies = [ "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.8.2" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" +checksum = "f6b2992d4a3cd244539a7d5d0966aadbe5ca7fb868a5d7e38c29499b9e709bbd" dependencies = [ "cc", ] @@ -6397,8 +6580,8 @@ version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4d35ad99a181be0a60ffcbe85d680d98f87bdc4d7644ade319b87076b9dbfd4" dependencies = [ - "aes", - "cbc", + "aes 0.8.4", + "cbc 0.1.2", "futures-util", "generic-array", "hkdf", @@ -6638,6 +6821,16 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "serdect" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +dependencies = [ + "base16ct", + "serde", +] + [[package]] name = "serial_test" version = "3.5.0" @@ -6771,6 +6964,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "signature" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" +dependencies = [ + "digest 0.11.3", + "rand_core 0.10.1", +] + [[package]] name = "simd_cesu8" version = "1.2.0" @@ -6868,7 +7071,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -6878,7 +7081,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der", + "der 0.7.10", +] + +[[package]] +name = "spki" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef958a98b9d5da290cfc78946e9f3e61e1e62a18db0d92cac0b83cc161491a9" +dependencies = [ + "base64ct", + "der 0.8.3", ] [[package]] @@ -6897,7 +7110,7 @@ dependencies = [ "cfg-if", "libc", "psm", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -7082,10 +7295,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -7125,7 +7338,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874" dependencies = [ "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -7237,7 +7450,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a30fd743a02bf35236f6faf99adb03089bb77e91c998dac2c2ad76bb424f668c" dependencies = [ "once_cell", - "pbkdf2", + "pbkdf2 0.12.2", "rand 0.8.8", "rustc-hash 1.1.0", "sha2 0.10.9", @@ -7570,7 +7783,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -7630,6 +7843,16 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" +[[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 = "unsafe-libyaml" version = "0.2.11" @@ -8330,7 +8553,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -8728,7 +8951,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d6f32a0ff4a9f6f01231eb2059cc85479330739333e0e58cadf03b6af2cca10" dependencies = [ "cfg-if", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -8797,6 +9020,18 @@ dependencies = [ "wast 35.0.2", ] +[[package]] +name = "wnaf" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "795ca18b3fdb5e62bf982199278341ddcf7ebf7d32e25e212ad05d496e95f6fa" +dependencies = [ + "ff 0.14.0", + "group 0.14.0", + "hybrid-array", + "primefield", +] + [[package]] name = "writeable" version = "0.6.4" diff --git a/Cargo.toml b/Cargo.toml index 6d5eea89c..f6058370f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ axum = "0.8" base64 = "0.22" backoff = { version = "0.4", features = ["tokio"] } bigdecimal = "0.4.10" -bip32 = "0.5.0" +bip32 = { version = "0.6.0", features = ["alloc"] } bollard = "0.20.2" byte-unit = "5.1.6" bytes = "1.11" @@ -43,8 +43,8 @@ dialoguer = "0.12.0" directories = "6.0.0" dunce = "1.0.5" ed25519-consensus = "2.1.0" -crypto-bigint = { version = "0.5.5", features = ["zeroize"] } -elliptic-curve = { version = "0.13.8", features = ["sec1", "std", "pkcs8"] } +crypto-bigint = { version = "0.7.10", features = ["zeroize"] } +elliptic-curve = { version = "0.14.3", features = ["std", "pkcs8"] } flate2 = { version = "1.1.8", default-features = false, features = ["zlib-rs"] } futures = "0.3.31" glob = "0.3.2" @@ -70,7 +70,7 @@ indicatif = "0.18.0" indoc = "2.0.6" itertools = "0.14.0" jsonschema = "0.45.0" -k256 = { version = "0.13.4", features = ["pem", "pkcs8", "std"] } +k256 = { version = "0.14.0", features = ["pem", "pkcs8", "std"] } keyring = { version = "3.6.3", features = ["apple-native", "windows-native", "sync-secret-service", "crypto-rust"] } lazy_static = "1.5.0" mockall = "0.14.0" @@ -81,18 +81,18 @@ open = "5" qrcode = { version = "0.14.1", default-features = false } num-integer = "0.1.46" num-traits = "0.2.19" -p256 = { version = "0.13.2", features = ["pem", "pkcs8", "std"] } +p256 = { version = "0.14.0", features = ["pem", "pkcs8", "std"] } pathdiff = { version = "0.2.3", features = ["camino"] } predicates = "3" pem = "3.0.5" phf = { version = "0.13.1", features = ["macros"] } -pkcs8 = { version = "0.10.2", features = ["encryption", "std"] } +pkcs8 = { version = "0.11.0", features = ["encryption", "std"] } rand = "0.10.1" regex = "1.12.2" reqwest = { version = "0.13.2", default-features = false, features = ["rustls", "json", "stream"] } schemars = { version = "1.0.4", features = ["derive", "indexmap2", "url2"] } -scrypt = "0.11.0" -sec1 = { version = "0.7.3", features = ["pkcs8"] } +scrypt = "0.12.0" +sec1 = { version = "0.8.1", features = ["der", "std"] } send_ctrlc = "0.6" semver = "1" serial_test = { version = "3.2.0", features = ["file_locks"] } @@ -146,3 +146,10 @@ wast = { opt-level = 1 } [profile.dist] inherits = "release" lto = "thin" + +# Temporary: the RustCrypto 0.14 stack (RUSTSEC-2026-0387) until an ic-agent release carries it. +[patch.crates-io] +ic-agent = { git = "https://github.com/dfinity/agent-rs", branch = "chore/rustcrypto-elliptic-curve-0.14" } +ic-identity-hsm = { git = "https://github.com/dfinity/agent-rs", branch = "chore/rustcrypto-elliptic-curve-0.14" } +ic-transport-types = { git = "https://github.com/dfinity/agent-rs", branch = "chore/rustcrypto-elliptic-curve-0.14" } +ic-utils = { git = "https://github.com/dfinity/agent-rs", branch = "chore/rustcrypto-elliptic-curve-0.14" } diff --git a/crates/icp-app/src/identity/key.rs b/crates/icp-app/src/identity/key.rs index 8dbf414a1..e79e71e94 100644 --- a/crates/icp-app/src/identity/key.rs +++ b/crates/icp-app/src/identity/key.rs @@ -16,8 +16,8 @@ use ic_identity_hsm::HardwareIdentity; use keyring::Entry; use pem::Pem; use pkcs8::{ - DecodePrivateKey, EncodePrivateKey, EncryptedPrivateKeyInfo, PrivateKeyInfo, SecretDocument, - pkcs5::pbes2::Parameters, + DecodePrivateKey, EncodePrivateKey, EncryptedPrivateKeyInfoRef, PrivateKeyInfoRef, + SecretDocument, pkcs5::pbes2::Parameters, }; use rand::Rng; use scrypt::Params; @@ -259,7 +259,7 @@ fn load_pbes2_identity( origin: &PemOrigin, ) -> Result, LoadIdentityError> { assert!( - doc.tag() == pkcs8::EncryptedPrivateKeyInfo::PEM_LABEL, + doc.tag() == pkcs8::EncryptedPrivateKeyInfoRef::PEM_LABEL, "internal error: wrong identity format found" ); @@ -279,7 +279,7 @@ fn load_pbes2_identity( Ok(Arc::new(Prime256v1Identity::from_private_key(key))) } IdentityKeyAlgorithm::Ed25519 => { - let encrypted = EncryptedPrivateKeyInfo::from_der(doc.contents()) + let encrypted = EncryptedPrivateKeyInfoRef::from_der(doc.contents()) .context(ParseDerSnafu { origin })?; let decrypted: SecretDocument = encrypted.decrypt(&pw).context(ParsePkcs8Snafu { origin })?; @@ -296,7 +296,7 @@ fn load_plaintext_identity( origin: &PemOrigin, ) -> Result, LoadIdentityError> { assert!( - doc.tag() == PrivateKeyInfo::PEM_LABEL, + doc.tag() == PrivateKeyInfoRef::PEM_LABEL, "internal error: wrong identity format found" ); @@ -528,7 +528,7 @@ fn create_pem_session_and_build_identity( // Store session key in keyring. let doc = session_key.to_pkcs8_der().expect("infallible PKI encoding"); let pem_str: Zeroizing = doc - .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let entry = Entry::new(SERVICE_NAME, &dlg_keyring_key(name)).context(CreateSessionKeyringEntrySnafu)?; @@ -816,7 +816,7 @@ fn load_webauth_public_key_pbes2( ) -> Result, LoadIdentityError> { match algorithm { IdentityKeyAlgorithm::Ed25519 => { - let encrypted = EncryptedPrivateKeyInfo::from_der(doc.contents()) + let encrypted = EncryptedPrivateKeyInfoRef::from_der(doc.contents()) .context(ParseDerSnafu { origin })?; let decrypted: SecretDocument = encrypted.decrypt(pw).context(ParsePkcs8Snafu { origin })?; @@ -1020,7 +1020,7 @@ pub fn create_identity( match &format { CreateFormat::Plaintext => { let pem = doc - .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); write_identity(dirs, name, &pem)?; } @@ -1030,7 +1030,7 @@ pub fn create_identity( } CreateFormat::Keyring => { let pem = doc - .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let username = if delegation.is_some() { dlg_keyring_key(name) @@ -1753,7 +1753,7 @@ pub fn link_webauth_identity( let webauth_storage = match &create_format { CreateFormat::Keyring => { let pem = doc - .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let entry = Entry::new(SERVICE_NAME, &dlg_keyring_key(name)) .context(DlgCreateKeyringEntrySnafu)?; @@ -1769,7 +1769,7 @@ pub fn link_webauth_identity( } CreateFormat::Plaintext => { let pem = doc - .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let pem_path = dirs .ensure_key_pem_path(name) @@ -1887,7 +1887,7 @@ pub fn create_pending_delegation( let storage = match &create_format { CreateFormat::Keyring => { let pem = doc - .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let entry = Entry::new(SERVICE_NAME, &dlg_keyring_key(name)) .context(DlgCreateKeyringEntrySnafu)?; @@ -1903,7 +1903,7 @@ pub fn create_pending_delegation( } CreateFormat::Plaintext => { let pem = doc - .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let pem_path = dirs .ensure_key_pem_path(name) @@ -2004,7 +2004,7 @@ pub fn complete_delegation( Ok(storage) } -fn encrypt_pki(pki: &PrivateKeyInfo<'_>, password: &str) -> Zeroizing { +fn encrypt_pki(pki: &PrivateKeyInfoRef<'_>, password: &str) -> Zeroizing { let mut salt = [0; 16]; let mut iv = [0; 16]; @@ -2014,10 +2014,10 @@ fn encrypt_pki(pki: &PrivateKeyInfo<'_>, password: &str) -> Zeroizing { let encrypted_doc = pki .encrypt_with_params( - Parameters::scrypt_aes256cbc( - Params::new(17, 8, 1, 32).expect("valid scrypt params"), + Parameters::generate_scrypt_aes256cbc( + Params::new(17, 8, 1).expect("valid scrypt params"), &salt, - &iv, + iv, ) .expect("valid pbes2 params"), password, @@ -2025,12 +2025,12 @@ fn encrypt_pki(pki: &PrivateKeyInfo<'_>, password: &str) -> Zeroizing { .expect("infallible PKI encryption"); encrypted_doc - .to_pem(EncryptedPrivateKeyInfo::PEM_LABEL, Default::default()) + .to_pem(EncryptedPrivateKeyInfoRef::PEM_LABEL, Default::default()) .expect("infallible EPKI encoding") } fn make_pkcs5_encrypted_pem(doc: &SecretDocument, password: &str) -> Zeroizing { - let pki = PrivateKeyInfo::from_der(doc.as_bytes()).expect("infallible PKI roundtrip"); + let pki = PrivateKeyInfoRef::from_der(doc.as_bytes()).expect("infallible PKI roundtrip"); encrypt_pki(&pki, password) } @@ -2137,7 +2137,7 @@ pub fn export_identity( .map_err(|message| ExportIdentityError::GetPasswordForExport { message })?; // Decrypt to get the plaintext private key info - let encrypted = EncryptedPrivateKeyInfo::from_der(pem.contents()) + let encrypted = EncryptedPrivateKeyInfoRef::from_der(pem.contents()) .context(ParseDecryptedForExportSnafu)?; let decrypted: SecretDocument = encrypted .decrypt(&password) @@ -2145,7 +2145,7 @@ pub fn export_identity( // Convert to plaintext PEM string decrypted - .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) .expect("infallible PEM encoding") .to_string() } @@ -2173,7 +2173,7 @@ pub fn export_identity( let pem: Pem = plaintext_pem .parse() .expect("internal error: exported PEM is invalid"); - let pki = PrivateKeyInfo::from_der(pem.contents()) + let pki = PrivateKeyInfoRef::from_der(pem.contents()) .expect("internal error: exported key is not valid PKCS#8"); // Encrypt the key with the provided password Ok(encrypt_pki(&pki, &password).to_string()) diff --git a/crates/icp-app/src/identity/seed/slip10.rs b/crates/icp-app/src/identity/seed/slip10.rs index a032b134e..e0cd98bcd 100644 --- a/crates/icp-app/src/identity/seed/slip10.rs +++ b/crates/icp-app/src/identity/seed/slip10.rs @@ -3,8 +3,8 @@ //! Implements use bip32::DerivationPath; -use crypto_bigint::{Encoding, U256, Zero}; -use elliptic_curve::{Curve, sec1::ToEncodedPoint}; +use crypto_bigint::{NonZero, U256}; +use elliptic_curve::{Curve, sec1::ToSec1Point}; use hmac::{Hmac, KeyInit, Mac}; use sha2::Sha512; use zeroize::{ZeroizeOnDrop, Zeroizing}; @@ -20,7 +20,7 @@ pub(super) fn derive_secp256k1(seed: &[u8], path: &DerivationPath) -> k256::Secr seed, path, SECP256K1_SEED_KEY, - Some(k256::Secp256k1::ORDER), + Some(k256::Secp256k1::ORDER.into_nz()), k256_compressed_public_key, ); k256::SecretKey::from_slice(&*key_bytes) @@ -32,7 +32,7 @@ pub(super) fn derive_p256(seed: &[u8], path: &DerivationPath) -> p256::SecretKey seed, path, P256_SEED_KEY, - Some(p256::NistP256::ORDER), + Some(p256::NistP256::ORDER.into_nz()), p256_compressed_public_key, ); p256::SecretKey::from_slice(&*key_bytes) @@ -69,16 +69,16 @@ fn slip10_derive( seed: &[u8], path: &DerivationPath, curve_key: &[u8], - order: Option, + order: Option>, pub_key: impl Fn(&[u8; 32]) -> [u8; 33], ) -> Zeroizing<[u8; 32]> { let (mut key, mut chain_code) = hmac_sha512_split(curve_key, seed); // For EC curves, the spec requires the master key to be a valid scalar. if let Some(order) = order { - let master = Zeroizing::new(U256::from_be_bytes(*key)); + let master = Zeroizing::new(U256::from_be_slice(&*key)); assert!( - !bool::from(master.is_zero()) && *master < order, + !bool::from(master.is_zero()) && *master < *order.as_ref(), "SLIP-0010: master key derived from seed is invalid; use a different seed", ); } @@ -107,12 +107,12 @@ fn slip10_derive( if let Some(order) = order { // EC: child key = (IL + parent_key) mod n - let il_scalar = Zeroizing::new(U256::from_be_bytes(*il)); - if *il_scalar >= order { + let il_scalar = Zeroizing::new(U256::from_be_slice(&*il)); + if *il_scalar >= *order.as_ref() { index += 1; continue; } - let key_scalar = Zeroizing::new(U256::from_be_bytes(*key)); + let key_scalar = Zeroizing::new(U256::from_be_slice(&*key)); // add_mod requires both operands < order; key_scalar is guaranteed < order // because it was validated on entry (master key check above) and every // subsequent value is the output of a prior add_mod call. @@ -121,7 +121,7 @@ fn slip10_derive( index += 1; continue; } - *key = child_scalar.to_be_bytes(); + *key = child_scalar.to_be_bytes().into(); chain_code = ir; } else { // Ed25519: child key is the left 32 bytes directly; no modular arithmetic. @@ -140,7 +140,7 @@ fn k256_compressed_public_key(key_bytes: &[u8; 32]) -> [u8; 33] { let secret = k256::SecretKey::from_slice(key_bytes).expect("valid k256 secret key"); secret .public_key() - .to_encoded_point(true) + .to_sec1_point(true) .as_bytes() .try_into() .expect("compressed k256 point is 33 bytes") @@ -152,7 +152,7 @@ fn p256_compressed_public_key(key_bytes: &[u8; 32]) -> [u8; 33] { let secret = p256::SecretKey::from_slice(key_bytes).expect("valid p256 secret key"); secret .public_key() - .to_encoded_point(true) + .to_sec1_point(true) .as_bytes() .try_into() .expect("compressed p256 point is 33 bytes") diff --git a/crates/icp-cli/src/commands/identity/import.rs b/crates/icp-cli/src/commands/identity/import.rs index 751952f3c..c16f327e7 100644 --- a/crates/icp-cli/src/commands/identity/import.rs +++ b/crates/icp-cli/src/commands/identity/import.rs @@ -17,7 +17,7 @@ use k256::Secp256k1; use p256::NistP256; use pem::Pem; use pkcs8::{ - AssociatedOid, EncryptedPrivateKeyInfo, ObjectIdentifier, PrivateKeyInfo, SecretDocument, + AssociatedOid, EncryptedPrivateKeyInfoRef, ObjectIdentifier, PrivateKeyInfoRef, SecretDocument, der::{Decode, pem::PemLabel}, }; use sec1::{EcParameters, EcPrivateKey}; @@ -175,11 +175,11 @@ async fn import_from_pem( .iter() .filter(|s| { // PKCS#8, unencrypted - s.tag() == PrivateKeyInfo::PEM_LABEL + s.tag() == PrivateKeyInfoRef::PEM_LABEL // SEC1, unencrypted || s.tag() == EcPrivateKey::PEM_LABEL // PKCS#8, encrypted - || s.tag() == EncryptedPrivateKeyInfo::PEM_LABEL + || s.tag() == EncryptedPrivateKeyInfoRef::PEM_LABEL }) .exactly_one() { @@ -190,9 +190,9 @@ async fn import_from_pem( UnknownPemFormatSnafu { path, expected: vec![ - PrivateKeyInfo::PEM_LABEL, + PrivateKeyInfoRef::PEM_LABEL, EcPrivateKey::PEM_LABEL, - EncryptedPrivateKeyInfo::PEM_LABEL, + EncryptedPrivateKeyInfoRef::PEM_LABEL, ], found: sections.iter().map(|s| s.tag().to_string()).collect_vec(), } @@ -203,7 +203,7 @@ async fn import_from_pem( } }; let key = match section.tag() { - PrivateKeyInfo::PEM_LABEL | EncryptedPrivateKeyInfo::PEM_LABEL => { + PrivateKeyInfoRef::PEM_LABEL | EncryptedPrivateKeyInfoRef::PEM_LABEL => { import_pkcs8(section, path, decryption_password_file, known_key_type)? } EcPrivateKey::PEM_LABEL => import_sec1( @@ -232,8 +232,8 @@ fn import_pkcs8( // first, grab the actual key structure from the doc, which entails decrypting it if it's encrypted let decrypted_doc: SecretDocument; let mut truncated: Vec; - let pki = if section.tag() == PrivateKeyInfo::PEM_LABEL { - match PrivateKeyInfo::from_der(section.contents()) { + let pki = if section.tag() == PrivateKeyInfoRef::PEM_LABEL { + match PrivateKeyInfoRef::from_der(section.contents()) { Ok(pki) => pki, Err(e) => { // Very old versions of dfx generated nonconforming PKCS#8 containers. @@ -245,7 +245,7 @@ fn import_pkcs8( truncated.truncate(48); truncated[1] = 46; truncated[4] = 0; - PrivateKeyInfo::from_der(&truncated) + PrivateKeyInfoRef::from_der(&truncated) .map_err(|_| e) .context(BadPemContentSnafu { path })? } else { @@ -254,7 +254,7 @@ fn import_pkcs8( } } } else { - let epki = EncryptedPrivateKeyInfo::from_der(section.contents()) + let epki = EncryptedPrivateKeyInfoRef::from_der(section.contents()) .context(BadPemContentSnafu { path })?; let password = if let Some(path) = decryption_password_file { read_to_string(path).context(ReadFileSnafu)? @@ -268,7 +268,7 @@ fn import_pkcs8( .decrypt(&password) .context(DecryptionFailedSnafu { path })?; decrypted_doc - .decode_msg::() + .decode_msg::() .context(BadPemContentSnafu { path })? }; // second, figure out what algorithm the key is for @@ -276,20 +276,20 @@ fn import_pkcs8( // if the user knows what it is, we do not have to check match known_key_type { IdentityKeyAlgorithm::Secp256k1 => Ok(IdentityKey::Secp256k1( - k256::SecretKey::from_sec1_der(pki.private_key) - .context(BadEcPemKeySnafu { path })?, + k256::SecretKey::from_sec1_der(pki.private_key.as_bytes()) + .context(BadEcDerKeySnafu { path })?, )), IdentityKeyAlgorithm::Prime256v1 => Ok(IdentityKey::Prime256v1( - p256::SecretKey::from_sec1_der(pki.private_key) - .context(BadEcPemKeySnafu { path })?, + p256::SecretKey::from_sec1_der(pki.private_key.as_bytes()) + .context(BadEcDerKeySnafu { path })?, )), IdentityKeyAlgorithm::Ed25519 => { ensure!( - pki.private_key[0..2] == [0x04, 0x20], + pki.private_key.as_bytes()[0..2] == [0x04, 0x20], BadP8PemKeySnafu { path }, ); Ok(IdentityKey::Ed25519( - ic_ed25519::PrivateKey::deserialize_raw(&pki.private_key[2..]) + ic_ed25519::PrivateKey::deserialize_raw(&pki.private_key.as_bytes()[2..]) .context(BadEdPemKeySnafu { path })?, )) } @@ -309,12 +309,12 @@ fn import_pkcs8( })?; match curve { Secp256k1::OID => Ok(IdentityKey::Secp256k1( - k256::SecretKey::from_sec1_der(pki.private_key) - .context(BadEcPemKeySnafu { path })?, + k256::SecretKey::from_sec1_der(pki.private_key.as_bytes()) + .context(BadEcDerKeySnafu { path })?, )), NistP256::OID => Ok(IdentityKey::Prime256v1( - p256::SecretKey::from_sec1_der(pki.private_key) - .context(BadEcPemKeySnafu { path })?, + p256::SecretKey::from_sec1_der(pki.private_key.as_bytes()) + .context(BadEcDerKeySnafu { path })?, )), _ => UnsupportedAlgorithmSnafu { found: curve, @@ -326,11 +326,11 @@ fn import_pkcs8( } ED25519_OID => { ensure!( - pki.private_key[0..2] == [0x04, 0x20], + pki.private_key.as_bytes()[0..2] == [0x04, 0x20], BadP8PemKeySnafu { path }, ); Ok(IdentityKey::Ed25519( - ic_ed25519::PrivateKey::deserialize_raw(&pki.private_key[2..]) + ic_ed25519::PrivateKey::deserialize_raw(&pki.private_key.as_bytes()[2..]) .context(BadEdPemKeySnafu { path })?, )) } @@ -468,6 +468,11 @@ pub(crate) enum LoadKeyError { source: elliptic_curve::Error, }, #[snafu(display("malformed key material in PEM file `{path}`"))] + BadEcDerKey { + path: PathBuf, + source: elliptic_curve::DecodeError, + }, + #[snafu(display("malformed key material in PEM file `{path}`"))] BadEdPemKey { path: PathBuf, source: ic_ed25519::PrivateKeyDecodingError, diff --git a/deny.toml b/deny.toml index cd90712d0..70e3d21f3 100644 --- a/deny.toml +++ b/deny.toml @@ -51,3 +51,6 @@ multiple-versions = "allow" # make a tagged release non-reproducible. cargo-deny only warns by default. unknown-registry = "deny" unknown-git = "deny" +# Temporary, with the `[patch.crates-io]` in Cargo.toml: remove both once an +# ic-agent release carries the RustCrypto 0.14 stack (RUSTSEC-2026-0387). +allow-git = ["https://github.com/dfinity/agent-rs"] From 19edb9cdc2afe982bc953cef2fe1837e375b3173 Mon Sep 17 00:00:00 2001 From: Linwei Shang Date: Mon, 26 Oct 2026 07:10:00 +0000 Subject: [PATCH 4/5] Revert "chore(deps): move to the RustCrypto 0.14 stack for RUSTSEC-2026-0387" This reverts commit a364562bc8784333959bf16f0bc6374d5c599c23. --- Cargo.lock | 523 +++++------------- Cargo.toml | 23 +- crates/icp-app/src/identity/key.rs | 44 +- crates/icp-app/src/identity/seed/slip10.rs | 26 +- .../icp-cli/src/commands/identity/import.rs | 51 +- deny.toml | 3 - 6 files changed, 210 insertions(+), 460 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d1fa29d22..b702fd2e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,16 +11,6 @@ dependencies = [ "gimli", ] -[[package]] -name = "aead" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" -dependencies = [ - "crypto-common 0.2.2", - "inout 0.2.5", -] - [[package]] name = "aes" version = "0.8.4" @@ -28,35 +18,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", - "cipher 0.4.4", + "cipher", "cpufeatures 0.2.17", ] -[[package]] -name = "aes" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35f0f96ce78e38c3dc6d8948aa8163d06385be74000f3c7a95bf1eef35d3ea32" -dependencies = [ - "cipher 0.5.2", - "cpubits", - "cpufeatures 0.3.1", -] - -[[package]] -name = "aes-gcm" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2b8006a0c83f52b62ba44a97b58bf76fe2f70a329e588f67f89691d93d498f" -dependencies = [ - "aead", - "aes 0.9.3", - "cipher 0.5.2", - "ctr", - "ctutils", - "ghash", -] - [[package]] name = "ahash" version = "0.8.12" @@ -138,7 +103,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -149,7 +114,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -609,9 +574,9 @@ dependencies = [ [[package]] name = "base16ct" -version = "1.0.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base32" @@ -681,16 +646,19 @@ dependencies = [ [[package]] name = "bip32" -version = "0.6.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0271a2fe2a6f05231419e878b5f50152a5a6dbcc60c18855d924892ecc85a33a" +checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" dependencies = [ "bs58", - "hmac 0.13.0", + "hmac 0.12.1", "k256", + "once_cell", + "pbkdf2", + "rand_core 0.6.4", "ripemd", "secp256k1", - "sha2 0.11.0", + "sha2 0.10.9", "subtle", "zeroize", ] @@ -774,15 +742,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block-padding" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" -dependencies = [ - "hybrid-array", -] - [[package]] name = "block2" version = "0.6.2" @@ -1055,7 +1014,7 @@ dependencies = [ "maybe-owned", "rustix", "rustix-linux-procfs", - "windows-sys 0.61.2", + "windows-sys 0.60.2", "winx", ] @@ -1126,16 +1085,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" 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", + "cipher", ] [[package]] @@ -1180,18 +1130,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common 0.1.7", - "inout 0.1.4", -] - -[[package]] -name = "cipher" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" -dependencies = [ - "block-buffer 0.12.1", - "crypto-common 0.2.2", - "inout 0.2.5", + "inout", ] [[package]] @@ -1422,12 +1361,6 @@ dependencies = [ "cfg-if", ] -[[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" @@ -1643,16 +1576,12 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" -version = "0.7.10" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c035cb64cba03dad2fb921f3e218785e8cf9a41790da5eb3a1400f62fa2be11" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "cpubits", - "ctutils", - "getrandom 0.4.3", - "hybrid-array", - "num-traits", - "rand_core 0.10.1", + "generic-array", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -1673,9 +1602,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "getrandom 0.4.3", "hybrid-array", - "rand_core 0.10.1", ] [[package]] @@ -1700,15 +1627,6 @@ dependencies = [ "libloading 0.8.9", ] -[[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 = "ctrlc" version = "3.5.2" @@ -1727,7 +1645,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe3e9d21d39e6f39ff46e03d5b621424f88ee23d8a1672c6bfc9ccc7f2da4f6a" dependencies = [ "cmov", - "subtle", ] [[package]] @@ -1741,7 +1658,7 @@ dependencies = [ "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "group 0.13.0", + "group", "rand_core 0.6.4", "rustc_version", "subtle", @@ -1839,9 +1756,9 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "708b509edf7889e53d7efb0ffadd994cc6c2345ccb62f55cfd6b0682165e4fa6" dependencies = [ - "aes 0.8.4", - "block-padding 0.3.3", - "cbc 0.1.2", + "aes", + "block-padding", + "cbc", "dbus", "fastrand", "hkdf", @@ -1898,18 +1815,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid 0.9.6", - "pem-rfc7468 0.7.0", - "zeroize", -] - -[[package]] -name = "der" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a996a108feb8b427a6e12fcf6af4aa83409b79d72c15337d7741368131ee004" -dependencies = [ - "const-oid 0.10.2", - "pem-rfc7468 1.0.0", + "pem-rfc7468", "zeroize", ] @@ -1996,6 +1902,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", + "const-oid 0.9.6", "crypto-common 0.1.7", "subtle", ] @@ -2060,7 +1967,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.3", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2111,17 +2018,16 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" -version = "0.17.0" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der 0.8.3", - "digest 0.11.3", + "der", + "digest 0.10.7", "elliptic-curve", "rfc6979", - "signature 3.0.0", - "spki 0.8.1", - "zeroize", + "signature", + "spki", ] [[package]] @@ -2130,8 +2036,8 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "pkcs8 0.10.2", - "signature 2.2.0", + "pkcs8", + "signature", ] [[package]] @@ -2161,7 +2067,7 @@ dependencies = [ "rand_core 0.6.4", "serde", "sha2 0.10.9", - "signature 2.2.0", + "signature", "subtle", "zeroize", ] @@ -2174,20 +2080,19 @@ checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" -version = "0.14.3" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900f37e7e18d74a2347389af6cd69e3a30d5cc9e697f40004865679aa75e9c7c" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "crypto-common 0.2.2", - "digest 0.11.3", - "ff 0.14.0", - "group 0.14.0", - "hybrid-array", - "pem-rfc7468 1.0.0", - "pkcs8 0.11.0", - "rand_core 0.10.1", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -2318,7 +2223,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2384,16 +2289,6 @@ 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" @@ -2685,6 +2580,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -2728,15 +2624,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "ghash" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5" -dependencies = [ - "polyval", -] - [[package]] name = "gimli" version = "0.33.0" @@ -3027,22 +2914,11 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "ff 0.13.1", + "ff", "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.19" @@ -3286,7 +3162,6 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ - "subtle", "typenum", "zeroize", ] @@ -3382,8 +3257,9 @@ dependencies = [ [[package]] name = "ic-agent" -version = "0.49.3" -source = "git+https://github.com/dfinity/agent-rs?branch=chore%2Frustcrypto-elliptic-curve-0.14#31cc277f2d40184824691ce375ffe7938127c0c4" +version = "0.49.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f9086b59107b6d6485a915762a2a3986ef208e80bb40eff22d099bbcd71deea" dependencies = [ "arc-swap", "async-channel 2.5.0", @@ -3411,7 +3287,7 @@ dependencies = [ "leb128", "p256", "pem", - "pkcs8 0.11.0", + "pkcs8", "rand 0.10.3", "rangemap", "reqwest", @@ -3420,7 +3296,7 @@ dependencies = [ "serde_bytes", "serde_cbor", "serde_repr", - "sha2 0.11.0", + "sha2 0.10.9", "stop-token", "thiserror 2.0.20", "time", @@ -3514,13 +3390,14 @@ dependencies = [ [[package]] name = "ic-identity-hsm" -version = "0.49.3" -source = "git+https://github.com/dfinity/agent-rs?branch=chore%2Frustcrypto-elliptic-curve-0.14#31cc277f2d40184824691ce375ffe7938127c0c4" +version = "0.49.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5eccaab3a11429af6ca9b8e803715769621f3f5afec604fcd3ba83e19ab6fa0" dependencies = [ "hex", "ic-agent", "pkcs11", - "sha2 0.11.0", + "sha2 0.10.9", "simple_asn1", "thiserror 2.0.20", ] @@ -3584,8 +3461,9 @@ dependencies = [ [[package]] name = "ic-transport-types" -version = "0.49.3" -source = "git+https://github.com/dfinity/agent-rs?branch=chore%2Frustcrypto-elliptic-curve-0.14#31cc277f2d40184824691ce375ffe7938127c0c4" +version = "0.49.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d13d859ea481e8d5766a54a3b4dfcf4c11ff6f21d5e2aeaf9a44dd710a76ff" dependencies = [ "candid", "hex", @@ -3595,14 +3473,15 @@ dependencies = [ "serde_bytes", "serde_cbor", "serde_repr", - "sha2 0.11.0", + "sha2 0.10.9", "thiserror 2.0.20", ] [[package]] name = "ic-utils" -version = "0.49.3" -source = "git+https://github.com/dfinity/agent-rs?branch=chore%2Frustcrypto-elliptic-curve-0.14#31cc277f2d40184824691ce375ffe7938127c0c4" +version = "0.49.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "750a78f121d81831af5cdf065cf1f89efd5b4fe7822130b4b32eb296ad515d67" dependencies = [ "async-trait", "candid", @@ -3613,7 +3492,7 @@ dependencies = [ "semver", "serde", "serde_bytes", - "sha2 0.11.0", + "sha2 0.10.9", "strum 0.28.0", "strum_macros 0.28.0", "thiserror 2.0.20", @@ -3647,8 +3526,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1e828f9e804ccefe4b9b15b2195f474c60fd4f95ccd14fcb554eb6d7dfafde3" dependencies = [ "digest 0.10.7", - "ff 0.13.1", - "group 0.13.0", + "ff", + "group", "pairing", "rand_core 0.6.4", "subtle", @@ -3717,7 +3596,7 @@ dependencies = [ "p256", "pem", "phf", - "pkcs8 0.11.0", + "pkcs8", "rand 0.10.3", "reqwest", "scrypt", @@ -3803,7 +3682,7 @@ dependencies = [ "open", "p256", "pem", - "pkcs8 0.11.0", + "pkcs8", "predicates", "qrcode", "rand 0.10.3", @@ -4151,20 +4030,10 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "block-padding 0.3.3", + "block-padding", "generic-array", ] -[[package]] -name = "inout" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b5cf4372d022092674a83b8febf5865f7a573cc0c5baec5e49c879b6a20978f" -dependencies = [ - "block-padding 0.4.2", - "hybrid-array", -] - [[package]] name = "instant" version = "0.1.13" @@ -4227,7 +4096,7 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82cb6a9f675da968c63b6208c641b9dca58fc0133ae53375736b1767b0cab8bd" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4435,17 +4304,16 @@ dependencies = [ [[package]] name = "k256" -version = "0.14.0" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f50113171a713f4a4231ef82eb26703607139b35dcb56241f0ceab2ae1f7d8" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ - "cpubits", + "cfg-if", "ecdsa", "elliptic-curve", - "primeorder", - "sha2 0.11.0", - "signature 3.0.0", - "wnaf", + "once_cell", + "sha2 0.10.9", + "signature", ] [[package]] @@ -5031,7 +4899,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5324,15 +5192,14 @@ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" [[package]] name = "p256" -version = "0.14.0" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c9239b2dbc807adbbe147e8cf72ea7450c3a0aabe62cb8e75ff4ec22e1f72a" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ "ecdsa", "elliptic-curve", - "primefield", "primeorder", - "sha2 0.11.0", + "sha2 0.10.9", ] [[package]] @@ -5341,7 +5208,7 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" dependencies = [ - "group 0.13.0", + "group", ] [[package]] @@ -5373,6 +5240,17 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "paste" version = "1.0.15" @@ -5404,16 +5282,6 @@ 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 = "pem" version = "3.0.6" @@ -5433,15 +5301,6 @@ 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" @@ -5607,19 +5466,17 @@ dependencies = [ [[package]] name = "pkcs5" -version = "0.8.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63d440a804ec8d6fafbb6b84471e013286658d373248927692ab3366686220ca" +checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" dependencies = [ - "aes 0.9.3", - "aes-gcm", - "cbc 0.2.1", - "der 0.8.3", - "pbkdf2 0.13.0", - "rand_core 0.10.1", + "aes", + "cbc", + "der", + "pbkdf2", "scrypt", - "sha2 0.11.0", - "spki 0.8.1", + "sha2 0.10.9", + "spki", ] [[package]] @@ -5628,20 +5485,10 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.10", - "spki 0.7.3", -] - -[[package]] -name = "pkcs8" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" -dependencies = [ - "der 0.8.3", + "der", "pkcs5", - "rand_core 0.10.1", - "spki 0.8.1", + "rand_core 0.6.4", + "spki", ] [[package]] @@ -5664,17 +5511,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "polyval" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0fa31d631f2b2cb2a544d0aa321ce847a94764d701ca2becc411138b93d49cd" -dependencies = [ - "cpubits", - "cpufeatures 0.3.1", - "universal-hash", -] - [[package]] name = "portable-atomic" version = "1.15.0" @@ -5773,31 +5609,13 @@ dependencies = [ "unicode-width 0.2.2", ] -[[package]] -name = "primefield" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" -dependencies = [ - "crypto-bigint", - "crypto-common 0.2.2", - "ff 0.14.0", - "rand_core 0.10.1", - "subtle", - "zeroize", -] - [[package]] name = "primeorder" -version = "0.14.0" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ "elliptic-curve", - "once_cell", - "primefield", - "serdect", - "wnaf", ] [[package]] @@ -5926,7 +5744,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6228,12 +6046,12 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.6.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "crypto-bigint", - "hmac 0.13.0", + "hmac 0.12.1", + "subtle", ] [[package]] @@ -6280,11 +6098,11 @@ dependencies = [ [[package]] name = "ripemd" -version = "0.2.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd4211456b4172d7e44261920c25acf07367c4f04bb5f5d54fc21b090d9b159" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" dependencies = [ - "digest 0.11.3", + "digest 0.10.7", ] [[package]] @@ -6341,7 +6159,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6408,7 +6226,7 @@ dependencies = [ "security-framework 3.7.0", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6443,12 +6261,11 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "salsa20" -version = "0.11.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cfg-if", - "cipher 0.5.2", + "cipher", ] [[package]] @@ -6523,44 +6340,44 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" -version = "0.12.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87af57419b594aa23fa95f09f0e06d80d84ba01c26148c43844cad6ff4485f0" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "cfg-if", - "pbkdf2 0.13.0", + "password-hash", + "pbkdf2", "salsa20", - "sha2 0.11.0", + "sha2 0.10.9", ] [[package]] name = "sec1" -version = "0.8.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", - "ctutils", - "der 0.8.3", - "hybrid-array", + "der", + "generic-array", + "pkcs8", "subtle", "zeroize", ] [[package]] name = "secp256k1" -version = "0.33.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f404a8dab7a7a5a631e741d8699aa9c8e1d689fc26ccf897c7187565490b69" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" dependencies = [ "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.14.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b2992d4a3cd244539a7d5d0966aadbe5ca7fb868a5d7e38c29499b9e709bbd" +checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" dependencies = [ "cc", ] @@ -6580,8 +6397,8 @@ version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4d35ad99a181be0a60ffcbe85d680d98f87bdc4d7644ade319b87076b9dbfd4" dependencies = [ - "aes 0.8.4", - "cbc 0.1.2", + "aes", + "cbc", "futures-util", "generic-array", "hkdf", @@ -6821,16 +6638,6 @@ dependencies = [ "unsafe-libyaml", ] -[[package]] -name = "serdect" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" -dependencies = [ - "base16ct", - "serde", -] - [[package]] name = "serial_test" version = "3.5.0" @@ -6964,16 +6771,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "signature" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" -dependencies = [ - "digest 0.11.3", - "rand_core 0.10.1", -] - [[package]] name = "simd_cesu8" version = "1.2.0" @@ -7071,7 +6868,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -7081,17 +6878,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.7.10", -] - -[[package]] -name = "spki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef958a98b9d5da290cfc78946e9f3e61e1e62a18db0d92cac0b83cc161491a9" -dependencies = [ - "base64ct", - "der 0.8.3", + "der", ] [[package]] @@ -7110,7 +6897,7 @@ dependencies = [ "cfg-if", "libc", "psm", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -7295,10 +7082,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -7338,7 +7125,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874" dependencies = [ "rustix", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -7450,7 +7237,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a30fd743a02bf35236f6faf99adb03089bb77e91c998dac2c2ad76bb424f668c" dependencies = [ "once_cell", - "pbkdf2 0.12.2", + "pbkdf2", "rand 0.8.8", "rustc-hash 1.1.0", "sha2 0.10.9", @@ -7783,7 +7570,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -7843,16 +7630,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" -[[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 = "unsafe-libyaml" version = "0.2.11" @@ -8553,7 +8330,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -8951,7 +8728,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d6f32a0ff4a9f6f01231eb2059cc85479330739333e0e58cadf03b6af2cca10" dependencies = [ "cfg-if", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -9020,18 +8797,6 @@ dependencies = [ "wast 35.0.2", ] -[[package]] -name = "wnaf" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "795ca18b3fdb5e62bf982199278341ddcf7ebf7d32e25e212ad05d496e95f6fa" -dependencies = [ - "ff 0.14.0", - "group 0.14.0", - "hybrid-array", - "primefield", -] - [[package]] name = "writeable" version = "0.6.4" diff --git a/Cargo.toml b/Cargo.toml index f6058370f..6d5eea89c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ axum = "0.8" base64 = "0.22" backoff = { version = "0.4", features = ["tokio"] } bigdecimal = "0.4.10" -bip32 = { version = "0.6.0", features = ["alloc"] } +bip32 = "0.5.0" bollard = "0.20.2" byte-unit = "5.1.6" bytes = "1.11" @@ -43,8 +43,8 @@ dialoguer = "0.12.0" directories = "6.0.0" dunce = "1.0.5" ed25519-consensus = "2.1.0" -crypto-bigint = { version = "0.7.10", features = ["zeroize"] } -elliptic-curve = { version = "0.14.3", features = ["std", "pkcs8"] } +crypto-bigint = { version = "0.5.5", features = ["zeroize"] } +elliptic-curve = { version = "0.13.8", features = ["sec1", "std", "pkcs8"] } flate2 = { version = "1.1.8", default-features = false, features = ["zlib-rs"] } futures = "0.3.31" glob = "0.3.2" @@ -70,7 +70,7 @@ indicatif = "0.18.0" indoc = "2.0.6" itertools = "0.14.0" jsonschema = "0.45.0" -k256 = { version = "0.14.0", features = ["pem", "pkcs8", "std"] } +k256 = { version = "0.13.4", features = ["pem", "pkcs8", "std"] } keyring = { version = "3.6.3", features = ["apple-native", "windows-native", "sync-secret-service", "crypto-rust"] } lazy_static = "1.5.0" mockall = "0.14.0" @@ -81,18 +81,18 @@ open = "5" qrcode = { version = "0.14.1", default-features = false } num-integer = "0.1.46" num-traits = "0.2.19" -p256 = { version = "0.14.0", features = ["pem", "pkcs8", "std"] } +p256 = { version = "0.13.2", features = ["pem", "pkcs8", "std"] } pathdiff = { version = "0.2.3", features = ["camino"] } predicates = "3" pem = "3.0.5" phf = { version = "0.13.1", features = ["macros"] } -pkcs8 = { version = "0.11.0", features = ["encryption", "std"] } +pkcs8 = { version = "0.10.2", features = ["encryption", "std"] } rand = "0.10.1" regex = "1.12.2" reqwest = { version = "0.13.2", default-features = false, features = ["rustls", "json", "stream"] } schemars = { version = "1.0.4", features = ["derive", "indexmap2", "url2"] } -scrypt = "0.12.0" -sec1 = { version = "0.8.1", features = ["der", "std"] } +scrypt = "0.11.0" +sec1 = { version = "0.7.3", features = ["pkcs8"] } send_ctrlc = "0.6" semver = "1" serial_test = { version = "3.2.0", features = ["file_locks"] } @@ -146,10 +146,3 @@ wast = { opt-level = 1 } [profile.dist] inherits = "release" lto = "thin" - -# Temporary: the RustCrypto 0.14 stack (RUSTSEC-2026-0387) until an ic-agent release carries it. -[patch.crates-io] -ic-agent = { git = "https://github.com/dfinity/agent-rs", branch = "chore/rustcrypto-elliptic-curve-0.14" } -ic-identity-hsm = { git = "https://github.com/dfinity/agent-rs", branch = "chore/rustcrypto-elliptic-curve-0.14" } -ic-transport-types = { git = "https://github.com/dfinity/agent-rs", branch = "chore/rustcrypto-elliptic-curve-0.14" } -ic-utils = { git = "https://github.com/dfinity/agent-rs", branch = "chore/rustcrypto-elliptic-curve-0.14" } diff --git a/crates/icp-app/src/identity/key.rs b/crates/icp-app/src/identity/key.rs index e79e71e94..8dbf414a1 100644 --- a/crates/icp-app/src/identity/key.rs +++ b/crates/icp-app/src/identity/key.rs @@ -16,8 +16,8 @@ use ic_identity_hsm::HardwareIdentity; use keyring::Entry; use pem::Pem; use pkcs8::{ - DecodePrivateKey, EncodePrivateKey, EncryptedPrivateKeyInfoRef, PrivateKeyInfoRef, - SecretDocument, pkcs5::pbes2::Parameters, + DecodePrivateKey, EncodePrivateKey, EncryptedPrivateKeyInfo, PrivateKeyInfo, SecretDocument, + pkcs5::pbes2::Parameters, }; use rand::Rng; use scrypt::Params; @@ -259,7 +259,7 @@ fn load_pbes2_identity( origin: &PemOrigin, ) -> Result, LoadIdentityError> { assert!( - doc.tag() == pkcs8::EncryptedPrivateKeyInfoRef::PEM_LABEL, + doc.tag() == pkcs8::EncryptedPrivateKeyInfo::PEM_LABEL, "internal error: wrong identity format found" ); @@ -279,7 +279,7 @@ fn load_pbes2_identity( Ok(Arc::new(Prime256v1Identity::from_private_key(key))) } IdentityKeyAlgorithm::Ed25519 => { - let encrypted = EncryptedPrivateKeyInfoRef::from_der(doc.contents()) + let encrypted = EncryptedPrivateKeyInfo::from_der(doc.contents()) .context(ParseDerSnafu { origin })?; let decrypted: SecretDocument = encrypted.decrypt(&pw).context(ParsePkcs8Snafu { origin })?; @@ -296,7 +296,7 @@ fn load_plaintext_identity( origin: &PemOrigin, ) -> Result, LoadIdentityError> { assert!( - doc.tag() == PrivateKeyInfoRef::PEM_LABEL, + doc.tag() == PrivateKeyInfo::PEM_LABEL, "internal error: wrong identity format found" ); @@ -528,7 +528,7 @@ fn create_pem_session_and_build_identity( // Store session key in keyring. let doc = session_key.to_pkcs8_der().expect("infallible PKI encoding"); let pem_str: Zeroizing = doc - .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let entry = Entry::new(SERVICE_NAME, &dlg_keyring_key(name)).context(CreateSessionKeyringEntrySnafu)?; @@ -816,7 +816,7 @@ fn load_webauth_public_key_pbes2( ) -> Result, LoadIdentityError> { match algorithm { IdentityKeyAlgorithm::Ed25519 => { - let encrypted = EncryptedPrivateKeyInfoRef::from_der(doc.contents()) + let encrypted = EncryptedPrivateKeyInfo::from_der(doc.contents()) .context(ParseDerSnafu { origin })?; let decrypted: SecretDocument = encrypted.decrypt(pw).context(ParsePkcs8Snafu { origin })?; @@ -1020,7 +1020,7 @@ pub fn create_identity( match &format { CreateFormat::Plaintext => { let pem = doc - .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); write_identity(dirs, name, &pem)?; } @@ -1030,7 +1030,7 @@ pub fn create_identity( } CreateFormat::Keyring => { let pem = doc - .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let username = if delegation.is_some() { dlg_keyring_key(name) @@ -1753,7 +1753,7 @@ pub fn link_webauth_identity( let webauth_storage = match &create_format { CreateFormat::Keyring => { let pem = doc - .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let entry = Entry::new(SERVICE_NAME, &dlg_keyring_key(name)) .context(DlgCreateKeyringEntrySnafu)?; @@ -1769,7 +1769,7 @@ pub fn link_webauth_identity( } CreateFormat::Plaintext => { let pem = doc - .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let pem_path = dirs .ensure_key_pem_path(name) @@ -1887,7 +1887,7 @@ pub fn create_pending_delegation( let storage = match &create_format { CreateFormat::Keyring => { let pem = doc - .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let entry = Entry::new(SERVICE_NAME, &dlg_keyring_key(name)) .context(DlgCreateKeyringEntrySnafu)?; @@ -1903,7 +1903,7 @@ pub fn create_pending_delegation( } CreateFormat::Plaintext => { let pem = doc - .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) .expect("infallible PKI encoding"); let pem_path = dirs .ensure_key_pem_path(name) @@ -2004,7 +2004,7 @@ pub fn complete_delegation( Ok(storage) } -fn encrypt_pki(pki: &PrivateKeyInfoRef<'_>, password: &str) -> Zeroizing { +fn encrypt_pki(pki: &PrivateKeyInfo<'_>, password: &str) -> Zeroizing { let mut salt = [0; 16]; let mut iv = [0; 16]; @@ -2014,10 +2014,10 @@ fn encrypt_pki(pki: &PrivateKeyInfoRef<'_>, password: &str) -> Zeroizing let encrypted_doc = pki .encrypt_with_params( - Parameters::generate_scrypt_aes256cbc( - Params::new(17, 8, 1).expect("valid scrypt params"), + Parameters::scrypt_aes256cbc( + Params::new(17, 8, 1, 32).expect("valid scrypt params"), &salt, - iv, + &iv, ) .expect("valid pbes2 params"), password, @@ -2025,12 +2025,12 @@ fn encrypt_pki(pki: &PrivateKeyInfoRef<'_>, password: &str) -> Zeroizing .expect("infallible PKI encryption"); encrypted_doc - .to_pem(EncryptedPrivateKeyInfoRef::PEM_LABEL, Default::default()) + .to_pem(EncryptedPrivateKeyInfo::PEM_LABEL, Default::default()) .expect("infallible EPKI encoding") } fn make_pkcs5_encrypted_pem(doc: &SecretDocument, password: &str) -> Zeroizing { - let pki = PrivateKeyInfoRef::from_der(doc.as_bytes()).expect("infallible PKI roundtrip"); + let pki = PrivateKeyInfo::from_der(doc.as_bytes()).expect("infallible PKI roundtrip"); encrypt_pki(&pki, password) } @@ -2137,7 +2137,7 @@ pub fn export_identity( .map_err(|message| ExportIdentityError::GetPasswordForExport { message })?; // Decrypt to get the plaintext private key info - let encrypted = EncryptedPrivateKeyInfoRef::from_der(pem.contents()) + let encrypted = EncryptedPrivateKeyInfo::from_der(pem.contents()) .context(ParseDecryptedForExportSnafu)?; let decrypted: SecretDocument = encrypted .decrypt(&password) @@ -2145,7 +2145,7 @@ pub fn export_identity( // Convert to plaintext PEM string decrypted - .to_pem(PrivateKeyInfoRef::PEM_LABEL, Default::default()) + .to_pem(PrivateKeyInfo::PEM_LABEL, Default::default()) .expect("infallible PEM encoding") .to_string() } @@ -2173,7 +2173,7 @@ pub fn export_identity( let pem: Pem = plaintext_pem .parse() .expect("internal error: exported PEM is invalid"); - let pki = PrivateKeyInfoRef::from_der(pem.contents()) + let pki = PrivateKeyInfo::from_der(pem.contents()) .expect("internal error: exported key is not valid PKCS#8"); // Encrypt the key with the provided password Ok(encrypt_pki(&pki, &password).to_string()) diff --git a/crates/icp-app/src/identity/seed/slip10.rs b/crates/icp-app/src/identity/seed/slip10.rs index e0cd98bcd..a032b134e 100644 --- a/crates/icp-app/src/identity/seed/slip10.rs +++ b/crates/icp-app/src/identity/seed/slip10.rs @@ -3,8 +3,8 @@ //! Implements use bip32::DerivationPath; -use crypto_bigint::{NonZero, U256}; -use elliptic_curve::{Curve, sec1::ToSec1Point}; +use crypto_bigint::{Encoding, U256, Zero}; +use elliptic_curve::{Curve, sec1::ToEncodedPoint}; use hmac::{Hmac, KeyInit, Mac}; use sha2::Sha512; use zeroize::{ZeroizeOnDrop, Zeroizing}; @@ -20,7 +20,7 @@ pub(super) fn derive_secp256k1(seed: &[u8], path: &DerivationPath) -> k256::Secr seed, path, SECP256K1_SEED_KEY, - Some(k256::Secp256k1::ORDER.into_nz()), + Some(k256::Secp256k1::ORDER), k256_compressed_public_key, ); k256::SecretKey::from_slice(&*key_bytes) @@ -32,7 +32,7 @@ pub(super) fn derive_p256(seed: &[u8], path: &DerivationPath) -> p256::SecretKey seed, path, P256_SEED_KEY, - Some(p256::NistP256::ORDER.into_nz()), + Some(p256::NistP256::ORDER), p256_compressed_public_key, ); p256::SecretKey::from_slice(&*key_bytes) @@ -69,16 +69,16 @@ fn slip10_derive( seed: &[u8], path: &DerivationPath, curve_key: &[u8], - order: Option>, + order: Option, pub_key: impl Fn(&[u8; 32]) -> [u8; 33], ) -> Zeroizing<[u8; 32]> { let (mut key, mut chain_code) = hmac_sha512_split(curve_key, seed); // For EC curves, the spec requires the master key to be a valid scalar. if let Some(order) = order { - let master = Zeroizing::new(U256::from_be_slice(&*key)); + let master = Zeroizing::new(U256::from_be_bytes(*key)); assert!( - !bool::from(master.is_zero()) && *master < *order.as_ref(), + !bool::from(master.is_zero()) && *master < order, "SLIP-0010: master key derived from seed is invalid; use a different seed", ); } @@ -107,12 +107,12 @@ fn slip10_derive( if let Some(order) = order { // EC: child key = (IL + parent_key) mod n - let il_scalar = Zeroizing::new(U256::from_be_slice(&*il)); - if *il_scalar >= *order.as_ref() { + let il_scalar = Zeroizing::new(U256::from_be_bytes(*il)); + if *il_scalar >= order { index += 1; continue; } - let key_scalar = Zeroizing::new(U256::from_be_slice(&*key)); + let key_scalar = Zeroizing::new(U256::from_be_bytes(*key)); // add_mod requires both operands < order; key_scalar is guaranteed < order // because it was validated on entry (master key check above) and every // subsequent value is the output of a prior add_mod call. @@ -121,7 +121,7 @@ fn slip10_derive( index += 1; continue; } - *key = child_scalar.to_be_bytes().into(); + *key = child_scalar.to_be_bytes(); chain_code = ir; } else { // Ed25519: child key is the left 32 bytes directly; no modular arithmetic. @@ -140,7 +140,7 @@ fn k256_compressed_public_key(key_bytes: &[u8; 32]) -> [u8; 33] { let secret = k256::SecretKey::from_slice(key_bytes).expect("valid k256 secret key"); secret .public_key() - .to_sec1_point(true) + .to_encoded_point(true) .as_bytes() .try_into() .expect("compressed k256 point is 33 bytes") @@ -152,7 +152,7 @@ fn p256_compressed_public_key(key_bytes: &[u8; 32]) -> [u8; 33] { let secret = p256::SecretKey::from_slice(key_bytes).expect("valid p256 secret key"); secret .public_key() - .to_sec1_point(true) + .to_encoded_point(true) .as_bytes() .try_into() .expect("compressed p256 point is 33 bytes") diff --git a/crates/icp-cli/src/commands/identity/import.rs b/crates/icp-cli/src/commands/identity/import.rs index c16f327e7..751952f3c 100644 --- a/crates/icp-cli/src/commands/identity/import.rs +++ b/crates/icp-cli/src/commands/identity/import.rs @@ -17,7 +17,7 @@ use k256::Secp256k1; use p256::NistP256; use pem::Pem; use pkcs8::{ - AssociatedOid, EncryptedPrivateKeyInfoRef, ObjectIdentifier, PrivateKeyInfoRef, SecretDocument, + AssociatedOid, EncryptedPrivateKeyInfo, ObjectIdentifier, PrivateKeyInfo, SecretDocument, der::{Decode, pem::PemLabel}, }; use sec1::{EcParameters, EcPrivateKey}; @@ -175,11 +175,11 @@ async fn import_from_pem( .iter() .filter(|s| { // PKCS#8, unencrypted - s.tag() == PrivateKeyInfoRef::PEM_LABEL + s.tag() == PrivateKeyInfo::PEM_LABEL // SEC1, unencrypted || s.tag() == EcPrivateKey::PEM_LABEL // PKCS#8, encrypted - || s.tag() == EncryptedPrivateKeyInfoRef::PEM_LABEL + || s.tag() == EncryptedPrivateKeyInfo::PEM_LABEL }) .exactly_one() { @@ -190,9 +190,9 @@ async fn import_from_pem( UnknownPemFormatSnafu { path, expected: vec![ - PrivateKeyInfoRef::PEM_LABEL, + PrivateKeyInfo::PEM_LABEL, EcPrivateKey::PEM_LABEL, - EncryptedPrivateKeyInfoRef::PEM_LABEL, + EncryptedPrivateKeyInfo::PEM_LABEL, ], found: sections.iter().map(|s| s.tag().to_string()).collect_vec(), } @@ -203,7 +203,7 @@ async fn import_from_pem( } }; let key = match section.tag() { - PrivateKeyInfoRef::PEM_LABEL | EncryptedPrivateKeyInfoRef::PEM_LABEL => { + PrivateKeyInfo::PEM_LABEL | EncryptedPrivateKeyInfo::PEM_LABEL => { import_pkcs8(section, path, decryption_password_file, known_key_type)? } EcPrivateKey::PEM_LABEL => import_sec1( @@ -232,8 +232,8 @@ fn import_pkcs8( // first, grab the actual key structure from the doc, which entails decrypting it if it's encrypted let decrypted_doc: SecretDocument; let mut truncated: Vec; - let pki = if section.tag() == PrivateKeyInfoRef::PEM_LABEL { - match PrivateKeyInfoRef::from_der(section.contents()) { + let pki = if section.tag() == PrivateKeyInfo::PEM_LABEL { + match PrivateKeyInfo::from_der(section.contents()) { Ok(pki) => pki, Err(e) => { // Very old versions of dfx generated nonconforming PKCS#8 containers. @@ -245,7 +245,7 @@ fn import_pkcs8( truncated.truncate(48); truncated[1] = 46; truncated[4] = 0; - PrivateKeyInfoRef::from_der(&truncated) + PrivateKeyInfo::from_der(&truncated) .map_err(|_| e) .context(BadPemContentSnafu { path })? } else { @@ -254,7 +254,7 @@ fn import_pkcs8( } } } else { - let epki = EncryptedPrivateKeyInfoRef::from_der(section.contents()) + let epki = EncryptedPrivateKeyInfo::from_der(section.contents()) .context(BadPemContentSnafu { path })?; let password = if let Some(path) = decryption_password_file { read_to_string(path).context(ReadFileSnafu)? @@ -268,7 +268,7 @@ fn import_pkcs8( .decrypt(&password) .context(DecryptionFailedSnafu { path })?; decrypted_doc - .decode_msg::() + .decode_msg::() .context(BadPemContentSnafu { path })? }; // second, figure out what algorithm the key is for @@ -276,20 +276,20 @@ fn import_pkcs8( // if the user knows what it is, we do not have to check match known_key_type { IdentityKeyAlgorithm::Secp256k1 => Ok(IdentityKey::Secp256k1( - k256::SecretKey::from_sec1_der(pki.private_key.as_bytes()) - .context(BadEcDerKeySnafu { path })?, + k256::SecretKey::from_sec1_der(pki.private_key) + .context(BadEcPemKeySnafu { path })?, )), IdentityKeyAlgorithm::Prime256v1 => Ok(IdentityKey::Prime256v1( - p256::SecretKey::from_sec1_der(pki.private_key.as_bytes()) - .context(BadEcDerKeySnafu { path })?, + p256::SecretKey::from_sec1_der(pki.private_key) + .context(BadEcPemKeySnafu { path })?, )), IdentityKeyAlgorithm::Ed25519 => { ensure!( - pki.private_key.as_bytes()[0..2] == [0x04, 0x20], + pki.private_key[0..2] == [0x04, 0x20], BadP8PemKeySnafu { path }, ); Ok(IdentityKey::Ed25519( - ic_ed25519::PrivateKey::deserialize_raw(&pki.private_key.as_bytes()[2..]) + ic_ed25519::PrivateKey::deserialize_raw(&pki.private_key[2..]) .context(BadEdPemKeySnafu { path })?, )) } @@ -309,12 +309,12 @@ fn import_pkcs8( })?; match curve { Secp256k1::OID => Ok(IdentityKey::Secp256k1( - k256::SecretKey::from_sec1_der(pki.private_key.as_bytes()) - .context(BadEcDerKeySnafu { path })?, + k256::SecretKey::from_sec1_der(pki.private_key) + .context(BadEcPemKeySnafu { path })?, )), NistP256::OID => Ok(IdentityKey::Prime256v1( - p256::SecretKey::from_sec1_der(pki.private_key.as_bytes()) - .context(BadEcDerKeySnafu { path })?, + p256::SecretKey::from_sec1_der(pki.private_key) + .context(BadEcPemKeySnafu { path })?, )), _ => UnsupportedAlgorithmSnafu { found: curve, @@ -326,11 +326,11 @@ fn import_pkcs8( } ED25519_OID => { ensure!( - pki.private_key.as_bytes()[0..2] == [0x04, 0x20], + pki.private_key[0..2] == [0x04, 0x20], BadP8PemKeySnafu { path }, ); Ok(IdentityKey::Ed25519( - ic_ed25519::PrivateKey::deserialize_raw(&pki.private_key.as_bytes()[2..]) + ic_ed25519::PrivateKey::deserialize_raw(&pki.private_key[2..]) .context(BadEdPemKeySnafu { path })?, )) } @@ -468,11 +468,6 @@ pub(crate) enum LoadKeyError { source: elliptic_curve::Error, }, #[snafu(display("malformed key material in PEM file `{path}`"))] - BadEcDerKey { - path: PathBuf, - source: elliptic_curve::DecodeError, - }, - #[snafu(display("malformed key material in PEM file `{path}`"))] BadEdPemKey { path: PathBuf, source: ic_ed25519::PrivateKeyDecodingError, diff --git a/deny.toml b/deny.toml index 70e3d21f3..cd90712d0 100644 --- a/deny.toml +++ b/deny.toml @@ -51,6 +51,3 @@ multiple-versions = "allow" # make a tagged release non-reproducible. cargo-deny only warns by default. unknown-registry = "deny" unknown-git = "deny" -# Temporary, with the `[patch.crates-io]` in Cargo.toml: remove both once an -# ic-agent release carries the RustCrypto 0.14 stack (RUSTSEC-2026-0387). -allow-git = ["https://github.com/dfinity/agent-rs"] From fe4e54520775511e3abf452c8dc177f3ad367400 Mon Sep 17 00:00:00 2001 From: Linwei Shang Date: Mon, 26 Oct 2026 07:10:16 +0000 Subject: [PATCH 5/5] chore(deps): ignore RUSTSEC-2026-0387 until ic-agent moves to the RustCrypto 0.14 stack crypto-bigint 0.5 has no patched release and is pinned by ic-agent's elliptic-curve 0.13 stack. The fix is in progress in dfinity/agent-rs#745; the migration that was here moves to its own PR to wait for that release. Co-Authored-By: Claude Opus 5.5 (1M context) --- deny.toml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/deny.toml b/deny.toml index cd90712d0..11aca7759 100644 --- a/deny.toml +++ b/deny.toml @@ -8,13 +8,21 @@ exclude-dev = true [advisories] -# Vulnerabilities are always denied. Informational advisories are transitive -# crates we do not pick, usually with no patched version, and GHSA omits them so -# Dependabot never raises them either. Replaces the stale hand-maintained ignore -# list in .cargo/audit.toml. +# Vulnerabilities are denied, except one listed in `ignore` below, which needs +# a fix already in progress and a link to it. Informational advisories are +# transitive crates we do not pick, usually with no patched version, and GHSA +# omits them so Dependabot never raises them either. Replaces the stale +# hand-maintained ignore list in .cargo/audit.toml. unmaintained = "none" # Not a vulnerability, and usually clears on the next `cargo update`. yanked = "warn" +ignore = [ + # crypto-bigint 0.5 has no patched release, and ic-agent's elliptic-curve + # 0.13 stack pins it. A timing side channel is a remote risk for a local CLI + # that signs only with the user's own keys. Remove once ic-agent ships the + # 0.14 stack (dfinity/agent-rs#745) and icp-cli moves to it. + { id = "RUSTSEC-2026-0387", reason = "crypto-bigint 0.5 pinned by ic-agent; fix in dfinity/agent-rs#745" }, +] [licenses] # Binary distribution, so: attribution-only terms, plus MPL-2.0, whose copyleft