diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2024-03-21 12:15:10 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-21 06:45:10 +0000 |
commit | 210f2911ce3f498524c0354e8f60d62e3dbc39ed (patch) | |
tree | 1b45294bbe2458ca2d95ccd0a6ea508ee287425f /ext/node/ops/crypto | |
parent | 5a716d1d06f73800b280259204789260774d465d (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.rs | 16 |
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))), } } |