summaryrefslogtreecommitdiff
path: root/extensions/crypto/01_crypto.js
diff options
context:
space:
mode:
authorAndy Hayden <andyhayden1@gmail.com>2021-04-30 12:51:48 -0700
committerGitHub <noreply@github.com>2021-04-30 15:51:48 -0400
commit684c357136fd44f9d5a1b8bb4402400ed1354677 (patch)
treeebc14b1d01b6643dd4d588516692dffc0f8fcb52 /extensions/crypto/01_crypto.js
parentabaec7a88e991188d885bede652f35d76ab4f340 (diff)
Rename crate_ops to extensions (#10431)
Diffstat (limited to 'extensions/crypto/01_crypto.js')
-rw-r--r--extensions/crypto/01_crypto.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/extensions/crypto/01_crypto.js b/extensions/crypto/01_crypto.js
new file mode 100644
index 000000000..dba6b0091
--- /dev/null
+++ b/extensions/crypto/01_crypto.js
@@ -0,0 +1,50 @@
+// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+"use strict";
+
+((window) => {
+ const core = window.Deno.core;
+
+ function getRandomValues(arrayBufferView) {
+ if (!ArrayBuffer.isView(arrayBufferView)) {
+ throw new TypeError(
+ "Argument 1 does not implement interface ArrayBufferView",
+ );
+ }
+ if (
+ !(
+ arrayBufferView instanceof Int8Array ||
+ arrayBufferView instanceof Uint8Array ||
+ arrayBufferView instanceof Int16Array ||
+ arrayBufferView instanceof Uint16Array ||
+ arrayBufferView instanceof Int32Array ||
+ arrayBufferView instanceof Uint32Array ||
+ arrayBufferView instanceof Uint8ClampedArray
+ )
+ ) {
+ throw new DOMException(
+ "The provided ArrayBufferView is not an integer array type",
+ "TypeMismatchError",
+ );
+ }
+ if (arrayBufferView.byteLength > 65536) {
+ throw new DOMException(
+ `The ArrayBufferView's byte length (${arrayBufferView.byteLength}) exceeds the number of bytes of entropy available via this API (65536)`,
+ "QuotaExceededError",
+ );
+ }
+ const ui8 = new Uint8Array(
+ arrayBufferView.buffer,
+ arrayBufferView.byteOffset,
+ arrayBufferView.byteLength,
+ );
+ core.opSync("op_crypto_get_random_values", null, ui8);
+ return arrayBufferView;
+ }
+
+ window.crypto = {
+ getRandomValues,
+ };
+ window.__bootstrap.crypto = {
+ getRandomValues,
+ };
+})(this);