bump dependencies to latest rc, bump MSRV to 1.85 (#612)

This commit is contained in:
Arthur Gautier
2025-07-21 14:49:31 -07:00
committed by GitHub
parent 0d8096f50d
commit f0dbf9425c
12 changed files with 284 additions and 269 deletions
+4 -4
View File
@@ -36,13 +36,13 @@ jobs:
toolchain: stable toolchain: stable
deps: true deps: true
- platform: ubuntu-latest - platform: ubuntu-latest
toolchain: 1.81.0 # MSRV toolchain: 1.85.0 # MSRV
deps: sudo apt-get install libpcsclite-dev deps: sudo apt-get install libpcsclite-dev
- platform: windows-latest - platform: windows-latest
toolchain: 1.81.0 # MSRV toolchain: 1.85.0 # MSRV
deps: true deps: true
- platform: macos-latest - platform: macos-latest
toolchain: 1.81.0 # MSRV toolchain: 1.85.0 # MSRV
deps: true deps: true
runs-on: ${{ matrix.platform }} runs-on: ${{ matrix.platform }}
steps: steps:
@@ -82,7 +82,7 @@ jobs:
- uses: actions-rs/toolchain@v1 - uses: actions-rs/toolchain@v1
with: with:
profile: minimal profile: minimal
toolchain: 1.81.0 # MSRV toolchain: 1.85.0 # MSRV
components: clippy components: clippy
override: true override: true
- run: sudo apt-get install libpcsclite-dev - run: sudo apt-get install libpcsclite-dev
Generated
+191 -189
View File
@@ -60,15 +60,6 @@ dependencies = [
"windows-sys 0.59.0", "windows-sys 0.59.0",
] ]
[[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]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.1.0" version = "1.1.0"
@@ -101,19 +92,13 @@ checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
[[package]] [[package]]
name = "block-buffer" 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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fd016a0ddc7cb13661bf5576073ce07330a693f8608a1320b4e20561cc12cdc" checksum = "a229bfd78e4827c91b9b95784f69492c1b77c1ab75a45a8a037b139215086f94"
dependencies = [ dependencies = [
"hybrid-array", "hybrid-array",
] ]
[[package]]
name = "byteorder"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "1.0.0" version = "1.0.0"
@@ -122,9 +107,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "cipher" name = "cipher"
version = "0.5.0-pre.7" version = "0.5.0-rc.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b1425e6ce000f05a73096556cabcfb6a10a3ffe3bb4d75416ca8f00819c0b6a" checksum = "bd4ef774202f1749465fc7cf88d70fc30620e8cacd5429268f4bff7d003bd976"
dependencies = [ dependencies = [
"crypto-common", "crypto-common",
"inout", "inout",
@@ -178,9 +163,9 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]] [[package]]
name = "const-oid" name = "const-oid"
version = "0.10.0-rc.3" version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68ff6be19477a1bd5441f382916a89bc2a0b2c35db6d41e0f6e8538bf6d6463f" checksum = "0dabb6555f92fb9ee4140454eb5dcd14c7960e1225c6d1a6cc361f032947713e"
[[package]] [[package]]
name = "cpufeatures" name = "cpufeatures"
@@ -193,33 +178,43 @@ dependencies = [
[[package]] [[package]]
name = "crypto-bigint" name = "crypto-bigint"
version = "0.6.0-rc.6" version = "0.7.0-pre.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d748d1f5b807ee6d0df5a548d0130417295c3aaed1dcbbb3d6a2e7106e11fcca" checksum = "98dc20cae677f0af161d98f18463804b680f9af060f6dbe6d4249bd7e838bca1"
dependencies = [ dependencies = [
"hybrid-array", "hybrid-array",
"num-traits", "num-traits",
"rand_core", "rand_core",
"serdect",
"subtle", "subtle",
"zeroize", "zeroize",
] ]
[[package]] [[package]]
name = "crypto-common" 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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0b8ce8218c97789f16356e7896b3714f26c2ee1079b79c0b7ae7064bb9089fa" checksum = "8a23fa214dea9efd4dacee5a5614646b30216ae0f05d4bb51bafb50e9da1c5be"
dependencies = [ dependencies = [
"getrandom",
"hybrid-array", "hybrid-array",
]
[[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", "rand_core",
] ]
[[package]] [[package]]
name = "der" name = "der"
version = "0.8.0-rc.1" version = "0.8.0-rc.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82db698b33305f0134faf590b9d1259dc171b5481ac41d5c8146c3b3ee7d4319" checksum = "e2fe0a4fafae25053c19a03fefe040607bda956b4941d692ed9fb9d3c18a3193"
dependencies = [ dependencies = [
"const-oid", "const-oid",
"der_derive", "der_derive",
@@ -230,9 +225,9 @@ dependencies = [
[[package]] [[package]]
name = "der_derive" 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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "211bea8bb45f5f61bc857104606913ef8ac8b5ec698143aa2aa96a7ffdc94991" checksum = "d184a65ac0a9db9e66e0d629bea86d0402198b2a5cc01c9c16de7a6537f0ac4f"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -241,18 +236,18 @@ dependencies = [
[[package]] [[package]]
name = "des" name = "des"
version = "0.9.0-pre.2" version = "0.9.0-rc.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76239c731adb4b5204cfeec47bd06ec1071d9477a0d32bbb83dc7d8c599efe63" checksum = "8025983b9f9f242e94d459a57b81c571e92e4e1717ca57d092d8a69fc539efa1"
dependencies = [ dependencies = [
"cipher", "cipher",
] ]
[[package]] [[package]]
name = "digest" name = "digest"
version = "0.11.0-pre.9" version = "0.11.0-rc.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf2e3d6615d99707295a9673e889bf363a04b2a466bd320c65a72536f7577379" checksum = "460dd7f37e4950526b54a5a6b1f41b6c8e763c58eb9a8fc8fc05ba5c2f44ca7b"
dependencies = [ dependencies = [
"block-buffer", "block-buffer",
"const-oid", "const-oid",
@@ -262,9 +257,9 @@ dependencies = [
[[package]] [[package]]
name = "ecdsa" name = "ecdsa"
version = "0.17.0-pre.9" version = "0.17.0-rc.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e62f2041a28c40b8884b79fbd19bc7457d76c6397767831e9ff4029fc0473a9" checksum = "112839e868b3376c2066506d42331023165d687a7ed38b2ed77f28763d9a7742"
dependencies = [ dependencies = [
"der", "der",
"digest", "digest",
@@ -272,20 +267,20 @@ dependencies = [
"rfc6979", "rfc6979",
"signature", "signature",
"spki", "spki",
"zeroize",
] ]
[[package]] [[package]]
name = "elliptic-curve" 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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc43715037532dc2d061e5c97e81b684c28993d52a4fa4eb7d2ce2826d78f2f2" checksum = "c28ecec37eea07ab976cea93c7ce8b36d561cf161f6767925c1edc51024b0ad3"
dependencies = [ dependencies = [
"base16ct", "base16ct",
"crypto-bigint", "crypto-bigint",
"digest", "digest",
"ff", "ff",
"group", "group",
"hkdf",
"hybrid-array", "hybrid-array",
"pem-rfc7468", "pem-rfc7468",
"pkcs8", "pkcs8",
@@ -320,9 +315,9 @@ dependencies = [
[[package]] [[package]]
name = "ff" name = "ff"
version = "0.13.0" version = "0.14.0-pre.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" checksum = "d42dd26f5790eda47c1a2158ea4120e32c35ddc9a7743c98a292accc01b54ef3"
dependencies = [ dependencies = [
"rand_core", "rand_core",
"subtle", "subtle",
@@ -330,9 +325,9 @@ dependencies = [
[[package]] [[package]]
name = "flagset" name = "flagset"
version = "0.4.6" version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe"
[[package]] [[package]]
name = "getrandom" name = "getrandom"
@@ -342,14 +337,26 @@ checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"wasi", "wasi 0.11.0+wasi-snapshot-preview1",
]
[[package]]
name = "getrandom"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
dependencies = [
"cfg-if",
"libc",
"r-efi",
"wasi 0.14.2+wasi-0.2.4",
] ]
[[package]] [[package]]
name = "group" name = "group"
version = "0.13.0" version = "0.14.0-pre.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" checksum = "1ff6a0b2dd4b981b1ae9e3e6830ab146771f3660d31d57bafd9018805a91b0f1"
dependencies = [ dependencies = [
"ff", "ff",
"rand_core", "rand_core",
@@ -362,20 +369,11 @@ version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "hkdf"
version = "0.13.0-pre.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00176ff81091018d42ff82e8324f8e5adb0b7e0468d1358f653972562dbff031"
dependencies = [
"hmac",
]
[[package]] [[package]]
name = "hmac" name = "hmac"
version = "0.13.0-pre.4" version = "0.13.0-rc.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4b1fb14e4df79f9406b434b60acef9f45c26c50062cccf1346c6103b8c47d58" checksum = "8dc6a2fcc35ab09136c6df2cdf9ca49790701420a3a6b5db0987dddbabc79b21"
dependencies = [ dependencies = [
"digest", "digest",
] ]
@@ -388,9 +386,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]] [[package]]
name = "hybrid-array" name = "hybrid-array"
version = "0.2.1" version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45a9a965bb102c1c891fb017c09a05c965186b1265a207640f323ddd009f9deb" checksum = "891d15931895091dea5c47afa5b3c9a01ba634b311919fd4d41388fa0e3d76af"
dependencies = [ dependencies = [
"typenum", "typenum",
"zeroize", "zeroize",
@@ -398,9 +396,9 @@ dependencies = [
[[package]] [[package]]
name = "inout" name = "inout"
version = "0.2.0-rc.2" version = "0.2.0-rc.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14db49369b2c3f15deb5806de446e05c7f07a2d778b54b278c994fcd1d686f31" checksum = "c774c86bce20ea04abe1c37cf0051c5690079a3a28ef5fdac2a5a0412b3d7d74"
dependencies = [ dependencies = [
"hybrid-array", "hybrid-array",
] ]
@@ -411,26 +409,17 @@ version = "1.70.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
dependencies = [
"spin",
]
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.150" version = "0.2.172"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
[[package]] [[package]]
name = "libm" name = "libm"
version = "0.2.8" version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
[[package]] [[package]]
name = "log" name = "log"
@@ -460,45 +449,6 @@ dependencies = [
"minimal-lexical", "minimal-lexical",
] ]
[[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",
"serde",
"smallvec",
"zeroize",
]
[[package]]
name = "num-integer"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-iter"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]] [[package]]
name = "num-traits" name = "num-traits"
version = "0.2.19" version = "0.2.19"
@@ -506,7 +456,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"libm",
] ]
[[package]] [[package]]
@@ -517,33 +466,35 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]] [[package]]
name = "p256" name = "p256"
version = "0.14.0-pre.2" version = "0.14.0-pre.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71f3fd64a9cad9c26ed7f734b152196d5e56376b9957c832bcca0de48a708080" checksum = "1be97a30a85c829fdac914cebb89ef05e109f9e5eb6510f46f623be91bc39ded"
dependencies = [ dependencies = [
"ecdsa", "ecdsa",
"elliptic-curve", "elliptic-curve",
"primefield",
"primeorder", "primeorder",
"sha2", "sha2",
] ]
[[package]] [[package]]
name = "p384" name = "p384"
version = "0.14.0-pre.2" version = "0.14.0-pre.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e19554fe6ee269c860a0f231cbba714e5cbef26a927c75d8e30ac9040a4b32e" checksum = "ea9626bce3d0bf768a28778618e5095131cd32bfca5297b51bbcb4abe7fae62a"
dependencies = [ dependencies = [
"ecdsa", "ecdsa",
"elliptic-curve", "elliptic-curve",
"primefield",
"primeorder", "primeorder",
"sha2", "sha2",
] ]
[[package]] [[package]]
name = "pbkdf2" name = "pbkdf2"
version = "0.13.0-pre.1" version = "0.13.0-rc.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85e11753d5193f26dc27ae698e0b536b5e511b7799c5ac475ec10783f26d164a" checksum = "c2efb182a4d7d26aa7442a4ef2f91c5021c6abb61f9fdd251fcc2e327f5faaf6"
dependencies = [ dependencies = [
"digest", "digest",
"hmac", "hmac",
@@ -570,29 +521,28 @@ dependencies = [
[[package]] [[package]]
name = "pem-rfc7468" 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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2dfbfa5c6f0906884269722c5478e72fd4d6c0e24fe600332c6d62359567ce1" checksum = "a8e58fab693c712c0d4e88f8eb3087b6521d060bcaf76aeb20cb192d809115ba"
dependencies = [ dependencies = [
"base64ct", "base64ct",
] ]
[[package]] [[package]]
name = "pkcs1" name = "pkcs1"
version = "0.8.0-rc.1" version = "0.8.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "226eb25e2c46c166ce498ac0f606ac623142d640064879ff445938accddff1e2" checksum = "b2345503b65d9be13aac96ddbec3eed60def8bc83869f9a519789afbcf3c2bea"
dependencies = [ dependencies = [
"der", "der",
"pkcs8",
"spki", "spki",
] ]
[[package]] [[package]]
name = "pkcs8" name = "pkcs8"
version = "0.11.0-rc.1" version = "0.11.0-rc.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eacd2c7141f32aef1cfd1ad0defb5287a3d94592d7ab57c1ae20e3f9f1f0db1f" checksum = "c53e5d0804fa4070b1b2a5b320102f2c1c094920a7533d5d87c2630609bcbd34"
dependencies = [ dependencies = [
"der", "der",
"spki", "spki",
@@ -606,53 +556,74 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]] [[package]]
name = "ppv-lite86" name = "ppv-lite86"
version = "0.2.17" version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
"zerocopy",
]
[[package]]
name = "primefield"
version = "0.14.0-pre.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adc85f9f75dc05486f61bc61858535c0501a0ca81ca3117ab17befbead13c110"
dependencies = [
"crypto-bigint",
"ff",
"rand_core",
"subtle",
"zeroize",
]
[[package]] [[package]]
name = "primeorder" name = "primeorder"
version = "0.14.0-pre.2" version = "0.14.0-pre.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b794117b388378d55629f78f61e64e182baa200bf59c1a8205e0c46508ce5873" checksum = "af12dd34fc62d04416de85af032f4595369437fb7b0143d36ae60cecaf5cdddf"
dependencies = [ dependencies = [
"elliptic-curve", "elliptic-curve",
] ]
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.69" version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.33" version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "rand" name = "r-efi"
version = "0.8.5" version = "5.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
[[package]]
name = "rand"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
dependencies = [ dependencies = [
"libc",
"rand_chacha", "rand_chacha",
"rand_core", "rand_core",
] ]
[[package]] [[package]]
name = "rand_chacha" name = "rand_chacha"
version = "0.3.1" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
dependencies = [ dependencies = [
"ppv-lite86", "ppv-lite86",
"rand_core", "rand_core",
@@ -660,11 +631,11 @@ dependencies = [
[[package]] [[package]]
name = "rand_core" name = "rand_core"
version = "0.6.4" version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [ dependencies = [
"getrandom", "getrandom 0.3.3",
] ]
[[package]] [[package]]
@@ -698,9 +669,9 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]] [[package]]
name = "rfc6979" name = "rfc6979"
version = "0.5.0-pre.4" version = "0.5.0-rc.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "871ee76a3eee98b0f805e5d1caf26929f4565073c580c053a55f886fc15dea49" checksum = "f53f124bf3ec90be84ae97d7f52175ba938898525554c13c9017eb8f0a604146"
dependencies = [ dependencies = [
"hmac", "hmac",
"subtle", "subtle",
@@ -708,15 +679,14 @@ dependencies = [
[[package]] [[package]]
name = "rsa" name = "rsa"
version = "0.10.0-pre.3" version = "0.10.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07058e83b684989ab0559f9e22322f4e3f7e49147834ed0bae40486b9e70473c" checksum = "7e8cb237ca3624409eda7d73de0d423815c9d91175ed5a62a8dd6549d2408cc2"
dependencies = [ dependencies = [
"const-oid", "const-oid",
"crypto-bigint",
"crypto-primes",
"digest", "digest",
"num-bigint-dig",
"num-integer",
"num-traits",
"pkcs1", "pkcs1",
"pkcs8", "pkcs8",
"rand_core", "rand_core",
@@ -729,14 +699,13 @@ dependencies = [
[[package]] [[package]]
name = "sec1" name = "sec1"
version = "0.8.0-rc.3" version = "0.8.0-rc.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1988446eff153796413a73669dfaa4caa3f5ce8b25fac89e3821a39c611772e" checksum = "c54dee398d74b1d03d78ddc09c90e456bf906b5b7aa790ba4f48b025b2179e5d"
dependencies = [ dependencies = [
"base16ct", "base16ct",
"der", "der",
"hybrid-array", "hybrid-array",
"pkcs8",
"subtle", "subtle",
"zeroize", "zeroize",
] ]
@@ -771,10 +740,20 @@ dependencies = [
] ]
[[package]] [[package]]
name = "sha1" name = "serdect"
version = "0.11.0-pre.4" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9540978cef7a8498211c1b1c14e5ce920fe5bd524ea84f4a3d72d4602515ae93" checksum = "f42f67da2385b51a5f9652db9c93d78aeaf7610bf5ec366080b6de810604af53"
dependencies = [
"base16ct",
"serde",
]
[[package]]
name = "sha1"
version = "0.11.0-rc.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f9318facddf9ac32a33527066936837e189b3f23ced6edc1603720ead5e2b3d"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"cpufeatures", "cpufeatures",
@@ -783,9 +762,9 @@ dependencies = [
[[package]] [[package]]
name = "sha2" name = "sha2"
version = "0.11.0-pre.4" version = "0.11.0-rc.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "540c0893cce56cdbcfebcec191ec8e0f470dd1889b6e7a0b503e310a94a168f5" checksum = "aa1d2e6b3cc4e43a8258a9a3b17aa5dfd2cc5186c7024bba8a64aa65b2c71a59"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"cpufeatures", "cpufeatures",
@@ -794,31 +773,19 @@ dependencies = [
[[package]] [[package]]
name = "signature" name = "signature"
version = "2.3.0-pre.4" version = "3.0.0-rc.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "054d71959c7051b9042c26af337f05cc930575ed2604d7d3ced3158383e59734" checksum = "4835c3b5ecb10171941a4998a95a3a76ecac1c5ae8e6954f2ad030acd1c7e8ab"
dependencies = [ dependencies = [
"digest", "digest",
"rand_core", "rand_core",
] ]
[[package]]
name = "smallvec"
version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
[[package]]
name = "spin"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]] [[package]]
name = "spki" name = "spki"
version = "0.8.0-rc.1" version = "0.8.0-rc.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37ac66481418fd7afdc584adcf3be9aa572cf6c2858814494dc2a01755f050bc" checksum = "8baeff88f34ed0691978ec34440140e1572b68c7dd4a495fd14a3dc1944daa80"
dependencies = [ dependencies = [
"base64ct", "base64ct",
"der", "der",
@@ -838,9 +805,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.39" version = "2.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -858,9 +825,9 @@ dependencies = [
[[package]] [[package]]
name = "tls_codec" name = "tls_codec"
version = "0.4.1" version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e78c9c330f8c85b2bae7c8368f2739157db9991235123aa1b15ef9502bfb6a" checksum = "0de2e01245e2bb89d6f05801c564fa27624dbd7b1846859876c7dad82e90bf6b"
dependencies = [ dependencies = [
"tls_codec_derive", "tls_codec_derive",
"zeroize", "zeroize",
@@ -868,9 +835,9 @@ dependencies = [
[[package]] [[package]]
name = "tls_codec_derive" name = "tls_codec_derive"
version = "0.4.1" version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d9ef545650e79f30233c0003bcc2504d7efac6dad25fca40744de773fe2049c" checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -901,7 +868,7 @@ version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
dependencies = [ dependencies = [
"getrandom", "getrandom 0.2.11",
] ]
[[package]] [[package]]
@@ -910,6 +877,15 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasi"
version = "0.14.2+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
dependencies = [
"wit-bindgen-rt",
]
[[package]] [[package]]
name = "winapi" name = "winapi"
version = "0.3.9" version = "0.3.9"
@@ -1081,12 +1057,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]] [[package]]
name = "x509-cert" name = "wit-bindgen-rt"
version = "0.3.0-pre.0" version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2db382aa43c1fb5c419a960f72c3847ab0f383f635fc2e25f0bd6c5fb94371d1" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
dependencies = [
"bitflags 2.5.0",
]
[[package]]
name = "x509-cert"
version = "0.3.0-rc.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "015655a524ab1db259a56aaaec614cf84952299f4081c2602881d556e2ed2838"
dependencies = [ dependencies = [
"async-signature",
"const-oid", "const-oid",
"der", "der",
"sha1", "sha1",
@@ -1108,14 +1092,12 @@ dependencies = [
"env_logger", "env_logger",
"log", "log",
"nom", "nom",
"num-bigint-dig",
"num-integer",
"num-traits",
"once_cell", "once_cell",
"p256", "p256",
"p384", "p384",
"pbkdf2", "pbkdf2",
"pcsc", "pcsc",
"rand",
"rand_core", "rand_core",
"rsa", "rsa",
"secrecy", "secrecy",
@@ -1143,6 +1125,26 @@ dependencies = [
"yubikey", "yubikey",
] ]
[[package]]
name = "zerocopy"
version = "0.8.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.8.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "zeroize" name = "zeroize"
version = "1.8.1" version = "1.8.1"
+15 -17
View File
@@ -14,37 +14,35 @@ readme = "README.md"
categories = ["api-bindings", "authentication", "cryptography", "hardware-support"] categories = ["api-bindings", "authentication", "cryptography", "hardware-support"]
keywords = ["ecdsa", "encryption", "rsa", "piv", "signature"] keywords = ["ecdsa", "encryption", "rsa", "piv", "signature"]
edition = "2021" edition = "2021"
rust-version = "1.81" rust-version = "1.85"
[workspace] [workspace]
members = [".", "cli"] members = [".", "cli"]
[workspace.dependencies] [workspace.dependencies]
sha2 = "=0.11.0-pre.4" sha2 = "0.11.0-rc.0"
x509-cert = { version = "=0.3.0-pre.0", features = [ "builder", "hazmat" ] } x509-cert = { version = "0.3.0-rc.1", features = [ "builder", "hazmat" ] }
[dependencies] [dependencies]
bitflags = "2.5.0" bitflags = "2.5.0"
der = "=0.8.0-rc.1" der = "0.8.0-rc.7"
des = "=0.9.0-pre.2" des = "0.9.0-rc.0"
elliptic-curve = "=0.14.0-rc.1" elliptic-curve = "0.14.0-rc.7"
hex = { package = "base16ct", version = "0.2", features = ["alloc"] } hex = { package = "base16ct", version = "0.2", features = ["alloc"] }
log = "0.4" log = "0.4"
nom = "7" nom = "7"
num-bigint-dig = { version = "0.8", features = ["rand"] } ecdsa = { version = "0.17.0-rc.2", features = ["digest", "pem"] }
num-traits = "0.2" p256 = "=0.14.0-pre.9"
num-integer = "0.1" p384 = "=0.14.0-pre.9"
ecdsa = { version = "=0.17.0-pre.9", features = ["digest", "pem"] } pbkdf2 = { version = "0.13.0-rc.0", default-features = false, features = ["hmac"] }
p256 = "=0.14.0-pre.2"
p384 = "=0.14.0-pre.2"
pbkdf2 = { version = "=0.13.0-pre.1", default-features = false, features = ["hmac"] }
pcsc = "2.3.1" pcsc = "2.3.1"
rand_core = { version = "0.6", features = ["std"] } rand = "0.9"
rsa = { version = "=0.10.0-pre.3", features = ["sha2"] } rand_core = { version = "0.9", features = ["os_rng"] }
rsa = { version = "0.10.0-rc.3", features = ["sha2"] }
secrecy = "0.8" secrecy = "0.8"
sha1 = { version = "=0.11.0-pre.4", features = ["oid"] } sha1 = { version = "0.11.0-rc.0", features = ["oid"] }
sha2 = { workspace = true, features = ["oid"] } sha2 = { workspace = true, features = ["oid"] }
signature = "=2.3.0-pre.4" signature = "3.0.0-rc.0"
subtle = "2" subtle = "2"
uuid = { version = "1.2", features = ["v4"] } uuid = { version = "1.2", features = ["v4"] }
x509-cert.workspace = true x509-cert.workspace = true
+1 -1
View File
@@ -344,7 +344,7 @@ impl From<Vec<u8>> for Response {
} }
let sw = StatusWords::from( let sw = StatusWords::from(
(bytes[bytes.len() - 2] as u16) << 8 | (bytes[bytes.len() - 1] as u16), ((bytes[bytes.len() - 2] as u16) << 8) | (bytes[bytes.len() - 1] as u16),
); );
let len = bytes.len() - 2; let len = bytes.len() - 2;
+8 -2
View File
@@ -31,7 +31,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
use crate::{Result, YubiKey}; use crate::{Result, YubiKey};
use rand_core::{OsRng, RngCore}; use rand_core::{OsRng, RngCore, TryRngCore};
use std::fmt::{self, Debug, Display}; use std::fmt::{self, Debug, Display};
/// CCCID offset /// CCCID offset
@@ -66,8 +66,14 @@ impl CardId {
/// Generate a random CCC Card ID /// Generate a random CCC Card ID
pub fn generate() -> Self { pub fn generate() -> Self {
let mut rng = OsRng.unwrap_err();
Self::generate_from_rng(&mut rng)
}
/// Generate a random CCC Card ID from an [`RngCore`]
pub fn generate_from_rng<R: RngCore + ?Sized>(rng: &mut R) -> Self {
let mut id = [0u8; Self::BYTE_SIZE]; let mut id = [0u8; Self::BYTE_SIZE];
OsRng.fill_bytes(&mut id); rng.fill_bytes(&mut id);
Self(id) Self(id)
} }
} }
+2 -2
View File
@@ -135,7 +135,7 @@ impl Error {
Error::AlgorithmError => f.write_str("algorithm error"), Error::AlgorithmError => f.write_str("algorithm error"),
Error::AppletError => f.write_str("applet error"), Error::AppletError => f.write_str("applet error"),
Error::AppletNotFound { applet_name } => { Error::AppletNotFound { applet_name } => {
f.write_str(&format!("{} applet not found", applet_name)) f.write_str(&format!("{applet_name} applet not found"))
} }
Error::ArgumentError => f.write_str("argument error"), Error::ArgumentError => f.write_str("argument error"),
Error::AuthenticationError => f.write_str("authentication error"), Error::AuthenticationError => f.write_str("authentication error"),
@@ -150,7 +150,7 @@ impl Error {
Error::PcscError { Error::PcscError {
inner: Some(pcsc_error), inner: Some(pcsc_error),
} => f.write_fmt(format_args!("PC/SC error: {}", pcsc_error)), } => f.write_fmt(format_args!("PC/SC error: {pcsc_error}")),
Error::PcscError { .. } => f.write_str("PC/SC error"), Error::PcscError { .. } => f.write_str("PC/SC error"),
+5 -3
View File
@@ -157,8 +157,10 @@ impl<T: MetadataType> Metadata<T> {
// We did not find an existing tag, append // We did not find an existing tag, append
assert_eq!(offset, self.inner.len()); assert_eq!(offset, self.inner.len());
self.inner self.inner.extend(iter::repeat_n(
.extend(iter::repeat(0).take(1 + get_length_size(item.len()) + item.len())); 0,
1 + get_length_size(item.len()) + item.len(),
));
Tlv::write(&mut self.inner[offset..], tag, item)?; Tlv::write(&mut self.inner[offset..], tag, item)?;
return Ok(()); return Ok(());
@@ -193,7 +195,7 @@ impl<T: MetadataType> Metadata<T> {
// Move remaining data // Move remaining data
let orig_len = self.inner.len(); let orig_len = self.inner.len();
if cb_moved > 0 { if cb_moved > 0 {
self.inner.extend(iter::repeat(0).take(cb_moved as usize)); self.inner.extend(iter::repeat_n(0, cb_moved as usize));
} }
self.inner.copy_within( self.inner.copy_within(
next_offset..orig_len, next_offset..orig_len,
+3 -2
View File
@@ -32,7 +32,7 @@
use crate::{Error, Result}; use crate::{Error, Result};
use log::error; use log::error;
use rand_core::{OsRng, RngCore}; use rand_core::{OsRng, RngCore, TryRngCore};
use zeroize::Zeroize; use zeroize::Zeroize;
use des::{ use des::{
@@ -156,7 +156,8 @@ impl MgmKey {
/// Generate a random MGM key /// Generate a random MGM key
pub fn generate() -> Self { pub fn generate() -> Self {
let mut key_bytes = [0u8; DES_LEN_3DES]; let mut key_bytes = [0u8; DES_LEN_3DES];
OsRng.fill_bytes(&mut key_bytes); let mut rng = OsRng.unwrap_err();
rng.fill_bytes(&mut key_bytes);
Self(key_bytes) Self(key_bytes)
} }
+46 -42
View File
@@ -57,26 +57,22 @@ use elliptic_curve::{sec1::EncodedPoint as EcPublicKey, PublicKey};
use log::{debug, error, warn}; use log::{debug, error, warn};
use p256::NistP256; use p256::NistP256;
use p384::NistP384; use p384::NistP384;
use rsa::{pkcs8::EncodePublicKey, BigUint, RsaPublicKey}; use rsa::{pkcs8::EncodePublicKey, BoxedUint, RsaPublicKey};
use std::{ use std::{
fmt::{Display, Formatter}, fmt::{Display, Formatter},
str::FromStr, str::FromStr,
}; };
use x509_cert::{der::Decode, spki::SubjectPublicKeyInfoOwned}; use x509_cert::{der::Decode, spki::SubjectPublicKeyInfoOwned};
#[cfg(feature = "untested")]
use {
num_bigint_dig::traits::ModInverse,
num_integer::Integer,
num_traits::{FromPrimitive, One},
};
#[cfg(feature = "untested")] #[cfg(feature = "untested")]
use zeroize::Zeroizing; use zeroize::Zeroizing;
#[cfg(feature = "untested")] #[cfg(feature = "untested")]
use crate::consts::CB_OBJ_MAX; use crate::consts::CB_OBJ_MAX;
#[cfg(feature = "untested")]
use rsa::{traits::PrivateKeyParts, RsaPrivateKey};
/// PIV Applet Name /// PIV Applet Name
pub(crate) const APPLET_NAME: &str = "PIV"; pub(crate) const APPLET_NAME: &str = "PIV";
@@ -175,9 +171,9 @@ impl From<SlotId> for u8 {
impl Display for SlotId { impl Display for SlotId {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self { match self {
SlotId::Management(r) => write!(f, "{:?}", r), SlotId::Management(r) => write!(f, "{r:?}"),
SlotId::Retired(r) => write!(f, "{:?}", r), SlotId::Retired(r) => write!(f, "{r:?}"),
_ => write!(f, "{:?}", self), _ => write!(f, "{self:?}"),
} }
} }
} }
@@ -330,7 +326,7 @@ impl From<RetiredSlotId> for u8 {
impl Display for RetiredSlotId { impl Display for RetiredSlotId {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self) write!(f, "{self:?}")
} }
} }
@@ -413,7 +409,7 @@ impl From<ManagementSlotId> for u8 {
impl Display for ManagementSlotId { impl Display for ManagementSlotId {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self) write!(f, "{self:?}")
} }
} }
@@ -791,36 +787,44 @@ impl RsaKeyData {
/// - `Ok(key_data)` if `secret_p` and `secret_q` are valid primes. /// - `Ok(key_data)` if `secret_p` and `secret_q` are valid primes.
/// - `Err(Error::AlgorithmError)` if `secret_p`/`secret_q` are invalid primes. /// - `Err(Error::AlgorithmError)` if `secret_p`/`secret_q` are invalid primes.
pub fn new(secret_p: &[u8], secret_q: &[u8]) -> Result<Self> { pub fn new(secret_p: &[u8], secret_q: &[u8]) -> Result<Self> {
let p = BigUint::from_bytes_be(secret_p); let p = BoxedUint::from_be_slice_vartime(secret_p);
let q = BigUint::from_bytes_be(secret_q); let q = BoxedUint::from_be_slice_vartime(secret_q);
let exp = BoxedUint::from(KEYDATA_RSA_EXP);
let totient = { let mut private_key = RsaPrivateKey::from_p_q(p.clone(), q.clone(), exp)
let p_t = &p - BigUint::one(); .map_err(|_| Error::AlgorithmError)?;
let q_t = &p - BigUint::one(); private_key
.precompute()
p_t.lcm(&q_t) .map_err(|_| Error::AlgorithmError)?;
};
let exp = BigUint::from_u64(KEYDATA_RSA_EXP).ok_or(Error::AlgorithmError)?;
let d = exp.mod_inverse(&totient).ok_or(Error::AlgorithmError)?;
let d = d.to_biguint().ok_or(Error::AlgorithmError)?;
// We calculate the optimization values ahead of time, instead of making the user
// do so.
let dp = &d % (&p - BigUint::one());
let dq = &d % (&q - BigUint::one());
let qinv = q.clone().mod_inverse(&p).ok_or(Error::AlgorithmError)?;
let (_, qinv) = qinv.to_bytes_be();
Ok(RsaKeyData { Ok(RsaKeyData {
p: Zeroizing::new(p.to_bytes_be()), p: Zeroizing::new(p.to_be_bytes().to_vec()),
q: Zeroizing::new(q.to_bytes_be()), q: Zeroizing::new(q.to_be_bytes().to_vec()),
dp: Zeroizing::new(dp.to_bytes_be()), dp: Zeroizing::new(
dq: Zeroizing::new(dq.to_bytes_be()), private_key
qinv: Zeroizing::new(qinv), .dp()
.expect("invariant violation: precompute should fill the field")
.clone()
.to_be_bytes()
.to_vec(),
),
dq: Zeroizing::new(
private_key
.dq()
.expect("invariant violation: precompute should fill the field")
.clone()
.to_be_bytes()
.to_vec(),
),
qinv: Zeroizing::new(
private_key
.qinv()
.expect("invariant violation: precompute should fill the field")
.clone()
.retrieve()
.to_be_bytes()
.to_vec(),
),
}) })
} }
@@ -1170,8 +1174,8 @@ fn read_public_key(
let exp = exp_tlv.value.to_vec(); let exp = exp_tlv.value.to_vec();
let pubkey = RsaPublicKey::new( let pubkey = RsaPublicKey::new(
BigUint::from_bytes_be(&modulus), BoxedUint::from_be_slice_vartime(&modulus),
BigUint::from_bytes_be(&exp), BoxedUint::from_be_slice_vartime(&exp),
) )
.map_err(|_| Error::InvalidObject)?; .map_err(|_| Error::InvalidObject)?;
Ok(SubjectPublicKeyInfoOwned::from_der( Ok(SubjectPublicKeyInfoOwned::from_der(
+1 -1
View File
@@ -122,7 +122,7 @@ impl Setting {
/// Get a setting boolean from an environment variable /// Get a setting boolean from an environment variable
fn from_env(key: &str) -> Option<Self> { fn from_env(key: &str) -> Option<Self> {
env::var(format!("YUBIKEY_PIV_{}", key)) env::var(format!("YUBIKEY_PIV_{key}"))
.ok() .ok()
.map(|value| Setting { .map(|value| Setting {
source: SettingSource::User, source: SettingSource::User,
+3 -2
View File
@@ -43,7 +43,7 @@ use crate::{
}; };
use log::{error, info}; use log::{error, info};
use pcsc::Card; use pcsc::Card;
use rand_core::{OsRng, RngCore}; use rand_core::{OsRng, RngCore, TryRngCore};
use std::{ use std::{
cmp::{Ord, Ordering}, cmp::{Ord, Ordering},
fmt::{self, Display}, fmt::{self, Display},
@@ -434,7 +434,8 @@ impl YubiKey {
data[4..12].copy_from_slice(&response); data[4..12].copy_from_slice(&response);
data[12] = 0x81; data[12] = 0x81;
data[13] = 8; data[13] = 8;
OsRng.fill_bytes(&mut data[14..22]); let mut rng = OsRng.unwrap_err();
rng.fill_bytes(&mut data[14..22]);
let mut challenge = [0u8; 8]; let mut challenge = [0u8; 8];
challenge.copy_from_slice(&data[14..22]); challenge.copy_from_slice(&data[14..22]);
+5 -4
View File
@@ -5,7 +5,7 @@
use log::trace; use log::trace;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use rand_core::{OsRng, RngCore}; use rand_core::{OsRng, RngCore, TryRngCore};
use rsa::{pkcs1v15, RsaPublicKey}; use rsa::{pkcs1v15, RsaPublicKey};
use sha2::{Digest, Sha256}; use sha2::{Digest, Sha256};
use signature::hazmat::PrehashVerifier; use signature::hazmat::PrehashVerifier;
@@ -48,7 +48,7 @@ fn test_get_cccid() {
match yubikey.cccid() { match yubikey.cccid() {
Ok(cccid) => trace!("CCCID: {:?}", cccid), Ok(cccid) => trace!("CCCID: {:?}", cccid),
Err(Error::NotFound) => trace!("CCCID not found"), Err(Error::NotFound) => trace!("CCCID not found"),
Err(err) => panic!("error getting CCCID: {:?}", err), Err(err) => panic!("error getting CCCID: {err:?}"),
} }
} }
@@ -64,7 +64,7 @@ fn test_get_chuid() {
match yubikey.chuid() { match yubikey.chuid() {
Ok(chuid) => trace!("CHUID: {:?}", chuid), Ok(chuid) => trace!("CHUID: {:?}", chuid),
Err(Error::NotFound) => trace!("CHUID not found"), Err(Error::NotFound) => trace!("CHUID not found"),
Err(err) => panic!("error getting CHUID: {:?}", err), Err(err) => panic!("error getting CHUID: {err:?}"),
} }
} }
@@ -167,7 +167,8 @@ fn generate_self_signed_cert<KT: yubikey_signer::KeyType>() -> Certificate {
// 0x80 0x00 ... (20bytes) is invalid because of high MSB (serial will keep the sign) // 0x80 0x00 ... (20bytes) is invalid because of high MSB (serial will keep the sign)
// we'll limit ourselves to 19 bytes serial. // we'll limit ourselves to 19 bytes serial.
let mut serial = [0u8; 19]; let mut serial = [0u8; 19];
OsRng.fill_bytes(&mut serial); let mut rng = OsRng.unwrap_err();
rng.fill_bytes(&mut serial);
let serial = SerialNumber::new(&serial[..]).expect("serial can't be more than 20 bytes long"); let serial = SerialNumber::new(&serial[..]).expect("serial can't be more than 20 bytes long");
let validity = Validity::from_now(Duration::new(500000, 0)).unwrap(); let validity = Validity::from_now(Duration::new(500000, 0)).unwrap();