summaryrefslogtreecommitdiff
path: root/ext/node/ops/crypto
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-03-21 12:15:10 +0530
committerGitHub <noreply@github.com>2024-03-21 06:45:10 +0000
commit210f2911ce3f498524c0354e8f60d62e3dbc39ed (patch)
tree1b45294bbe2458ca2d95ccd0a6ea508ee287425f /ext/node/ops/crypto
parent5a716d1d06f73800b280259204789260774d465d (diff)
fix(ext/node): panic in `op_node_ecdh_generate_keys` (#23011)
Diffstat (limited to 'ext/node/ops/crypto')
-rw-r--r--ext/node/ops/crypto/mod.rs16
1 files changed, 9 insertions, 7 deletions
diff --git a/ext/node/ops/crypto/mod.rs b/ext/node/ops/crypto/mod.rs
index 3b33be3fc..7ea96c031 100644
--- a/ext/node/ops/crypto/mod.rs
+++ b/ext/node/ops/crypto/mod.rs
@@ -1048,13 +1048,12 @@ pub async fn op_node_scrypt_async(
}
#[op2(fast)]
-#[smi]
pub fn op_node_ecdh_generate_keys(
#[string] curve: &str,
#[buffer] pubbuf: &mut [u8],
#[buffer] privbuf: &mut [u8],
#[string] format: &str,
-) -> Result<ResourceId, AnyError> {
+) -> Result<(), AnyError> {
let mut rng = rand::thread_rng();
let compress = format == "compressed";
match curve {
@@ -1065,30 +1064,33 @@ pub fn op_node_ecdh_generate_keys(
pubbuf.copy_from_slice(pubkey.to_encoded_point(compress).as_ref());
privbuf.copy_from_slice(privkey.to_nonzero_scalar().to_bytes().as_ref());
- Ok(0)
+ Ok(())
}
"prime256v1" | "secp256r1" => {
let privkey = elliptic_curve::SecretKey::<NistP256>::random(&mut rng);
let pubkey = privkey.public_key();
pubbuf.copy_from_slice(pubkey.to_encoded_point(compress).as_ref());
privbuf.copy_from_slice(privkey.to_nonzero_scalar().to_bytes().as_ref());
- Ok(0)
+
+ Ok(())
}
"secp384r1" => {
let privkey = elliptic_curve::SecretKey::<NistP384>::random(&mut rng);
let pubkey = privkey.public_key();
pubbuf.copy_from_slice(pubkey.to_encoded_point(compress).as_ref());
privbuf.copy_from_slice(privkey.to_nonzero_scalar().to_bytes().as_ref());
- Ok(0)
+
+ Ok(())
}
"secp224r1" => {
let privkey = elliptic_curve::SecretKey::<NistP224>::random(&mut rng);
let pubkey = privkey.public_key();
pubbuf.copy_from_slice(pubkey.to_encoded_point(compress).as_ref());
privbuf.copy_from_slice(privkey.to_nonzero_scalar().to_bytes().as_ref());
- Ok(0)
+
+ Ok(())
}
- &_ => todo!(),
+ &_ => Err(type_error(format!("Unsupported curve: {}", curve))),
}
}