mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(ext/node): support x509 certificates in createPublicKey
(#25731)
Fixes https://github.com/denoland/deno/issues/25681
This commit is contained in:
parent
159ac45a85
commit
e97f00f6f6
2 changed files with 34 additions and 1 deletions
|
@ -752,7 +752,15 @@ impl KeyObjectHandle {
|
||||||
| KeyObjectHandle::Secret(_) => unreachable!(),
|
| KeyObjectHandle::Secret(_) => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO: handle x509 certificates as public keys
|
"CERTIFICATE" => {
|
||||||
|
let (_, pem) = x509_parser::pem::parse_x509_pem(pem.as_bytes())
|
||||||
|
.map_err(|_| type_error("invalid x509 certificate"))?;
|
||||||
|
|
||||||
|
let cert = pem.parse_x509()?;
|
||||||
|
let public_key = cert.tbs_certificate.subject_pki;
|
||||||
|
|
||||||
|
return KeyObjectHandle::new_x509_public_key(&public_key);
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
return Err(type_error(format!("unsupported PEM label: {}", label)))
|
return Err(type_error(format!("unsupported PEM label: {}", label)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -631,3 +631,28 @@ xjwfpTZOdWW36U3GRuXn12QyITRg6el7ro6CajhCVNg9nJIxvZzp0jyE
|
||||||
|
|
||||||
assertEquals(privatePkcs8, pkcs8Expected);
|
assertEquals(privatePkcs8, pkcs8Expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Deno.test("createPublicKey x509", function () {
|
||||||
|
const certificate = `-----BEGIN CERTIFICATE-----
|
||||||
|
MIIC8zCCAdugAwIBAgIBATANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDExB0ZXN0
|
||||||
|
LWNlcnRpZmljYXRlMB4XDTI0MDkxNzA5MTczNVoXDTI3MDkxNzA5MTczNVowGzEZ
|
||||||
|
MBcGA1UEAxMQdGVzdC1jZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
||||||
|
ADCCAQoCggEBAMOzTIrwvbUbPIrxCr5DO1XMd3tH37pID0no4cOUq1hxNEnB4l1j
|
||||||
|
2201atvmXwzWI3xtPzfwOYUtE/DGagFh805/nod5yXwR6liGd9RjkABxPi0UF7jl
|
||||||
|
lWHfBLyILUHVR9hEOl65vUpKx5ORNgbO9L7WsL/FKH9pvCbWjdI29+pQnZ4gOoWZ
|
||||||
|
YC6auoKfG7TcbaFb9AubolcIlofC2MHP+cWjPA+iX6ezUqqN1Ug5xGiF/sC79M0o
|
||||||
|
5d6E83zdXxyyFwydUWUv3EKgmVTLln/2hYQFKCRhy72n6L7y9JNcieOauQK0efJB
|
||||||
|
+2HwaWeAr2xkhSnWVCRl4nEgiu/E0nL/zNUCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
|
||||||
|
AgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIAeXho137l8V6daKI33IvRb
|
||||||
|
N6CyMA0GCSqGSIb3DQEBCwUAA4IBAQAQU1Sast6VsD4uTJiSz/lSEkLZ6wC/6v+R
|
||||||
|
az0YSnbNmQ5YczBLdTLs07hBC1tDvv0vfopRXvNxP7AxkopX5O7Lc15zf5JdTZnY
|
||||||
|
/tJwO62jZiaLsfAo2JzrZ31h2cFFFRTYPTx+8E4djgdmwKtaECeQFXqdpOHOJCGv
|
||||||
|
NfwVlZ7Z/cd8fI8oiNtvJDAhPa/UZXAhFV74hT0DiuMwPiJvsG83rutvAYpZ8lPu
|
||||||
|
yG6QSsxPnxzEHIKR+vgxUHKwTdv0sWt3XBmpIY5CGXFR2eIQP1jv0ohtcnLMJe8N
|
||||||
|
z6TExWlQMjt66nV7R8cRAkzmABrG+NW3e8Zpac7Lkuv+zu0S+K7c
|
||||||
|
-----END CERTIFICATE-----`;
|
||||||
|
|
||||||
|
const publicKey = createPublicKey(certificate);
|
||||||
|
assertEquals(publicKey.type, "public");
|
||||||
|
assertEquals(publicKey.asymmetricKeyType, "rsa");
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in a new issue