// Copyright 2018-2021 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; use std::path::PathBuf; 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_crypto_get_random_values( state: &mut OpState, _args: Value, zero_copy: &mut [ZeroCopyBuf], ) -> Result { assert_eq!(zero_copy.len(), 1); let maybe_seeded_rng = state.try_borrow_mut::(); 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!({})) } pub fn get_declaration() -> PathBuf { PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_crypto.d.ts") }