summaryrefslogtreecommitdiff
path: root/ext/node/ops
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-03-14 06:39:46 -0700
committerGitHub <noreply@github.com>2024-03-14 14:39:46 +0100
commit9c348a0acd7d1bc288c2ce5b66016571b9603288 (patch)
tree631f24c5d2093e472eb6209ca6609702f0261fd4 /ext/node/ops
parentcf3c6f9b0812ad487320834399bc4863dadd9655 (diff)
fix(ext/node): support `spki` format in createPublicKey (#22918)
Diffstat (limited to 'ext/node/ops')
-rw-r--r--ext/node/ops/crypto/mod.rs23
1 files changed, 13 insertions, 10 deletions
diff --git a/ext/node/ops/crypto/mod.rs b/ext/node/ops/crypto/mod.rs
index e597a9109..7f593520b 100644
--- a/ext/node/ops/crypto/mod.rs
+++ b/ext/node/ops/crypto/mod.rs
@@ -1480,14 +1480,11 @@ fn parse_public_key(
}
Ok(doc)
}
- "der" => {
- match type_ {
- "pkcs1" => pkcs8::Document::from_pkcs1_der(key)
- .map_err(|_| type_error("Invalid PKCS1 public key")),
- // TODO(@iuioiua): spki type
- _ => Err(type_error(format!("Unsupported key type: {}", type_))),
- }
- }
+ "der" => match type_ {
+ "pkcs1" => pkcs8::Document::from_pkcs1_der(key)
+ .map_err(|_| type_error("Invalid PKCS1 public key")),
+ _ => Err(type_error(format!("Unsupported key type: {}", type_))),
+ },
_ => Err(type_error(format!("Unsupported key format: {}", format))),
}
}
@@ -1499,8 +1496,14 @@ pub fn op_node_create_public_key(
#[string] format: &str,
#[string] type_: &str,
) -> Result<AsymmetricKeyDetails, AnyError> {
- let doc = parse_public_key(key, format, type_)?;
- let pk_info = spki::SubjectPublicKeyInfoRef::try_from(doc.as_bytes())?;
+ let mut doc = None;
+
+ let pk_info = if type_ != "spki" {
+ doc.replace(parse_public_key(key, format, type_)?);
+ spki::SubjectPublicKeyInfoRef::try_from(doc.as_ref().unwrap().as_bytes())?
+ } else {
+ spki::SubjectPublicKeyInfoRef::try_from(key)?
+ };
let alg = pk_info.algorithm.oid;