-
Notifications
You must be signed in to change notification settings - Fork 5.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add crypto.getRandomValues() (#2327)
- Loading branch information
1 parent
7f65495
commit 00f6fa4
Showing
9 changed files
with
128 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. | ||
import * as msg from "gen/cli/msg_generated"; | ||
import * as flatbuffers from "./flatbuffers"; | ||
import * as dispatch from "./dispatch"; | ||
import { assert } from "./util"; | ||
|
||
function req( | ||
typedArray: ArrayBufferView | ||
): [flatbuffers.Builder, msg.Any, flatbuffers.Offset, ArrayBufferView] { | ||
const builder = flatbuffers.createBuilder(); | ||
const inner = msg.GetRandomValues.createGetRandomValues(builder); | ||
return [builder, msg.Any.GetRandomValues, inner, typedArray]; | ||
} | ||
|
||
/** Synchronously collects cryptographically secure random values. The | ||
* underlying CSPRNG in use is Rust's `rand::rngs::ThreadRng`. | ||
* | ||
* const arr = new Uint8Array(32); | ||
* crypto.getRandomValues(arr); | ||
*/ | ||
export function getRandomValues< | ||
T extends | ||
| Int8Array | ||
| Uint8Array | ||
| Uint8ClampedArray | ||
| Int16Array | ||
| Uint16Array | ||
| Int32Array | ||
| Uint32Array | ||
>(typedArray: T): T { | ||
assert(typedArray !== null, "Input must not be null"); | ||
assert(typedArray.length <= 65536, "Input must not be longer than 65536"); | ||
dispatch.sendSync(...req(typedArray as ArrayBufferView)); | ||
return typedArray; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. | ||
import { test, assertNotEquals, assertStrictEq } from "./test_util.ts"; | ||
|
||
test(function getRandomValuesInt8Array(): void { | ||
const arr = new Int8Array(32); | ||
crypto.getRandomValues(arr); | ||
assertNotEquals(arr, new Int8Array(32)); | ||
}); | ||
|
||
test(function getRandomValuesUint8Array(): void { | ||
const arr = new Uint8Array(32); | ||
crypto.getRandomValues(arr); | ||
assertNotEquals(arr, new Uint8Array(32)); | ||
}); | ||
|
||
test(function getRandomValuesUint8ClampedArray(): void { | ||
const arr = new Uint8ClampedArray(32); | ||
crypto.getRandomValues(arr); | ||
assertNotEquals(arr, new Uint8ClampedArray(32)); | ||
}); | ||
|
||
test(function getRandomValuesInt16Array(): void { | ||
const arr = new Int16Array(4); | ||
crypto.getRandomValues(arr); | ||
assertNotEquals(arr, new Int16Array(4)); | ||
}); | ||
|
||
test(function getRandomValuesUint16Array(): void { | ||
const arr = new Uint16Array(4); | ||
crypto.getRandomValues(arr); | ||
assertNotEquals(arr, new Uint16Array(4)); | ||
}); | ||
|
||
test(function getRandomValuesInt32Array(): void { | ||
const arr = new Int32Array(8); | ||
crypto.getRandomValues(arr); | ||
assertNotEquals(arr, new Int32Array(8)); | ||
}); | ||
|
||
test(function getRandomValuesUint32Array(): void { | ||
const arr = new Uint32Array(8); | ||
crypto.getRandomValues(arr); | ||
assertNotEquals(arr, new Uint32Array(8)); | ||
}); | ||
|
||
test(function getRandomValuesReturnValue(): void { | ||
const arr = new Uint32Array(8); | ||
const rtn = crypto.getRandomValues(arr); | ||
assertNotEquals(arr, new Uint32Array(8)); | ||
assertStrictEq(rtn, arr); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters