cosmjs-util/packages/crypto/src/random.ts
2020-06-09 17:33:49 +02:00

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");
}
}
}
}