26 lines
711 B
JavaScript
26 lines
711 B
JavaScript
/* eslint-env browser */
|
|
export const performance = typeof window === 'undefined' ? null : (typeof window.performance !== 'undefined' && window.performance) || null
|
|
|
|
const isoCrypto = typeof crypto === 'undefined' ? null : crypto
|
|
|
|
/**
|
|
* @type {function(number):ArrayBuffer}
|
|
*/
|
|
export const cryptoRandomBuffer = isoCrypto !== null
|
|
? len => {
|
|
// browser
|
|
const buf = new ArrayBuffer(len)
|
|
const arr = new Uint8Array(buf)
|
|
isoCrypto.getRandomValues(arr)
|
|
return buf
|
|
}
|
|
: len => {
|
|
// polyfill
|
|
const buf = new ArrayBuffer(len)
|
|
const arr = new Uint8Array(buf)
|
|
for (let i = 0; i < len; i++) {
|
|
arr[i] = Math.ceil((Math.random() * 0xFFFFFFFF) >>> 0)
|
|
}
|
|
return buf
|
|
}
|