48 lines
965 B
JavaScript
48 lines
965 B
JavaScript
/*!
|
|
* random.js - randomness for bcoin
|
|
* Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).
|
|
* https://github.com/bcoin-org/bcoin
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
/**
|
|
* @module crypto.random
|
|
*/
|
|
|
|
const crypto = require('crypto');
|
|
|
|
/**
|
|
* Generate pseudo-random bytes.
|
|
* @function
|
|
* @param {Number} size
|
|
* @returns {Buffer}
|
|
*/
|
|
|
|
exports.randomBytes = crypto.randomBytes;
|
|
|
|
/**
|
|
* Generate a random uint32.
|
|
* Probably more cryptographically sound than
|
|
* `Math.random()`.
|
|
* @returns {Number}
|
|
*/
|
|
|
|
exports.randomInt = function randomInt() {
|
|
return exports.randomBytes(4).readUInt32LE(0, true);
|
|
};
|
|
|
|
/**
|
|
* Generate a random number within a range.
|
|
* Probably more cryptographically sound than
|
|
* `Math.random()`.
|
|
* @param {Number} min - Inclusive.
|
|
* @param {Number} max - Exclusive.
|
|
* @returns {Number}
|
|
*/
|
|
|
|
exports.randomRange = function randomRange(min, max) {
|
|
let num = exports.randomInt();
|
|
return Math.floor((num / 0x100000000) * (max - min) + min);
|
|
};
|