1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

fix(ext/node): use pem private keys in createPublicKey (#24969)

This commit is contained in:
Luca Casonato 2024-08-09 15:39:46 +02:00 committed by GitHub
parent 854c7ba198
commit 4dc8fe2020
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -522,7 +522,7 @@ impl KeyObjectHandle {
key: &[u8],
format: &str,
typ: &str,
_passphrase: Option<&[u8]>,
passphrase: Option<&[u8]>,
) -> Result<KeyObjectHandle, AnyError> {
let document = match format {
"pem" => {
@ -542,23 +542,22 @@ impl KeyObjectHandle {
Document::from_pkcs1_der(document.as_bytes())
.map_err(|_| type_error("invalid PKCS#1 public key"))?
}
EncryptedPrivateKeyInfo::PEM_LABEL => {
// FIXME
return Err(type_error(
"deriving public key from encrypted private key",
));
}
PrivateKeyInfo::PEM_LABEL => {
// FIXME
return Err(type_error("public key cannot be a private key"));
}
sec1::EcPrivateKey::PEM_LABEL => {
// FIXME
return Err(type_error("deriving public key from ec private key"));
}
rsa::pkcs1::RsaPrivateKey::PEM_LABEL => {
// FIXME
return Err(type_error("deriving public key from rsa private key"));
EncryptedPrivateKeyInfo::PEM_LABEL
| PrivateKeyInfo::PEM_LABEL
| sec1::EcPrivateKey::PEM_LABEL
| rsa::pkcs1::RsaPrivateKey::PEM_LABEL => {
let handle = KeyObjectHandle::new_asymmetric_private_key_from_js(
key, format, typ, passphrase,
)?;
match handle {
KeyObjectHandle::AsymmetricPrivate(private) => {
return Ok(KeyObjectHandle::AsymmetricPublic(
private.to_public_key(),
))
}
KeyObjectHandle::AsymmetricPublic(_)
| KeyObjectHandle::Secret(_) => unreachable!(),
}
}
// TODO: handle x509 certificates as public keys
_ => {