All files / ethers.js/src.ts/crypto random.ts

100% Statements 36/36
100% Branches 6/6
100% Functions 4/4
100% Lines 36/36

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 371x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 50x 50x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 51x 51x 1x 1x 1x 1x 3x 2x 2x 1x  
/**
 *  A **Cryptographically Secure Random Value** is one that has been
 *  generated with additional care take to prevent side-channels
 *  from allowing others to detect it and prevent others from through
 *  coincidence generate the same values.
 *
 *  @_subsection: api/crypto:Random Values  [about-crypto-random]
 */
import { randomBytes as crypto_random } from "./crypto.js";
 
let locked = false;
 
const _randomBytes = function(length: number): Uint8Array {
    return new Uint8Array(crypto_random(length));
}
 
let __randomBytes = _randomBytes;
 
/**
 *  Return %%length%% bytes of cryptographically secure random data.
 *
 *  @example:
 *    randomBytes(8)
 *    //_result:
 */
export function randomBytes(length: number): Uint8Array {
    return __randomBytes(length);
}
 
randomBytes._ = _randomBytes;
randomBytes.lock = function(): void { locked = true; }
randomBytes.register = function(func: (length: number) => Uint8Array) {
    if (locked) { throw new Error("randomBytes is locked"); }
    __randomBytes = func;
}
Object.freeze(randomBytes);