diff options
Diffstat (limited to 'op_crates/crypto/lib.rs')
-rw-r--r-- | op_crates/crypto/lib.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/op_crates/crypto/lib.rs b/op_crates/crypto/lib.rs new file mode 100644 index 000000000..a211a29b3 --- /dev/null +++ b/op_crates/crypto/lib.rs @@ -0,0 +1,43 @@ +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. + +#![deny(warnings)] + +use deno_core::error::AnyError; +use deno_core::serde_json::json; +use deno_core::serde_json::Value; +use deno_core::JsRuntime; +use deno_core::OpState; +use deno_core::ZeroCopyBuf; +use rand::rngs::StdRng; +use rand::thread_rng; +use rand::Rng; + +pub use rand; // Re-export rand + +/// Execute this crates' JS source files. +pub fn init(isolate: &mut JsRuntime) { + let files = vec![( + "deno:op_crates/crypto/01_crypto.js", + include_str!("01_crypto.js"), + )]; + for (url, source_code) in files { + isolate.execute(url, source_code).unwrap(); + } +} + +pub fn op_get_random_values( + state: &mut OpState, + _args: Value, + zero_copy: &mut [ZeroCopyBuf], +) -> Result<Value, AnyError> { + assert_eq!(zero_copy.len(), 1); + let maybe_seeded_rng = state.try_borrow_mut::<StdRng>(); + if let Some(seeded_rng) = maybe_seeded_rng { + seeded_rng.fill(&mut *zero_copy[0]); + } else { + let mut rng = thread_rng(); + rng.fill(&mut *zero_copy[0]); + } + + Ok(json!({})) +} |