From 011f07f881a3e7028401b498051edb4f62382960 Mon Sep 17 00:00:00 2001 From: Arthur Gautier Date: Thu, 8 May 2025 20:54:01 -0700 Subject: [PATCH] bump dependencies --- .github/workflows/ci.yml | 6 +- Cargo.lock | 403 ++++++++++--------------- Cargo.toml | 63 ++-- src/asymmetric/public_key.rs | 9 +- src/authentication/key.rs | 4 +- src/ecdsa/signer.rs | 29 +- src/mockhsm/command.rs | 4 +- src/mockhsm/object/objects.rs | 2 +- src/mockhsm/object/payload.rs | 57 ++-- src/session/securechannel/challenge.rs | 4 +- src/uuid.rs | 4 +- src/wrap/key.rs | 33 +- src/wrap/message.rs | 32 +- src/wrap/nonce.rs | 4 +- tests/command/decrypt_oaep.rs | 10 +- tests/rsa/mod.rs | 4 +- 16 files changed, 304 insertions(+), 364 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d19be01f..80e37ab9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: matrix: toolchain: - stable - - 1.83.0 # MSRV + - 1.85.0 # MSRV steps: - uses: actions/checkout@v1 - uses: dtolnay/rust-toolchain@master @@ -34,7 +34,7 @@ jobs: matrix: toolchain: - stable - - 1.83.0 # MSRV + - 1.85.0 # MSRV steps: - uses: actions/checkout@v1 - uses: dtolnay/rust-toolchain@master @@ -63,7 +63,7 @@ jobs: - uses: actions/checkout@v1 - uses: dtolnay/rust-toolchain@master with: - toolchain: 1.83.0 # pinned to prevent CI breakages + toolchain: 1.85.0 # pinned to prevent CI breakages components: clippy - uses: actions-rs/cargo@v1 with: diff --git a/Cargo.lock b/Cargo.lock index 47ed2392..3902fdfa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,21 +1,22 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "aead" -version = "0.6.0-rc.0" +version = "0.6.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5f451b77e2f92932dc411da6ef9f3d33efad68a6f14a7a83e559453458e85ac" +checksum = "c01559752fbde7734af628961723aa734aa46351cbf5c9ce41133ad2ae1a09b9" dependencies = [ "crypto-common", + "inout", ] [[package]] name = "aes" -version = "0.9.0-pre.2" +version = "0.9.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7856582c758ade85d71daf27ec6bcea6c1c73913692b07b8dffea2dc03531c9" +checksum = "cd4838e4ad37bb032dea137f441d5f71c16c26c068af512e64c5bc13a88cdfc7" dependencies = [ "cfg-if", "cipher", @@ -29,15 +30,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" -[[package]] -name = "async-signature" -version = "0.6.0-pre.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9bdb5df8dde2bd1ec515a0981636508bb37d55984d0bae3678d4ac859125431" -dependencies = [ - "signature", -] - [[package]] name = "autocfg" version = "1.3.0" @@ -52,9 +44,9 @@ checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bitflags" @@ -64,33 +56,27 @@ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block-buffer" -version = "0.11.0-rc.3" +version = "0.11.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd016a0ddc7cb13661bf5576073ce07330a693f8608a1320b4e20561cc12cdc" +checksum = "a229bfd78e4827c91b9b95784f69492c1b77c1ab75a45a8a037b139215086f94" dependencies = [ "hybrid-array", ] [[package]] name = "block-padding" -version = "0.4.0-rc.2" +version = "0.4.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868e23cd7a5b2e18fb2e9a583910b88b8d645dd21017aafc5d0439cf16ae6d6" +checksum = "ee88d14c41bbae2e333f574a27fc73d96fe1039e5a356c20d06a7f2a34cd8e5a" dependencies = [ "hybrid-array", ] -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "cbc" -version = "0.2.0-pre.2" +version = "0.2.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0729a0a8422deb6056b8fcd89c42b724fe27e69458fa006f00c63cbffffd91b" +checksum = "3ef95f543a56c245d9d0826ccbb34636ee983b3e846eff57bc5fc72e1bce1701" dependencies = [ "cipher", ] @@ -103,8 +89,8 @@ checksum = "ac367972e516d45567c7eafc73d24e1c193dcf200a8d94e9db7b3d38b349572d" [[package]] name = "ccm" -version = "0.5.0" -source = "git+https://github.com/RustCrypto/AEADs.git#8cda109f1128c4c7953a0bb0f53e1056d537e462" +version = "0.6.0-pre" +source = "git+https://github.com/RustCrypto/AEADs.git#77d4c786f9cd27cb9359db51683e175ef73c371e" dependencies = [ "aead", "cipher", @@ -126,9 +112,9 @@ checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" [[package]] name = "cipher" -version = "0.5.0-pre.7" +version = "0.5.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b1425e6ce000f05a73096556cabcfb6a10a3ffe3bb4d75416ca8f00819c0b6a" +checksum = "bd4ef774202f1749465fc7cf88d70fc30620e8cacd5429268f4bff7d003bd976" dependencies = [ "crypto-common", "inout", @@ -136,9 +122,9 @@ dependencies = [ [[package]] name = "cmac" -version = "0.8.0-pre.2" +version = "0.8.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a53c8815f718726c448e4e83b86806245fb37bfaa82ad50893d9f01ad3a503" +checksum = "14088e66e0ff42509343b570d1c9c641bb4ddb972c43e606157fb6c571c334f0" dependencies = [ "cipher", "dbl", @@ -147,56 +133,68 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.10.0-rc.3" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ff6be19477a1bd5441f382916a89bc2a0b2c35db6d41e0f6e8538bf6d6463f" +checksum = "0dabb6555f92fb9ee4140454eb5dcd14c7960e1225c6d1a6cc361f032947713e" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crypto-bigint" -version = "0.6.0" +version = "0.7.0-pre.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4919aa33c410cb537c1b2a8458a896f9e47ed4349a2002e5b240f358f7bf6ffc" +checksum = "98dc20cae677f0af161d98f18463804b680f9af060f6dbe6d4249bd7e838bca1" dependencies = [ "hybrid-array", "num-traits", "rand_core", + "serdect", "subtle", "zeroize", ] [[package]] name = "crypto-common" -version = "0.2.0-rc.1" +version = "0.2.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0b8ce8218c97789f16356e7896b3714f26c2ee1079b79c0b7ae7064bb9089fa" +checksum = "8a23fa214dea9efd4dacee5a5614646b30216ae0f05d4bb51bafb50e9da1c5be" dependencies = [ - "getrandom", "hybrid-array", "rand_core", ] +[[package]] +name = "crypto-primes" +version = "0.7.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae744b9f528151f8c440cf67498f24d2d1ac0ab536b5ce7b1f87a7a5961bd1c1" +dependencies = [ + "crypto-bigint", + "libm", + "rand_core", +] + [[package]] name = "ctr" -version = "0.10.0-pre.2" +version = "0.10.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e1482d284b80d7fddb211666d513dc5e23b0cc3a03ad398ff70543827c789f" +checksum = "f239edce204df0e4503cccef3492552773d1ca4e002659a59ca715f099b45ca1" dependencies = [ "cipher", ] [[package]] name = "curve25519-dalek" -version = "4.1.3" -source = "git+https://github.com/dalek-cryptography/curve25519-dalek.git?branch=rustcrypto-new-releases#e7d61b5621b80fc6adcfa56f03eee383d7b06e41" +version = "5.0.0-pre.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdebdcbeb8f27a33dd326d0c6382a475a838abbb306bfd573b79d5e39be7afd3" dependencies = [ "cfg-if", "cpufeatures", @@ -211,7 +209,8 @@ dependencies = [ [[package]] name = "curve25519-dalek-derive" version = "0.1.1" -source = "git+https://github.com/dalek-cryptography/curve25519-dalek.git?branch=rustcrypto-new-releases#e7d61b5621b80fc6adcfa56f03eee383d7b06e41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", @@ -220,18 +219,18 @@ dependencies = [ [[package]] name = "dbl" -version = "0.4.0-rc.1" +version = "0.4.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b317b5dd7fb52c79e017554049304992f65260689c5ddb55438ad52ba007f98d" +checksum = "cb24c766034b76390c67f3d9c44e63019febeb4cc39e4ba40b5fc79e20c898e1" dependencies = [ "hybrid-array", ] [[package]] name = "der" -version = "0.8.0-rc.1" +version = "0.8.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82db698b33305f0134faf590b9d1259dc171b5481ac41d5c8146c3b3ee7d4319" +checksum = "e2fe0a4fafae25053c19a03fefe040607bda956b4941d692ed9fb9d3c18a3193" dependencies = [ "const-oid", "der_derive", @@ -242,9 +241,9 @@ dependencies = [ [[package]] name = "der_derive" -version = "0.8.0-rc.1" +version = "0.8.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "211bea8bb45f5f61bc857104606913ef8ac8b5ec698143aa2aa96a7ffdc94991" +checksum = "d184a65ac0a9db9e66e0d629bea86d0402198b2a5cc01c9c16de7a6537f0ac4f" dependencies = [ "proc-macro2", "quote", @@ -263,9 +262,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.0-pre.9" +version = "0.11.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2e3d6615d99707295a9673e889bf363a04b2a466bd320c65a72536f7577379" +checksum = "460dd7f37e4950526b54a5a6b1f41b6c8e763c58eb9a8fc8fc05ba5c2f44ca7b" dependencies = [ "block-buffer", "const-oid", @@ -275,9 +274,9 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.17.0-pre.9" +version = "0.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e62f2041a28c40b8884b79fbd19bc7457d76c6397767831e9ff4029fc0473a9" +checksum = "a71089a4626a0efab7561890b599f7c6c9138c0d02b5c2739a8c07ef87101270" dependencies = [ "der", "digest", @@ -285,13 +284,14 @@ dependencies = [ "rfc6979", "signature", "spki", + "zeroize", ] [[package]] name = "ed25519" -version = "2.3.0-pre.0" +version = "3.0.0-pre.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bcc0730fbd27c8619332efad3dfa1de229dc5859a31495ab674e0ac0f9996b" +checksum = "e6e01f644da45b2f83a7c40f6895ccc467ce60d6163c729d9fe4351eaa42c512" dependencies = [ "pkcs8", "signature", @@ -299,13 +299,13 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.2.0-pre" -source = "git+https://github.com/dalek-cryptography/curve25519-dalek.git?branch=rustcrypto-new-releases#e7d61b5621b80fc6adcfa56f03eee383d7b06e41" +version = "3.0.0-pre.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e0db9678ad1873a245383faabce5bf0636b15edc8742f7bf5425f3a82d74c49" dependencies = [ "curve25519-dalek", "ed25519", "rand_core", - "serde", "sha2", "subtle", "zeroize", @@ -313,16 +313,15 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.14.0-rc.1" +version = "0.14.0-rc.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc43715037532dc2d061e5c97e81b684c28993d52a4fa4eb7d2ce2826d78f2f2" +checksum = "c28ecec37eea07ab976cea93c7ce8b36d561cf161f6767925c1edc51024b0ad3" dependencies = [ "base16ct", "crypto-bigint", "digest", "ff", "group", - "hkdf", "hybrid-array", "pem-rfc7468", "pkcs8", @@ -334,9 +333,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.0" +version = "0.14.0-pre.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "d42dd26f5790eda47c1a2158ea4120e32c35ddc9a7743c98a292accc01b54ef3" dependencies = [ "rand_core", "subtle", @@ -344,32 +343,33 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.9" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" [[package]] name = "flagset" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" +checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" [[package]] name = "getrandom" -version = "0.2.15" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", "libc", + "r-efi", "wasi", ] [[package]] name = "group" -version = "0.13.0" +version = "0.14.0-pre.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "1ff6a0b2dd4b981b1ae9e3e6830ab146771f3660d31d57bafd9018805a91b0f1" dependencies = [ "ff", "rand_core", @@ -378,24 +378,15 @@ dependencies = [ [[package]] name = "hex-literal" -version = "0.4.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - -[[package]] -name = "hkdf" -version = "0.13.0-pre.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00176ff81091018d42ff82e8324f8e5adb0b7e0468d1358f653972562dbff031" -dependencies = [ - "hmac", -] +checksum = "bcaaec4551594c969335c98c903c1397853d4198408ea609190f420500f6be71" [[package]] name = "hmac" -version = "0.13.0-pre.4" +version = "0.13.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4b1fb14e4df79f9406b434b60acef9f45c26c50062cccf1346c6103b8c47d58" +checksum = "8dc6a2fcc35ab09136c6df2cdf9ca49790701420a3a6b5db0987dddbabc79b21" dependencies = [ "digest", ] @@ -408,9 +399,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hybrid-array" -version = "0.2.3" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d35805454dc9f8662a98d6d61886ffe26bd465f5960e0e55345c70d5c0d2a9" +checksum = "891d15931895091dea5c47afa5b3c9a01ba634b311919fd4d41388fa0e3d76af" dependencies = [ "typenum", "zeroize", @@ -418,9 +409,9 @@ dependencies = [ [[package]] name = "inout" -version = "0.2.0-rc.3" +version = "0.2.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de49db00f5add6dad75a57946b75de0f26287a6fc95f4f277d48419200422beb" +checksum = "c774c86bce20ea04abe1c37cf0051c5690079a3a28ef5fdac2a5a0412b3d7d74" dependencies = [ "block-padding", "hybrid-array", @@ -434,8 +425,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "k256" -version = "0.14.0-pre.2" -source = "git+https://github.com/RustCrypto/elliptic-curves.git#6033a21ca2ab24b21e59ea094c8683d555a4917b" +version = "0.14.0-pre.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92eff4fdd593daf3d0affe8ad7bbb6610a7790121d74cbd5ca28be073112153e" dependencies = [ "cfg-if", "ecdsa", @@ -445,15 +437,6 @@ dependencies = [ "signature", ] -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] - [[package]] name = "libc" version = "0.2.155" @@ -462,9 +445,9 @@ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libm" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libusb1-sys" @@ -484,49 +467,12 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "smallvec", - "zeroize", -] - [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -534,44 +480,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] name = "once_cell" -version = "1.20.3" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "p256" -version = "0.14.0-pre.2" +version = "0.14.0-pre.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71f3fd64a9cad9c26ed7f734b152196d5e56376b9957c832bcca0de48a708080" +checksum = "1be97a30a85c829fdac914cebb89ef05e109f9e5eb6510f46f623be91bc39ded" dependencies = [ "ecdsa", "elliptic-curve", + "primefield", "primeorder", "sha2", ] [[package]] name = "p384" -version = "0.14.0-pre.2" +version = "0.14.0-pre.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e19554fe6ee269c860a0f231cbba714e5cbef26a927c75d8e30ac9040a4b32e" +checksum = "ea9626bce3d0bf768a28778618e5095131cd32bfca5297b51bbcb4abe7fae62a" dependencies = [ "ecdsa", "elliptic-curve", + "primefield", "primeorder", "sha2", ] [[package]] name = "p521" -version = "0.14.0-pre.2" +version = "0.14.0-pre.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957df9b5e6a7542f6430ec5187a4cb66d8498946c38b23fd14562bce6e32e6de" +checksum = "ec1071ec0ddc9a8c198692acf5620176b0cd9c1db988acef030e101f851405f4" dependencies = [ "base16ct", "ecdsa", @@ -584,9 +531,9 @@ dependencies = [ [[package]] name = "pbkdf2" -version = "0.13.0-pre.1" +version = "0.13.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e11753d5193f26dc27ae698e0b536b5e511b7799c5ac475ec10783f26d164a" +checksum = "c2efb182a4d7d26aa7442a4ef2f91c5021c6abb61f9fdd251fcc2e327f5faaf6" dependencies = [ "digest", "hmac", @@ -594,29 +541,28 @@ dependencies = [ [[package]] name = "pem-rfc7468" -version = "1.0.0-rc.2" +version = "1.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dfbfa5c6f0906884269722c5478e72fd4d6c0e24fe600332c6d62359567ce1" +checksum = "a8e58fab693c712c0d4e88f8eb3087b6521d060bcaf76aeb20cb192d809115ba" dependencies = [ "base64ct", ] [[package]] name = "pkcs1" -version = "0.8.0-rc.1" +version = "0.8.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226eb25e2c46c166ce498ac0f606ac623142d640064879ff445938accddff1e2" +checksum = "b2345503b65d9be13aac96ddbec3eed60def8bc83869f9a519789afbcf3c2bea" dependencies = [ "der", - "pkcs8", "spki", ] [[package]] name = "pkcs8" -version = "0.11.0-rc.1" +version = "0.11.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eacd2c7141f32aef1cfd1ad0defb5287a3d94592d7ab57c1ae20e3f9f1f0db1f" +checksum = "c53e5d0804fa4070b1b2a5b320102f2c1c094920a7533d5d87c2630609bcbd34" dependencies = [ "der", "spki", @@ -634,23 +580,24 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - [[package]] name = "primefield" -version = "0.14.0-pre.0" +version = "0.14.0-pre.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3f2ce0fa9cccdaf216230d151ce51a15298aef50ad76081a830128ecbc6428a" +checksum = "adc85f9f75dc05486f61bc61858535c0501a0ca81ca3117ab17befbead13c110" +dependencies = [ + "crypto-bigint", + "ff", + "rand_core", + "subtle", + "zeroize", +] [[package]] name = "primeorder" -version = "0.14.0-pre.2" +version = "0.14.0-pre.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794117b388378d55629f78f61e64e182baa200bf59c1a8205e0c46508ce5873" +checksum = "af12dd34fc62d04416de85af032f4595369437fb7b0143d36ae60cecaf5cdddf" dependencies = [ "elliptic-curve", ] @@ -674,39 +621,25 @@ dependencies = [ ] [[package]] -name = "rand" -version = "0.8.5" +name = "r-efi" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" [[package]] name = "rand_core" -version = "0.6.4" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ "getrandom", ] [[package]] name = "rfc6979" -version = "0.5.0-pre.4" +version = "0.5.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871ee76a3eee98b0f805e5d1caf26929f4565073c580c053a55f886fc15dea49" +checksum = "f53f124bf3ec90be84ae97d7f52175ba938898525554c13c9017eb8f0a604146" dependencies = [ "hmac", "subtle", @@ -714,15 +647,14 @@ dependencies = [ [[package]] name = "rsa" -version = "0.10.0-pre.3" +version = "0.10.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07058e83b684989ab0559f9e22322f4e3f7e49147834ed0bae40486b9e70473c" +checksum = "7e8cb237ca3624409eda7d73de0d423815c9d91175ed5a62a8dd6549d2408cc2" dependencies = [ "const-oid", + "crypto-bigint", + "crypto-primes", "digest", - "num-bigint-dig", - "num-integer", - "num-traits", "pkcs1", "pkcs8", "rand_core", @@ -761,14 +693,13 @@ checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "sec1" -version = "0.8.0-rc.3" +version = "0.8.0-rc.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1988446eff153796413a73669dfaa4caa3f5ce8b25fac89e3821a39c611772e" +checksum = "c54dee398d74b1d03d78ddc09c90e456bf906b5b7aa790ba4f48b025b2179e5d" dependencies = [ "base16ct", "der", "hybrid-array", - "pkcs8", "subtle", "zeroize", ] @@ -810,11 +741,21 @@ dependencies = [ "serde", ] +[[package]] +name = "serdect" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53" +dependencies = [ + "base16ct", + "serde", +] + [[package]] name = "sha1" -version = "0.11.0-pre.4" +version = "0.11.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9540978cef7a8498211c1b1c14e5ce920fe5bd524ea84f4a3d72d4602515ae93" +checksum = "6f9318facddf9ac32a33527066936837e189b3f23ced6edc1603720ead5e2b3d" dependencies = [ "cfg-if", "cpufeatures", @@ -823,9 +764,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.11.0-pre.4" +version = "0.11.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "540c0893cce56cdbcfebcec191ec8e0f470dd1889b6e7a0b503e310a94a168f5" +checksum = "aa1d2e6b3cc4e43a8258a9a3b17aa5dfd2cc5186c7024bba8a64aa65b2c71a59" dependencies = [ "cfg-if", "cpufeatures", @@ -834,43 +775,19 @@ dependencies = [ [[package]] name = "signature" -version = "2.3.0-pre.4" +version = "3.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054d71959c7051b9042c26af337f05cc930575ed2604d7d3ced3158383e59734" +checksum = "b8852cecbd17ba45978bbbe43061ebe36a2ae376058c5c172e09f72888f8f7de" dependencies = [ "digest", "rand_core", - "signature_derive", -] - -[[package]] -name = "signature_derive" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab0381d1913eeaf4c7bc4094016c9a8de6c1120663afe32a90ff268ad7f80486" -dependencies = [ - "proc-macro2", - "quote", - "syn", ] -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - [[package]] name = "spki" -version = "0.8.0-rc.0" +version = "0.8.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3fb1c675852398475928637b3ebbdd7e1d0cc24d27b3bbc81788b4eb51e310" +checksum = "8baeff88f34ed0691978ec34440140e1572b68c7dd4a495fd14a3dc1944daa80" dependencies = [ "base64ct", "der", @@ -1005,17 +922,28 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] [[package]] name = "x509-cert" -version = "0.3.0-pre.0" +version = "0.3.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2db382aa43c1fb5c419a960f72c3847ab0f383f635fc2e25f0bd6c5fb94371d1" +checksum = "015655a524ab1db259a56aaaec614cf84952299f4081c2602881d556e2ed2838" dependencies = [ - "async-signature", "const-oid", "der", "sha1", @@ -1041,7 +969,6 @@ dependencies = [ "hmac", "k256", "log", - "num-traits", "once_cell", "p256", "p384", diff --git a/Cargo.toml b/Cargo.toml index 15f2c87c..a5a756e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,29 +14,28 @@ readme = "README.md" categories = ["cryptography", "hardware-support"] keywords = ["ecdsa", "ed25519", "hmac", "hsm", "yubikey"] edition = "2021" -rust-version = "1.83" +rust-version = "1.85" [dependencies] -aes = { version = "=0.9.0-pre.2", features = ["zeroize"] } +aes = { version = "0.9.0-rc.0", features = ["zeroize"] } bitflags = "2" -cmac = "=0.8.0-pre.2" -cbc = "=0.2.0-pre.2" -ccm = { version = "0.5", features = ["std"] } -digest = { version = "=0.11.0-pre.9", default-features = false } -ecdsa = { version = "=0.17.0-pre.9", default-features = false, features = ["pkcs8"] } -ed25519 = "=2.3.0-pre.0" +cmac = "0.8.0-rc.0" +cbc = "0.2.0-rc.0" +ccm = { version = "=0.6.0-pre" } +digest = { version = "0.11.0-rc.0", default-features = false } +ecdsa = { version = "0.17.0-rc.0", default-features = false, features = ["pkcs8"] } +ed25519 = "=3.0.0-pre.0" log = "0.4" -num-traits = "0.2" -p256 = { version = "=0.14.0-pre.2", default-features = false, features = ["ecdsa"] } -p384 = { version = "=0.14.0-pre.2", default-features = false, features = ["ecdsa"] } -p521 = { version = "=0.14.0-pre.2", default-features = false, features = ["ecdsa"] } +p256 = { version = "=0.14.0-pre.9", default-features = false, features = ["ecdsa"] } +p384 = { version = "=0.14.0-pre.9", default-features = false, features = ["ecdsa"] } +p521 = { version = "=0.14.0-pre.9", default-features = false, features = ["ecdsa"] } serde = { version = "1", features = ["serde_derive"] } -rand_core = { version = "0.6", features = ["std"] } -rsa = "=0.10.0-pre.3" -signature = { version = "=2.3.0-pre.4", features = ["derive"] } -sha1 = { version = "=0.11.0-pre.4", features = ["oid"] } -sha2 = { version = "=0.11.0-pre.4", features = ["oid"] } -spki = { version = "=0.8.0-rc.0", default-features = false } +rand_core = { version = "0.9", features = ["std"] } +rsa = "0.10.0-rc.3" +signature = { version = "3.0.0-rc.0" } +sha1 = { version = "0.11.0-rc.0", features = ["oid"] } +sha2 = { version = "0.11.0-rc.0", features = ["oid"] } +spki = { version = "0.8.0-rc.0", default-features = false } subtle = "2" thiserror = "1" time = { version = "0.3", features = ["serde"] } @@ -44,23 +43,23 @@ uuid = { version = "1", default-features = false } zeroize = { version = "1.8", features = ["zeroize_derive"] } # optional dependencies -ed25519-dalek = { version = "=2.2.0-pre", optional = true, features = ["rand_core"] } -hmac = { version = "=0.13.0-pre.4", optional = true } -k256 = { version = "=0.14.0-pre.2", optional = true, features = ["ecdsa", "sha256"] } -pbkdf2 = { version = "=0.13.0-pre.1", optional = true, default-features = false, features = ["hmac"] } +ed25519-dalek = { version = "=3.0.0-pre.0", optional = true, features = ["rand_core"] } +hmac = { version = "0.13.0-rc.0", optional = true } +k256 = { version = "=0.14.0-pre.9", optional = true, features = ["ecdsa", "sha256"] } +pbkdf2 = { version = "0.13.0-rc.0", optional = true, default-features = false, features = ["hmac"] } serde_json = { version = "1", optional = true } rusb = { version = "0.9.4", optional = true } tiny_http = { version = "0.12", optional = true } [dev-dependencies] -ed25519-dalek = "=2.2.0-pre" -hex-literal = "0.4" +ed25519-dalek = "=3.0.0-pre.0" +hex-literal = "1" once_cell = "1" -rsa = { version = "=0.10.0-pre.3", features = ["sha1", "sha2"] } -p256 = { version = "=0.14.0-pre.2", features = ["ecdsa"] } -p384 = { version = "=0.14.0-pre.2", features = ["ecdsa"] } -p521 = { version = "=0.14.0-pre.2", features = ["ecdsa"] } -x509-cert = { version = "=0.3.0-pre.0", features = ["builder"] } +rsa = { version = "0.10.0-rc.3", features = ["sha1", "sha2"] } +p256 = { version = "=0.14.0-pre.9", features = ["ecdsa"] } +p384 = { version = "=0.14.0-pre.9", features = ["ecdsa"] } +p521 = { version = "=0.14.0-pre.9", features = ["ecdsa"] } +x509-cert = { version = "0.3.0-rc.1", features = ["builder"] } [features] default = ["http", "passwords", "setup"] @@ -83,9 +82,3 @@ required-features = ["http-server", "usb"] [patch.crates-io] ccm = { git = "https://github.com/RustCrypto/AEADs.git" } - -k256 = { git = "https://github.com/RustCrypto/elliptic-curves.git" } - -# https://github.com/dalek-cryptography/curve25519-dalek/pull/576 -curve25519-dalek = { git = "https://github.com/dalek-cryptography/curve25519-dalek.git", branch = "rustcrypto-new-releases" } -ed25519-dalek = { git = "https://github.com/dalek-cryptography/curve25519-dalek.git", branch = "rustcrypto-new-releases" } diff --git a/src/asymmetric/public_key.rs b/src/asymmetric/public_key.rs index c5c55be3..2f7ba170 100644 --- a/src/asymmetric/public_key.rs +++ b/src/asymmetric/public_key.rs @@ -9,8 +9,7 @@ use ::ecdsa::{ }, EcdsaCurve, }; -use num_traits::FromPrimitive; -use rsa::{BigUint, RsaPublicKey}; +use rsa::{BoxedUint, RsaPublicKey}; use serde::{Deserialize, Serialize}; /// Response from `command::get_public_key` @@ -91,8 +90,10 @@ impl PublicKey { const EXP: u64 = 65537; - let modulus = BigUint::from_bytes_be(&self.bytes); - let exp = BigUint::from_u64(EXP).expect("invalid static exponent"); + let modulus = + BoxedUint::from_be_slice(&self.bytes, u32::try_from(self.bytes.len() * 8).unwrap()) + .unwrap(); + let exp = BoxedUint::from(EXP); RsaPublicKey::new(modulus, exp).ok() } diff --git a/src/authentication/key.rs b/src/authentication/key.rs index 1fdcf87e..04aba098 100644 --- a/src/authentication/key.rs +++ b/src/authentication/key.rs @@ -1,7 +1,7 @@ //! `YubiHSM 2` authentication keys (2 * AES-128 symmetric PSK) from which session keys are derived use super::{Error, ErrorKind}; -use rand_core::{OsRng, RngCore}; +use rand_core::{OsRng, TryRngCore}; use std::fmt::{self, Debug}; use zeroize::Zeroize; @@ -35,7 +35,7 @@ impl Key { /// Generate a random `Key` using `OsRng`. pub fn random() -> Self { let mut challenge = [0u8; SIZE]; - OsRng.fill_bytes(&mut challenge); + OsRng.try_fill_bytes(&mut challenge).unwrap(); Key(challenge) } diff --git a/src/ecdsa/signer.rs b/src/ecdsa/signer.rs index cd616a67..84f06dbd 100644 --- a/src/ecdsa/signer.rs +++ b/src/ecdsa/signer.rs @@ -12,7 +12,7 @@ use ecdsa::{ sec1::{self, FromEncodedPoint, ToEncodedPoint}, AffinePoint, CurveArithmetic, FieldBytesSize, }, - hazmat::DigestPrimitive, + hazmat::DigestAlgorithm, EcdsaCurve, Signature, VerifyingKey, }; use signature::{digest::Digest, hazmat::PrehashSigner, DigestSigner, Error, KeypairRef}; @@ -25,7 +25,6 @@ use std::ops::Add; use super::{secp256k1::RecoveryId, Secp256k1}; /// ECDSA signature provider for yubihsm-client -#[derive(signature::Signer)] pub struct Signer where C: EcdsaCurve + CurveArithmetic, @@ -130,13 +129,13 @@ macro_rules! impl_signer { } } - impl DigestSigner<<$curve as DigestPrimitive>::Digest, Signature<$curve>> + impl DigestSigner<<$curve as DigestAlgorithm>::Digest, Signature<$curve>> for Signer<$curve> { /// Compute a fixed-sized ECDSA signature of the given digest fn try_sign_digest( &self, - digest: <$curve as DigestPrimitive>::Digest, + digest: <$curve as DigestAlgorithm>::Digest, ) -> Result, Error> { self.sign_prehash(&digest.finalize()) } @@ -171,27 +170,27 @@ impl PrehashSigner<(Signature, RecoveryId)> for Signer { } #[cfg(feature = "secp256k1")] -impl DigestSigner<::Digest, Signature> +impl DigestSigner<::Digest, Signature> for Signer { /// Compute a fixed-size secp256k1 ECDSA signature of the given digest fn try_sign_digest( &self, - digest: ::Digest, + digest: ::Digest, ) -> Result, Error> { self.sign_prehash(&digest.finalize()) } } #[cfg(feature = "secp256k1")] -impl DigestSigner<::Digest, (Signature, RecoveryId)> +impl DigestSigner<::Digest, (Signature, RecoveryId)> for Signer { /// Compute a fixed-size secp256k1 ECDSA signature of the given digest along with the recovery /// ID. fn try_sign_digest( &self, - digest: ::Digest, + digest: ::Digest, ) -> Result<(Signature, RecoveryId), Error> { self.sign_prehash(&digest.finalize()) } @@ -200,7 +199,7 @@ impl DigestSigner<::Digest, (Signature, impl DigestSigner> for Signer where C: EcdsaCurve + CurveArithmetic, - C: DigestPrimitive, + C: DigestAlgorithm, AffinePoint: FromEncodedPoint + ToEncodedPoint, FieldBytesSize: sec1::ModulusSize, der::MaxSize: ArraySize, @@ -224,3 +223,15 @@ where const SIGNATURE_ALGORITHM_IDENTIFIER: AlgorithmIdentifier = as SignatureAlgorithmIdentifier>::SIGNATURE_ALGORITHM_IDENTIFIER; } + +impl ::signature::Signer for Signer +where + C: EcdsaCurve + CurveArithmetic, + FieldBytesSize: sec1::ModulusSize, + S: signature::PrehashSignature, + Self: DigestSigner, +{ + fn try_sign(&self, msg: &[u8]) -> signature::Result { + self.try_sign_digest(S::Digest::new_with_prefix(msg)) + } +} diff --git a/src/mockhsm/command.rs b/src/mockhsm/command.rs index c7b3f849..f8296ade 100644 --- a/src/mockhsm/command.rs +++ b/src/mockhsm/command.rs @@ -35,7 +35,7 @@ use digest::{ array::Array, const_oid::AssociatedOid, crypto_common::OutputSizeUser, typenum::Unsigned, Digest, FixedOutput, FixedOutputReset, KeyInit, Output, Reset, }; -use rand_core::{OsRng, RngCore}; +use rand_core::{OsRng, TryRngCore}; use sha1::Sha1; use sha2::{Sha256, Sha384, Sha512}; use signature::{ @@ -385,7 +385,7 @@ fn get_pseudo_random(_state: &State, cmd_data: &[u8]) -> response::Message { .unwrap_or_else(|e| panic!("error parsing Code::GetPseudoRandom: {e:?}")); let mut bytes = vec![0u8; command.bytes as usize]; - OsRng.fill_bytes(&mut bytes); + OsRng.try_fill_bytes(&mut bytes).unwrap(); GetPseudoRandomResponse { bytes }.serialize() } diff --git a/src/mockhsm/object/objects.rs b/src/mockhsm/object/objects.rs index a54c8cef..70518d4f 100644 --- a/src/mockhsm/object/objects.rs +++ b/src/mockhsm/object/objects.rs @@ -9,7 +9,7 @@ use crate::{ wrap, Algorithm, Capability, Domain, }; use aes::cipher::consts::{U13, U16}; -use ccm::aead::{AeadInPlace, KeyInit}; +use ccm::aead::{AeadInOut, KeyInit}; use std::collections::{btree_map::Iter as MapIter, BTreeMap as Map}; /// AES-CCM with a 128-bit key diff --git a/src/mockhsm/object/payload.rs b/src/mockhsm/object/payload.rs index 8ebe2f67..b674c10e 100644 --- a/src/mockhsm/object/payload.rs +++ b/src/mockhsm/object/payload.rs @@ -5,12 +5,11 @@ use crate::{algorithm::Algorithm, asymmetric, authentication, hmac, opaque, wrap use digest::{typenum::Unsigned, OutputSizeUser}; use ecdsa::{ elliptic_curve::{sec1::ToEncodedPoint, FieldBytesSize}, - hazmat::DigestPrimitive, + hazmat::DigestAlgorithm, }; use ed25519_dalek as ed25519; -use num_traits::cast::FromPrimitive; -use rand_core::{OsRng, RngCore}; -use rsa::{traits::PublicKeyParts, BigUint}; +use rand_core::{OsRng, TryRngCore}; +use rsa::{traits::PublicKeyParts, BoxedUint}; /// Loaded instances of a cryptographic primitives in the MockHsm #[derive(Debug)] @@ -77,9 +76,14 @@ impl Payload { | asymmetric::Algorithm::Rsa3072 | asymmetric::Algorithm::Rsa4096 => { assert_eq!(data.len(), asymmetric_alg.key_len()); - let exp = BigUint::from_u64(65537).expect("invalid static exponent"); - let p = BigUint::from_bytes_be(&data[..asymmetric_alg.key_len() / 2]); - let q = BigUint::from_bytes_be(&data[asymmetric_alg.key_len() / 2..]); + let exp = BoxedUint::from(65537u64); + let precision = u32::try_from(asymmetric_alg.key_len() * 4).unwrap(); + let p = + BoxedUint::from_be_slice(&data[..asymmetric_alg.key_len() / 2], precision) + .unwrap(); + let q = + BoxedUint::from_be_slice(&data[asymmetric_alg.key_len() / 2..], precision) + .unwrap(); let key = rsa::RsaPrivateKey::from_p_q(p, q, exp).unwrap(); Payload::RsaKey(key) @@ -100,8 +104,8 @@ impl Payload { /// Generate a new key with the given algorithm pub fn generate(algorithm: Algorithm) -> Self { fn gen_rsa(len: usize) -> Payload { - let private_key = - rsa::RsaPrivateKey::new(&mut OsRng, len).expect("failed to generate a key"); + let private_key = rsa::RsaPrivateKey::new(&mut OsRng.unwrap_err(), len) + .expect("failed to generate a key"); Payload::RsaKey(private_key) } @@ -109,25 +113,25 @@ impl Payload { match algorithm { Algorithm::Wrap(wrap_alg) => { let mut bytes = vec![0u8; wrap_alg.key_len()]; - OsRng.fill_bytes(&mut bytes); + OsRng.try_fill_bytes(&mut bytes).unwrap(); Payload::WrapKey(wrap_alg, bytes) } Algorithm::Asymmetric(asymmetric_alg) => match asymmetric_alg { asymmetric::Algorithm::EcP256 => { - Payload::EcdsaNistP256(p256::SecretKey::random(&mut OsRng)) + Payload::EcdsaNistP256(p256::SecretKey::random(&mut OsRng.unwrap_err())) } asymmetric::Algorithm::EcK256 => { - Payload::EcdsaSecp256k1(k256::SecretKey::random(&mut OsRng)) + Payload::EcdsaSecp256k1(k256::SecretKey::random(&mut OsRng.unwrap_err())) } asymmetric::Algorithm::EcP384 => { - Payload::EcdsaNistP384(p384::SecretKey::random(&mut OsRng)) + Payload::EcdsaNistP384(p384::SecretKey::random(&mut OsRng.unwrap_err())) } asymmetric::Algorithm::EcP521 => { - Payload::EcdsaNistP521(p521::SecretKey::random(&mut OsRng)) + Payload::EcdsaNistP521(p521::SecretKey::random(&mut OsRng.unwrap_err())) } asymmetric::Algorithm::Ed25519 => { - Payload::Ed25519Key(ed25519::SigningKey::generate(&mut OsRng)) + Payload::Ed25519Key(ed25519::SigningKey::generate(&mut OsRng.unwrap_err())) } asymmetric::Algorithm::Rsa2048 => gen_rsa(2048), asymmetric::Algorithm::Rsa3072 => gen_rsa(3072), @@ -138,7 +142,7 @@ impl Payload { }, Algorithm::Hmac(hmac_alg) => { let mut bytes = vec![0u8; hmac_alg.key_len()]; - OsRng.fill_bytes(&mut bytes); + OsRng.try_fill_bytes(&mut bytes).unwrap(); Payload::HmacKey(hmac_alg, bytes) } _ => panic!("MockHsm does not support generating {algorithm:?} objects"), @@ -173,13 +177,13 @@ impl Payload { let l = match self { Payload::AuthenticationKey(_) => authentication::key::SIZE, Payload::EcdsaNistP256(_) | Payload::EcdsaSecp256k1(_) => { - <::Digest as OutputSizeUser>::OutputSize::USIZE + <::Digest as OutputSizeUser>::OutputSize::USIZE } Payload::EcdsaNistP384(_) => { - <::Digest as OutputSizeUser>::OutputSize::USIZE + <::Digest as OutputSizeUser>::OutputSize::USIZE } Payload::EcdsaNistP521(_) => { - <::Digest as OutputSizeUser>::OutputSize::USIZE + <::Digest as OutputSizeUser>::OutputSize::USIZE } Payload::Ed25519Key(_) => ed25519::SECRET_KEY_LENGTH, Payload::RsaKey(k) => k.size(), @@ -207,7 +211,7 @@ impl Payload { } Payload::Ed25519Key(signing_key) => Some(signing_key.verifying_key().to_bytes().into()), - Payload::RsaKey(private_key) => Some(private_key.n().to_bytes_be()), + Payload::RsaKey(private_key) => Some(private_key.n().to_be_bytes().to_vec()), _ => None, } } @@ -236,26 +240,25 @@ impl Payload { { let primes = k.primes(); // p - out.extend_from_slice(&primes[0].to_bytes_be()); + out.extend_from_slice(&primes[0].to_be_bytes()); // q - out.extend_from_slice(&primes[1].to_bytes_be()); + out.extend_from_slice(&primes[1].to_be_bytes()); } // dp if let Some(dp) = k.dp() { - out.extend_from_slice(&dp.to_bytes_be()) + out.extend_from_slice(&dp.to_be_bytes()) } // dq if let Some(dq) = k.dq() { - out.extend_from_slice(&dq.to_bytes_be()) + out.extend_from_slice(&dq.to_be_bytes()) } // qinv - // Note(baloo): The sign is just dropped here. if let Some(qinv) = k.qinv() { - out.extend_from_slice(&qinv.to_bytes_be().1) + out.extend_from_slice(&qinv.retrieve().to_be_bytes()) } // n - out.extend_from_slice(&k.n().to_bytes_be()); + out.extend_from_slice(&k.n().to_be_bytes()); out } diff --git a/src/session/securechannel/challenge.rs b/src/session/securechannel/challenge.rs index dbecfd7e..e5385014 100644 --- a/src/session/securechannel/challenge.rs +++ b/src/session/securechannel/challenge.rs @@ -1,6 +1,6 @@ //! Challenge messages used as part of SCP03's challenge/response protocol. -use rand_core::{OsRng, RngCore}; +use rand_core::{OsRng, TryRngCore}; use serde::{Deserialize, Serialize}; /// Size of a challenge message @@ -14,7 +14,7 @@ impl Challenge { /// Create a new random `Challenge` pub fn new() -> Self { let mut challenge = [0u8; CHALLENGE_SIZE]; - OsRng.fill_bytes(&mut challenge); + OsRng.try_fill_bytes(&mut challenge).unwrap(); Challenge(challenge) } diff --git a/src/uuid.rs b/src/uuid.rs index 62c58ffb..93ea6d09 100644 --- a/src/uuid.rs +++ b/src/uuid.rs @@ -1,12 +1,12 @@ //! UUID functionality -use rand_core::{OsRng, RngCore}; +use rand_core::{OsRng, TryRngCore}; use uuid::Builder; pub use uuid::Uuid; /// Create a random UUID pub fn new_v4() -> Uuid { let mut bytes = [0; 16]; - OsRng.fill_bytes(&mut bytes); + OsRng.try_fill_bytes(&mut bytes).unwrap(); Builder::from_random_bytes(bytes).into_uuid() } diff --git a/src/wrap/key.rs b/src/wrap/key.rs index 633c589d..871b0642 100644 --- a/src/wrap/key.rs +++ b/src/wrap/key.rs @@ -9,10 +9,11 @@ use crate::{client, device, object, wrap, Capability, Client, Domain}; use aes::{Aes128, Aes192, Aes256}; use ccm::{ - consts::{U0, U13, U16}, - AeadCore, AeadInPlace, Ccm, KeyInit, + aead::{inout::InOutBuf, TagPosition}, + consts::{U13, U16}, + AeadCore, AeadInOut, Ccm, KeyInit, }; -use rand_core::{OsRng, RngCore}; +use rand_core::{OsRng, TryRngCore}; use std::fmt::{self, Debug}; use zeroize::{Zeroize, Zeroizing}; @@ -46,39 +47,39 @@ impl From<&Key> for AesCcm { impl AeadCore for AesCcm { type NonceSize = U13; type TagSize = U16; - type CiphertextOverhead = U0; + const TAG_POSITION: TagPosition = TagPosition::Postfix; } -impl AeadInPlace for AesCcm { - fn encrypt_in_place_detached( +impl AeadInOut for AesCcm { + fn encrypt_inout_detached( &self, nonce: &ccm::Nonce, associated_data: &[u8], - buffer: &mut [u8], + buffer: InOutBuf<'_, '_, u8>, ) -> Result, ccm::Error> { match self { - Self::Aes128(inner) => inner.encrypt_in_place_detached(nonce, associated_data, buffer), - Self::Aes192(inner) => inner.encrypt_in_place_detached(nonce, associated_data, buffer), - Self::Aes256(inner) => inner.encrypt_in_place_detached(nonce, associated_data, buffer), + Self::Aes128(inner) => inner.encrypt_inout_detached(nonce, associated_data, buffer), + Self::Aes192(inner) => inner.encrypt_inout_detached(nonce, associated_data, buffer), + Self::Aes256(inner) => inner.encrypt_inout_detached(nonce, associated_data, buffer), } } - fn decrypt_in_place_detached( + fn decrypt_inout_detached( &self, nonce: &ccm::Nonce, associated_data: &[u8], - buffer: &mut [u8], + buffer: InOutBuf<'_, '_, u8>, tag: &ccm::Tag, ) -> Result<(), ccm::Error> { match self { Self::Aes128(inner) => { - inner.decrypt_in_place_detached(nonce, associated_data, buffer, tag) + inner.decrypt_inout_detached(nonce, associated_data, buffer, tag) } Self::Aes192(inner) => { - inner.decrypt_in_place_detached(nonce, associated_data, buffer, tag) + inner.decrypt_inout_detached(nonce, associated_data, buffer, tag) } Self::Aes256(inner) => { - inner.decrypt_in_place_detached(nonce, associated_data, buffer, tag) + inner.decrypt_inout_detached(nonce, associated_data, buffer, tag) } } } @@ -101,7 +102,7 @@ impl Key { /// Generate a random wrap key with the given key size. pub fn generate_random(key_id: object::Id, algorithm: wrap::Algorithm) -> Self { let mut bytes = Zeroizing::new(vec![0u8; algorithm.key_len()]); - OsRng.fill_bytes(&mut bytes); + OsRng.try_fill_bytes(&mut bytes).unwrap(); Self::from_bytes(key_id, &bytes).unwrap() } diff --git a/src/wrap/message.rs b/src/wrap/message.rs index a6415b9f..d06c82bf 100644 --- a/src/wrap/message.rs +++ b/src/wrap/message.rs @@ -18,10 +18,9 @@ use ecdsa::{ }, PrimeCurve, }; -use num_traits::cast::FromPrimitive; use rsa::{ traits::{PrivateKeyParts, PublicKeyParts}, - BigUint, RsaPrivateKey, + BoxedUint, RsaPrivateKey, }; use serde::{Deserialize, Serialize}; @@ -191,17 +190,20 @@ impl Plaintext { algorithm::Algorithm::Asymmetric(asymmetric::Algorithm::Rsa4096) => (256, 512), _ => return None, }; + let precision = u32::try_from(component_size * 8).expect("Invalid static component size"); + let modulus_precision = + u32::try_from(modulus_size * 8).expect("Invalid static component size"); let mut reader = SliceReader(&self.data); - let p = BigUint::from_bytes_be(reader.read(component_size)?); - let q = BigUint::from_bytes_be(reader.read(component_size)?); - let _dp = BigUint::from_bytes_be(reader.read(component_size)?); - let _dq = BigUint::from_bytes_be(reader.read(component_size)?); - let _qinv = BigUint::from_bytes_be(reader.read(component_size)?); - let _n = BigUint::from_bytes_be(reader.read(modulus_size)?); + let p = BoxedUint::from_be_slice(reader.read(component_size)?, precision).ok()?; + let q = BoxedUint::from_be_slice(reader.read(component_size)?, precision).ok()?; + let _dp = BoxedUint::from_be_slice(reader.read(component_size)?, precision).ok()?; + let _dq = BoxedUint::from_be_slice(reader.read(component_size)?, precision).ok()?; + let _qinv = BoxedUint::from_be_slice(reader.read(component_size)?, precision).ok()?; + let _n = BoxedUint::from_be_slice(reader.read(modulus_size)?, modulus_precision).ok()?; const EXP: u64 = 65537; - let e = BigUint::from_u64(EXP).expect("invalid static exponent"); + let e = BoxedUint::from(EXP); let private_key = RsaPrivateKey::from_p_q(p, q, e).ok()?; @@ -253,14 +255,14 @@ impl Plaintext { let q = &primes[1]; let mut data = Vec::new(); - data.extend_from_slice(&p.to_bytes_be()); - data.extend_from_slice(&q.to_bytes_be()); + data.extend_from_slice(&p.to_be_bytes()); + data.extend_from_slice(&q.to_be_bytes()); // Unwrap here is okay, we have ownership of the key and we already precomputed the values. - data.extend_from_slice(&key.dp().unwrap().to_bytes_be()); - data.extend_from_slice(&key.dq().unwrap().to_bytes_be()); + data.extend_from_slice(&key.dp().unwrap().to_be_bytes()); + data.extend_from_slice(&key.dq().unwrap().to_be_bytes()); // TODO: the second unwrap for int -> uint conversion is unfortunate. - data.extend_from_slice(&key.qinv().unwrap().to_biguint().unwrap().to_bytes_be()); - data.extend_from_slice(&key.n().to_bytes_be()); + data.extend_from_slice(&key.qinv().unwrap().retrieve().to_be_bytes()); + data.extend_from_slice(&key.n().to_be_bytes()); object_info.length = data.len() as u16; diff --git a/src/wrap/nonce.rs b/src/wrap/nonce.rs index a7c4f3e1..fff79b77 100644 --- a/src/wrap/nonce.rs +++ b/src/wrap/nonce.rs @@ -1,7 +1,7 @@ //! Nonces used by the YubiHSM 2's AES-CCM encrypted `wrap::Message` use ccm::consts::U13; -use rand_core::{OsRng, RngCore}; +use rand_core::{OsRng, TryRngCore}; /// Number of bytes in a nonce used for "wrapping" (i.e AES-CCM encryption) pub const SIZE: usize = 13; @@ -14,7 +14,7 @@ impl Nonce { /// Generate a random `wrap::Nonce` pub fn generate() -> Self { let mut bytes = [0u8; SIZE]; - OsRng.fill_bytes(&mut bytes); + OsRng.try_fill_bytes(&mut bytes).unwrap(); Nonce(bytes) } diff --git a/tests/command/decrypt_oaep.rs b/tests/command/decrypt_oaep.rs index d279565f..be1ff8fa 100644 --- a/tests/command/decrypt_oaep.rs +++ b/tests/command/decrypt_oaep.rs @@ -1,5 +1,5 @@ use crate::{generate_asymmetric_key, TEST_KEY_ID}; -use rand_core; +use rand_core::{OsRng, TryRngCore}; use sha2::{self, Digest}; use yubihsm::{asymmetric, Capability}; @@ -23,11 +23,13 @@ fn rsa_decrypt_oaep_test() { let plaintext = b"Secret message!"; - let rsa_modulus = rsa::BigUint::from_bytes_be(raw_public_key.as_slice()); - let rsa_exponent = rsa::BigUint::parse_bytes(b"65537", 10).unwrap(); + let bytes = raw_public_key.as_slice(); + let precision = u32::try_from(raw_public_key.as_slice().len() * 8).unwrap(); + let rsa_modulus = rsa::BoxedUint::from_be_slice(bytes, precision).unwrap(); + let rsa_exponent = rsa::BoxedUint::from(65537u32); let rsa_public_key = rsa::RsaPublicKey::new(rsa_modulus, rsa_exponent).unwrap(); - let mut rng = rand_core::OsRng; + let mut rng = OsRng.unwrap_err(); let ciphertext = rsa_public_key .encrypt(&mut rng, rsa::Oaep::new::(), plaintext) .expect("Failed to encrypt"); diff --git a/tests/rsa/mod.rs b/tests/rsa/mod.rs index 3a2e9749..d2e5bdb1 100644 --- a/tests/rsa/mod.rs +++ b/tests/rsa/mod.rs @@ -36,8 +36,8 @@ fn rsa_put_asymmetric_key() { let primes = key.primes(); let mut bytes = Vec::new(); - bytes.extend_from_slice(&primes[0].to_bytes_be()); - bytes.extend_from_slice(&primes[1].to_bytes_be()); + bytes.extend_from_slice(&primes[0].to_be_bytes()); + bytes.extend_from_slice(&primes[1].to_be_bytes()); let client = crate::get_hsm_client(); let _ = client.delete_object(223, object::Type::AsymmetricKey);