28 lines
807 B
TypeScript
28 lines
807 B
TypeScript
declare const window: any;
|
|
declare const self: any;
|
|
|
|
export class Random {
|
|
/**
|
|
* Returns `count` cryptographically secure random bytes
|
|
*/
|
|
public static getBytes(count: number): Uint8Array {
|
|
try {
|
|
const globalObject = typeof window === "object" ? window : self;
|
|
const cryptoApi =
|
|
typeof globalObject.crypto !== "undefined" ? globalObject.crypto : globalObject.msCrypto;
|
|
|
|
const out = new Uint8Array(count);
|
|
cryptoApi.getRandomValues(out);
|
|
return out;
|
|
} catch {
|
|
try {
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
const crypto = require("crypto");
|
|
return new Uint8Array([...crypto.randomBytes(count)]);
|
|
} catch {
|
|
throw new Error("No secure random number generator found");
|
|
}
|
|
}
|
|
}
|
|
}
|