From 5c7ed62ad657d3db99a7081763aeb9d756cef23c Mon Sep 17 00:00:00 2001 From: Arthur Gautier Date: Mon, 19 Aug 2024 07:53:34 +0000 Subject: [PATCH] WIP: pkcs1: adopt pkcs8 API changes Signed-off-by: Arthur Gautier --- pkcs1/src/private_key.rs | 12 ++++++++++-- pkcs1/src/traits.rs | 7 +++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pkcs1/src/private_key.rs b/pkcs1/src/private_key.rs index d7a7bb554..e26afd66f 100644 --- a/pkcs1/src/private_key.rs +++ b/pkcs1/src/private_key.rs @@ -6,8 +6,8 @@ pub(crate) mod other_prime_info; use crate::{Error, Result, RsaPublicKey, Version}; use core::fmt; use der::{ - asn1::UintRef, Decode, DecodeValue, Encode, EncodeValue, Header, Length, Reader, Sequence, Tag, - Writer, + asn1::{OctetStringRef, UintRef}, + Decode, DecodeValue, Encode, EncodeValue, Header, Length, Reader, Sequence, Tag, Writer, }; #[cfg(feature = "alloc")] @@ -172,6 +172,14 @@ impl<'a> TryFrom<&'a [u8]> for RsaPrivateKey<'a> { } } +impl<'a> TryFrom> for RsaPrivateKey<'a> { + type Error = Error; + + fn try_from(bytes: OctetStringRef<'a>) -> Result { + Ok(Self::from_der(bytes.as_bytes())?) + } +} + impl fmt::Debug for RsaPrivateKey<'_> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("RsaPrivateKey") diff --git a/pkcs1/src/traits.rs b/pkcs1/src/traits.rs index 9276e0b04..7d8387b42 100644 --- a/pkcs1/src/traits.rs +++ b/pkcs1/src/traits.rs @@ -15,7 +15,7 @@ use { #[cfg(feature = "pkcs8")] use { crate::{ALGORITHM_ID, ALGORITHM_OID}, - der::asn1::BitStringRef, + der::asn1::{BitStringRef, OctetStringRef}, }; #[cfg(feature = "std")] @@ -160,6 +160,8 @@ where T: for<'a> TryFrom, Error = pkcs8::Error>, { fn from_pkcs1_der(private_key: &[u8]) -> Result { + // TODO: UNTESTED + let private_key = OctetStringRef::new(private_key)?; Ok(Self::try_from(pkcs8::PrivateKeyInfo { algorithm: ALGORITHM_ID, private_key, @@ -185,9 +187,10 @@ where impl EncodeRsaPrivateKey for T { fn to_pkcs1_der(&self) -> Result { let pkcs8_doc = self.to_pkcs8_der()?; + // TODO: UNTESTED let pkcs8_key = pkcs8::PrivateKeyInfo::from_der(pkcs8_doc.as_bytes())?; pkcs8_key.algorithm.assert_algorithm_oid(ALGORITHM_OID)?; - RsaPrivateKey::from_der(pkcs8_key.private_key)?.try_into() + RsaPrivateKey::from_der(pkcs8_key.private_key.as_bytes())?.try_into() } }