diff options
Diffstat (limited to 'ext/node/crypto/mod.rs')
-rw-r--r-- | ext/node/crypto/mod.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/ext/node/crypto/mod.rs b/ext/node/crypto/mod.rs index 55a7a5870..f818b96af 100644 --- a/ext/node/crypto/mod.rs +++ b/ext/node/crypto/mod.rs @@ -9,6 +9,8 @@ use deno_core::StringOrBuffer; use deno_core::ZeroCopyBuf; use hkdf::Hkdf; use num_bigint::BigInt; +use rand::distributions::Distribution; +use rand::distributions::Uniform; use rand::Rng; use std::future::Future; use std::rc::Rc; @@ -478,3 +480,13 @@ pub async fn op_node_hkdf_async( }) .await? } + +#[op] +pub fn op_node_random_int(min: i32, max: i32) -> Result<i32, AnyError> { + let mut rng = rand::thread_rng(); + // Uniform distribution is required to avoid Modulo Bias + // https://en.wikipedia.org/wiki/Fisher–Yates_shuffle#Modulo_bias + let dist = Uniform::from(min..max); + + Ok(dist.sample(&mut rng)) +} |