diff --git a/Cargo.lock b/Cargo.lock index e2edc34..38e1df1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,6 +46,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "base64ct" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a32fd6af2b5827bce66c29053ba0e7c42b9dcab01835835058558c10851a46b" + [[package]] name = "bitflags" version = "1.3.2" @@ -130,9 +136,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09910f0830248af4499907177608b81d640c8c404526f8770b87b765fbd8c9a5" +checksum = "e49339137316df1914fdb54a5eae75a73f45068fd0d2178fe235b11d93238a6e" dependencies = [ "generic-array", "rand_core", @@ -163,6 +169,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31e21d2d0f22cde6e88694108429775c0219760a07779bf96503b434a03d7412" dependencies = [ "const-oid", + "crypto-bigint", ] [[package]] @@ -476,12 +483,6 @@ dependencies = [ "der-parser", ] -[[package]] -name = "once_cell" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" - [[package]] name = "opaque-debug" version = "0.3.0" @@ -510,9 +511,9 @@ dependencies = [ [[package]] name = "pbkdf2" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +checksum = "f05894bce6a1ba4be299d0c5f29563e08af2bc18bb7d48313113bed71e904739" dependencies = [ "crypto-mac", ] @@ -537,14 +538,23 @@ dependencies = [ ] [[package]] -name = "pem" -version = "0.8.3" +name = "pem-rfc7468" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +checksum = "b8fe90c78c9a17442665a41a1a45dcd24bbab0e1794748edc19b27fffb146c13" dependencies = [ - "base64", - "once_cell", - "regex", + "base64ct", +] + +[[package]] +name = "pkcs1" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "359e7852310174a810f078124edb73c66e88a1a731b2fd586dba34ee32dbe416" +dependencies = [ + "der", + "pem-rfc7468", + "zeroize", ] [[package]] @@ -554,7 +564,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbee84ed13e44dd82689fa18348a49934fa79cc774a344c42fc9b301c71b140a" dependencies = [ "der", + "pem-rfc7468", + "pkcs1", "spki", + "zeroize", ] [[package]] @@ -652,9 +665,9 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "rsa" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ef841a26fc5d040ced0417c6c6a64ee851f42489df11cdf0218e545b6f8d28" +checksum = "e05c2603e2823634ab331437001b411b9ed11660fbc4066f3908c84a9439260d" dependencies = [ "byteorder", "digest", @@ -663,9 +676,9 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "pem", + "pkcs1", + "pkcs8", "rand", - "simple_asn1", "subtle", "zeroize", ] @@ -679,12 +692,6 @@ dependencies = [ "nom", ] -[[package]] -name = "rustversion" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" - [[package]] name = "ryu" version = "1.0.5" @@ -742,18 +749,6 @@ dependencies = [ "rand_core", ] -[[package]] -name = "simple_asn1" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb4ea60fb301dc81dfc113df680571045d375ab7345d171c5dc7d7e13107a80" -dependencies = [ - "chrono", - "num-bigint", - "num-traits", - "thiserror", -] - [[package]] name = "smallvec" version = "1.6.1" @@ -946,9 +941,9 @@ dependencies = [ [[package]] name = "x509-parser" -version = "0.9.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64abca276c58f8341ddc13fd4bd6ae75993cc669043f5b34813c90f7dff04771" +checksum = "d2ce30cd4a10592affdced3f5c95e03e8f23599d282e727fc44035c21250d552" dependencies = [ "base64", "chrono", @@ -958,7 +953,6 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "rustversion", "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index d89c5df..e3ba8ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,12 +30,12 @@ nom = "6" num-bigint-dig = { version = "0.7", features = ["rand"] } num-traits = "0.2" num-integer = "0.1" -pbkdf2 = { version = "0.8", default-features = false } +pbkdf2 = { version = "0.9", default-features = false } p256 = "0.9" p384 = "0.8" pcsc = "2" rand_core = { version = "0.6", features = ["std"] } -rsa = "0.4" +rsa = "0.5" secrecy = "0.8" sha-1 = "0.9" sha2 = "0.9" @@ -43,7 +43,7 @@ subtle = "2" subtle-encoding = "0.5" uuid = { version = "0.8", features = ["v4"] } x509 = "0.2" -x509-parser = "0.9" +x509-parser = "0.11" zeroize = "1" [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index d36f376..8ba0180 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -21,5 +21,5 @@ log = "0.4" sha2 = "0.9" subtle-encoding = "0.5" termcolor = "1" -x509-parser = "0.9" +x509-parser = "0.11" yubikey = { version = "0.4", path = ".." } diff --git a/src/certificate.rs b/src/certificate.rs index 2285d09..756b78a 100644 --- a/src/certificate.rs +++ b/src/certificate.rs @@ -45,7 +45,7 @@ use log::error; use num_bigint_dig::BigUint; use p256::NistP256; use p384::NistP384; -use rsa::{PublicKeyParts, RSAPublicKey}; +use rsa::{PublicKeyParts, RsaPublicKey}; use sha2::{Digest, Sha256}; use std::convert::TryFrom; use std::fmt; @@ -172,7 +172,7 @@ pub enum PublicKeyInfo { algorithm: AlgorithmId, /// Public key - pubkey: RSAPublicKey, + pubkey: RsaPublicKey, }, /// EC P-256 keys @@ -594,7 +594,7 @@ mod read_pki { *, }; use nom::{combinator, IResult}; - use rsa::{BigUint, RSAPublicKey}; + use rsa::{BigUint, RsaPublicKey}; use super::{OID_NIST_P256, OID_NIST_P384}; use crate::{piv::AlgorithmId, Error, Result}; @@ -606,7 +606,7 @@ mod read_pki { /// publicExponent INTEGER -- e /// } /// ``` - pub(super) fn rsa_pubkey(encoded: &[u8]) -> Result { + pub(super) fn rsa_pubkey(encoded: &[u8]) -> Result { fn parse_rsa_pubkey(i: &[u8]) -> IResult<&[u8], DerObject<'_>, BerError> { parse_der_sequence_defined!(i, parse_der_integer >> parse_der_integer) } @@ -634,7 +634,7 @@ mod read_pki { _ => return Err(Error::InvalidObject), }; - RSAPublicKey::new(n, e).map_err(|_| Error::InvalidObject) + RsaPublicKey::new(n, e).map_err(|_| Error::InvalidObject) } /// From [RFC 5480](https://tools.ietf.org/html/rfc5480#section-2.1.1): @@ -658,7 +658,7 @@ mod read_pki { mod write_pki { use cookie_factory::{SerializeFn, WriteContext}; - use rsa::{BigUint, PublicKeyParts, RSAPublicKey}; + use rsa::{BigUint, PublicKeyParts, RsaPublicKey}; use std::io::Write; use x509::der::write::{der_integer, der_sequence}; @@ -675,7 +675,7 @@ mod write_pki { /// } /// ``` pub(super) fn rsa_pubkey<'a, W: Write + 'a>( - pubkey: &'a RSAPublicKey, + pubkey: &'a RsaPublicKey, ) -> impl SerializeFn + 'a { der_sequence(( der_integer_biguint(pubkey.n()), diff --git a/src/piv.rs b/src/piv.rs index 24b4bd8..4183dd9 100644 --- a/src/piv.rs +++ b/src/piv.rs @@ -54,7 +54,7 @@ use crate::{ }; use elliptic_curve::sec1::EncodedPoint as EcPublicKey; use log::{debug, error, warn}; -use rsa::{BigUint, RSAPublicKey}; +use rsa::{BigUint, RsaPublicKey}; use std::{convert::TryFrom, str::FromStr}; #[cfg(feature = "untested")] @@ -624,7 +624,7 @@ pub fn generate( Ok(PublicKeyInfo::Rsa { algorithm, - pubkey: RSAPublicKey::new( + pubkey: RsaPublicKey::new( BigUint::from_bytes_be(&modulus), BigUint::from_bytes_be(&exp), )