diff options
| author | Divy Srivastava <dj.srivastava23@gmail.com> | 2024-03-14 06:39:46 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-14 14:39:46 +0100 |
| commit | 9c348a0acd7d1bc288c2ce5b66016571b9603288 (patch) | |
| tree | 631f24c5d2093e472eb6209ca6609702f0261fd4 /ext/node/ops | |
| parent | cf3c6f9b0812ad487320834399bc4863dadd9655 (diff) | |
fix(ext/node): support `spki` format in createPublicKey (#22918)
Diffstat (limited to 'ext/node/ops')
| -rw-r--r-- | ext/node/ops/crypto/mod.rs | 23 |
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; |
