2024-06-24 05:47:12 -04:00
|
|
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2024-10-16 04:57:28 -04:00
|
|
|
import { randomFillSync, randomUUID, timingSafeEqual } from "node:crypto";
|
|
|
|
import { Buffer } from "node:buffer";
|
2024-06-24 05:47:12 -04:00
|
|
|
import { assert, assertEquals } from "../../unit/test_util.ts";
|
2024-08-01 03:38:46 -04:00
|
|
|
import { assertNotEquals } from "@std/assert";
|
2024-06-24 05:47:12 -04:00
|
|
|
|
|
|
|
Deno.test("[node/crypto.getRandomUUID] works the same way as Web Crypto API", () => {
|
|
|
|
assertEquals(randomUUID().length, crypto.randomUUID().length);
|
|
|
|
assertEquals(typeof randomUUID(), typeof crypto.randomUUID());
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test("[node/crypto.randomFillSync] supported arguments", () => {
|
|
|
|
const buf = new Uint8Array(10);
|
|
|
|
|
|
|
|
assert(randomFillSync(buf));
|
|
|
|
assert(randomFillSync(buf, 0));
|
|
|
|
// @ts-ignore: arraybuffer arguments are valid.
|
|
|
|
assert(randomFillSync(buf.buffer));
|
|
|
|
assert(randomFillSync(new DataView(buf.buffer)));
|
|
|
|
});
|
2024-08-01 03:38:46 -04:00
|
|
|
|
|
|
|
Deno.test("[node/crypto.randomFillSync] array buffer view", () => {
|
|
|
|
const buf = new Uint8Array(32);
|
|
|
|
const view = new Uint8Array(buf.buffer, 8, 16);
|
|
|
|
|
|
|
|
assert(randomFillSync(view));
|
|
|
|
assertEquals(view.length, 16);
|
|
|
|
assertNotEquals(view, new Uint8Array(16));
|
|
|
|
assertEquals(buf.subarray(0, 8), new Uint8Array(8));
|
|
|
|
assertEquals(buf.subarray(24, 32), new Uint8Array(8));
|
|
|
|
});
|
2024-10-16 04:57:28 -04:00
|
|
|
|
|
|
|
Deno.test("[node/crypto.timingSafeEqual] compares equal Buffer with different byteOffset", () => {
|
|
|
|
const a = Buffer.from([212, 213]);
|
|
|
|
const b = Buffer.from([0, 0, 0, 0, 0, 0, 0, 0, 212, 213]).subarray(8);
|
|
|
|
|
|
|
|
assert(timingSafeEqual(a, b));
|
|
|
|
});
|