summaryrefslogtreecommitdiff
path: root/ext/crypto/import_key.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/crypto/import_key.rs')
-rw-r--r--ext/crypto/import_key.rs65
1 files changed, 34 insertions, 31 deletions
diff --git a/ext/crypto/import_key.rs b/ext/crypto/import_key.rs
index 5f7c214ea..0ffc89888 100644
--- a/ext/crypto/import_key.rs
+++ b/ext/crypto/import_key.rs
@@ -206,12 +206,10 @@ fn import_key_rsa_jwk(
fn import_key_rsassa(
key_data: KeyData,
) -> Result<ImportKeyResult, deno_core::anyhow::Error> {
- use rsa::pkcs1::der::Decode;
-
match key_data {
KeyData::Spki(data) => {
// 2-3.
- let pk_info = spki::SubjectPublicKeyInfo::from_der(&data)
+ let pk_info = spki::SubjectPublicKeyInfoRef::try_from(&*data)
.map_err(|e| data_error(e.to_string()))?;
// 4-5.
@@ -223,21 +221,24 @@ fn import_key_rsassa(
}
// 8-9.
- let public_key =
- rsa::pkcs1::RsaPublicKey::from_der(pk_info.subject_public_key)
- .map_err(|e| data_error(e.to_string()))?;
+ let public_key = rsa::pkcs1::RsaPublicKey::from_der(
+ pk_info.subject_public_key.raw_bytes(),
+ )
+ .map_err(|e| data_error(e.to_string()))?;
let bytes_consumed = public_key
.encoded_len()
.map_err(|e| data_error(e.to_string()))?;
if bytes_consumed
- != rsa::pkcs1::der::Length::new(pk_info.subject_public_key.len() as u16)
+ != rsa::pkcs1::der::Length::new(
+ pk_info.subject_public_key.raw_bytes().len() as u16,
+ )
{
return Err(data_error("public key is invalid (too long)"));
}
- let data = pk_info.subject_public_key.to_vec().into();
+ let data = pk_info.subject_public_key.to_der()?.into();
let public_exponent =
public_key.public_exponent.as_bytes().to_vec().into();
let modulus_length = public_key.modulus.as_bytes().len() * 8;
@@ -297,12 +298,10 @@ fn import_key_rsassa(
fn import_key_rsapss(
key_data: KeyData,
) -> Result<ImportKeyResult, deno_core::anyhow::Error> {
- use rsa::pkcs1::der::Decode;
-
match key_data {
KeyData::Spki(data) => {
// 2-3.
- let pk_info = spki::SubjectPublicKeyInfo::from_der(&data)
+ let pk_info = spki::SubjectPublicKeyInfoRef::try_from(&*data)
.map_err(|e| data_error(e.to_string()))?;
// 4-5.
@@ -314,21 +313,24 @@ fn import_key_rsapss(
}
// 8-9.
- let public_key =
- rsa::pkcs1::RsaPublicKey::from_der(pk_info.subject_public_key)
- .map_err(|e| data_error(e.to_string()))?;
+ let public_key = rsa::pkcs1::RsaPublicKey::from_der(
+ pk_info.subject_public_key.raw_bytes(),
+ )
+ .map_err(|e| data_error(e.to_string()))?;
let bytes_consumed = public_key
.encoded_len()
.map_err(|e| data_error(e.to_string()))?;
if bytes_consumed
- != rsa::pkcs1::der::Length::new(pk_info.subject_public_key.len() as u16)
+ != rsa::pkcs1::der::Length::new(
+ pk_info.subject_public_key.raw_bytes().len() as u16,
+ )
{
return Err(data_error("public key is invalid (too long)"));
}
- let data = pk_info.subject_public_key.to_vec().into();
+ let data = pk_info.subject_public_key.to_der()?.into();
let public_exponent =
public_key.public_exponent.as_bytes().to_vec().into();
let modulus_length = public_key.modulus.as_bytes().len() * 8;
@@ -388,12 +390,10 @@ fn import_key_rsapss(
fn import_key_rsaoaep(
key_data: KeyData,
) -> Result<ImportKeyResult, deno_core::anyhow::Error> {
- use rsa::pkcs1::der::Decode;
-
match key_data {
KeyData::Spki(data) => {
// 2-3.
- let pk_info = spki::SubjectPublicKeyInfo::from_der(&data)
+ let pk_info = spki::SubjectPublicKeyInfoRef::try_from(&*data)
.map_err(|e| data_error(e.to_string()))?;
// 4-5.
@@ -405,21 +405,24 @@ fn import_key_rsaoaep(
}
// 8-9.
- let public_key =
- rsa::pkcs1::RsaPublicKey::from_der(pk_info.subject_public_key)
- .map_err(|e| data_error(e.to_string()))?;
+ let public_key = rsa::pkcs1::RsaPublicKey::from_der(
+ pk_info.subject_public_key.raw_bytes(),
+ )
+ .map_err(|e| data_error(e.to_string()))?;
let bytes_consumed = public_key
.encoded_len()
.map_err(|e| data_error(e.to_string()))?;
if bytes_consumed
- != rsa::pkcs1::der::Length::new(pk_info.subject_public_key.len() as u16)
+ != rsa::pkcs1::der::Length::new(
+ pk_info.subject_public_key.raw_bytes().len() as u16,
+ )
{
return Err(data_error("public key is invalid (too long)"));
}
- let data = pk_info.subject_public_key.to_vec().into();
+ let data = pk_info.subject_public_key.to_der()?.into();
let public_exponent =
public_key.public_exponent.as_bytes().to_vec().into();
let modulus_length = public_key.modulus.as_bytes().len() * 8;
@@ -541,14 +544,14 @@ fn import_key_ec_jwk(
let pkcs8_der = match named_curve {
EcNamedCurve::P256 => {
let d = decode_b64url_to_field_bytes::<p256::NistP256>(&d)?;
- let pk = p256::SecretKey::from_be_bytes(&d)?;
+ let pk = p256::SecretKey::from_bytes(&d)?;
pk.to_pkcs8_der()
.map_err(|_| data_error("invalid JWK private key"))?
}
EcNamedCurve::P384 => {
let d = decode_b64url_to_field_bytes::<p384::NistP384>(&d)?;
- let pk = p384::SecretKey::from_be_bytes(&d)?;
+ let pk = p384::SecretKey::from_bytes(&d)?;
pk.to_pkcs8_der()
.map_err(|_| data_error("invalid JWK private key"))?
@@ -593,7 +596,7 @@ impl<'a> TryFrom<spki::der::asn1::AnyRef<'a>> for ECParametersSpki {
fn try_from(
any: spki::der::asn1::AnyRef<'a>,
) -> spki::der::Result<ECParametersSpki> {
- let x = any.oid()?;
+ let x = any.try_into()?;
Ok(Self { named_curve_alg: x })
}
@@ -642,7 +645,7 @@ fn import_key_ec(
pk.algorithm
.parameters
.ok_or_else(|| data_error("malformed parameters"))?
- .oid()
+ .try_into()
.unwrap()
}
EcNamedCurve::P521 => {
@@ -689,7 +692,7 @@ fn import_key_ec(
}
KeyData::Spki(data) => {
// 2-3.
- let pk_info = spki::SubjectPublicKeyInfo::from_der(&data)
+ let pk_info = spki::SubjectPublicKeyInfoRef::try_from(&*data)
.map_err(|e| data_error(e.to_string()))?;
// 4.
@@ -726,7 +729,7 @@ fn import_key_ec(
if let Some(pk_named_curve) = pk_named_curve {
let pk = pk_info.subject_public_key;
- encoded_key = pk.to_vec();
+ encoded_key = pk.to_der()?;
let bytes_consumed = match named_curve {
EcNamedCurve::P256 => {
@@ -755,7 +758,7 @@ fn import_key_ec(
_ => return Err(not_supported_error("Unsupported named curve")),
};
- if bytes_consumed != pk_info.subject_public_key.len() {
+ if bytes_consumed != pk_info.subject_public_key.raw_bytes().len() {
return Err(data_error("public key is invalid (too long)"));
}