pixel-react 1.15.21 → 1.15.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_virtual/aesCipherSuites.js +4 -0
- package/lib/_virtual/aesCipherSuites.js.map +1 -0
- package/lib/_virtual/asn1-validator.js +4 -0
- package/lib/_virtual/asn1-validator.js.map +1 -0
- package/lib/_virtual/asn1.js +4 -0
- package/lib/_virtual/asn1.js.map +1 -0
- package/lib/_virtual/cipherModes.js +4 -0
- package/lib/_virtual/cipherModes.js.map +1 -0
- package/lib/_virtual/hmac.js +4 -0
- package/lib/_virtual/hmac.js.map +1 -0
- package/lib/_virtual/index11.js +2 -2
- package/lib/_virtual/index12.js +2 -2
- package/lib/_virtual/index13.js +2 -2
- package/lib/_virtual/index14.js +4 -0
- package/lib/_virtual/index14.js.map +1 -0
- package/lib/_virtual/index2.js +5 -3
- package/lib/_virtual/index2.js.map +1 -1
- package/lib/_virtual/index3.js +4 -2
- package/lib/_virtual/index3.js.map +1 -1
- package/lib/_virtual/index4.js +2 -4
- package/lib/_virtual/index4.js.map +1 -1
- package/lib/_virtual/index5.js +4 -2
- package/lib/_virtual/index5.js.map +1 -1
- package/lib/_virtual/index6.js +2 -2
- package/lib/_virtual/index7.js +2 -6
- package/lib/_virtual/index7.js.map +1 -1
- package/lib/_virtual/index8.js +6 -2
- package/lib/_virtual/index8.js.map +1 -1
- package/lib/_virtual/index9.js +2 -2
- package/lib/_virtual/md5.js +4 -0
- package/lib/_virtual/md5.js.map +1 -0
- package/lib/_virtual/mgf1.js +4 -0
- package/lib/_virtual/mgf1.js.map +1 -0
- package/lib/_virtual/oids.js +4 -0
- package/lib/_virtual/oids.js.map +1 -0
- package/lib/_virtual/pem.js +4 -0
- package/lib/_virtual/pem.js.map +1 -0
- package/lib/_virtual/pkcs1.js +4 -0
- package/lib/_virtual/pkcs1.js.map +1 -0
- package/lib/_virtual/pkcs12.js +4 -0
- package/lib/_virtual/pkcs12.js.map +1 -0
- package/lib/_virtual/pkcs7.js +4 -0
- package/lib/_virtual/pkcs7.js.map +1 -0
- package/lib/_virtual/pkcs7asn1.js +4 -0
- package/lib/_virtual/pkcs7asn1.js.map +1 -0
- package/lib/_virtual/pki.js +4 -0
- package/lib/_virtual/pki.js.map +1 -0
- package/lib/_virtual/prime.js +4 -0
- package/lib/_virtual/prime.js.map +1 -0
- package/lib/_virtual/prng.js +4 -0
- package/lib/_virtual/prng.js.map +1 -0
- package/lib/_virtual/pss.js +4 -0
- package/lib/_virtual/pss.js.map +1 -0
- package/lib/_virtual/random.js +4 -0
- package/lib/_virtual/random.js.map +1 -0
- package/lib/_virtual/sha1.js +4 -0
- package/lib/_virtual/sha1.js.map +1 -0
- package/lib/_virtual/sha256.js +4 -0
- package/lib/_virtual/sha256.js.map +1 -0
- package/lib/_virtual/sha512.js +4 -0
- package/lib/_virtual/sha512.js.map +1 -0
- package/lib/_virtual/ssh.js +4 -0
- package/lib/_virtual/ssh.js.map +1 -0
- package/lib/_virtual/util.js +4 -0
- package/lib/_virtual/util.js.map +1 -0
- package/lib/_virtual/x509.js +4 -0
- package/lib/_virtual/x509.js.map +1 -0
- package/lib/assets/icons/testify_icon.svg.js +6 -0
- package/lib/assets/icons/testify_icon.svg.js.map +1 -0
- package/lib/assets/icons/testify_loader.svg.js +6 -0
- package/lib/assets/icons/testify_loader.svg.js.map +1 -0
- package/lib/assets/icons/testify_logo_name.svg.js +6 -0
- package/lib/assets/icons/testify_logo_name.svg.js.map +1 -0
- package/lib/components/AllProjectsDropdown/AllProjectsDropdown.js +3 -1
- package/lib/components/AllProjectsDropdown/AllProjectsDropdown.js.map +1 -1
- package/lib/components/Charts/DashboardDonutChart/DashboardDonutChart.js +2 -9
- package/lib/components/Charts/DashboardDonutChart/DashboardDonutChart.js.map +1 -1
- package/lib/components/Charts/DashboardDonutChart/types.d.ts +1 -1
- package/lib/components/ConditionalDropdown/ConditionalDropdown.js +2 -9
- package/lib/components/ConditionalDropdown/ConditionalDropdown.js.map +1 -1
- package/lib/components/Editor/Editor.js +37 -17
- package/lib/components/Editor/Editor.js.map +1 -1
- package/lib/components/Icon/iconList.js +6 -0
- package/lib/components/Icon/iconList.js.map +1 -1
- package/lib/components/MultiSelect/MultiSelect.js +9 -10
- package/lib/components/MultiSelect/MultiSelect.js.map +1 -1
- package/lib/components/PhoneInput/PhoneInput.js +1 -0
- package/lib/components/PhoneInput/PhoneInput.js.map +1 -1
- package/lib/components/SessionDropdown/SessionDropdown.js +4 -2
- package/lib/components/SessionDropdown/SessionDropdown.js.map +1 -1
- package/lib/index.cjs +27423 -379
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/node_modules/classnames/index.js +1 -1
- package/lib/node_modules/input-format/modules/react/Input.js +1 -1
- package/lib/node_modules/js-beautify/js/index.js +1 -1
- package/lib/node_modules/js-beautify/js/src/html/beautifier.js +1 -1
- package/lib/node_modules/js-beautify/js/src/html/index.js +1 -1
- package/lib/node_modules/js-beautify/js/src/html/options.js +1 -1
- package/lib/node_modules/js-beautify/js/src/html/tokenizer.js +1 -1
- package/lib/node_modules/js-beautify/js/src/index.js +1 -1
- package/lib/node_modules/js-beautify/js/src/javascript/beautifier.js +1 -1
- package/lib/node_modules/js-beautify/js/src/javascript/index.js +1 -1
- package/lib/node_modules/js-beautify/js/src/javascript/options.js +1 -1
- package/lib/node_modules/js-beautify/js/src/javascript/tokenizer.js +1 -1
- package/lib/node_modules/node-forge/lib/aes.js +1014 -0
- package/lib/node_modules/node-forge/lib/aes.js.map +1 -0
- package/lib/node_modules/node-forge/lib/aesCipherSuites.js +286 -0
- package/lib/node_modules/node-forge/lib/aesCipherSuites.js.map +1 -0
- package/lib/node_modules/node-forge/lib/asn1-validator.js +100 -0
- package/lib/node_modules/node-forge/lib/asn1-validator.js.map +1 -0
- package/lib/node_modules/node-forge/lib/asn1.js +1379 -0
- package/lib/node_modules/node-forge/lib/asn1.js.map +1 -0
- package/lib/node_modules/node-forge/lib/baseN.js +181 -0
- package/lib/node_modules/node-forge/lib/baseN.js.map +1 -0
- package/lib/node_modules/node-forge/lib/cipher.js +236 -0
- package/lib/node_modules/node-forge/lib/cipher.js.map +1 -0
- package/lib/node_modules/node-forge/lib/cipherModes.js +936 -0
- package/lib/node_modules/node-forge/lib/cipherModes.js.map +1 -0
- package/lib/node_modules/node-forge/lib/des.js +467 -0
- package/lib/node_modules/node-forge/lib/des.js.map +1 -0
- package/lib/node_modules/node-forge/lib/ed25519.js +1108 -0
- package/lib/node_modules/node-forge/lib/ed25519.js.map +1 -0
- package/lib/node_modules/node-forge/lib/forge.js +23 -0
- package/lib/node_modules/node-forge/lib/forge.js.map +1 -0
- package/lib/node_modules/node-forge/lib/hmac.js +158 -0
- package/lib/node_modules/node-forge/lib/hmac.js.map +1 -0
- package/lib/node_modules/node-forge/lib/index.js +70 -0
- package/lib/node_modules/node-forge/lib/index.js.map +1 -0
- package/lib/node_modules/node-forge/lib/jsbn.js +1481 -0
- package/lib/node_modules/node-forge/lib/jsbn.js.map +1 -0
- package/lib/node_modules/node-forge/lib/kem.js +178 -0
- package/lib/node_modules/node-forge/lib/kem.js.map +1 -0
- package/lib/node_modules/node-forge/lib/log.js +325 -0
- package/lib/node_modules/node-forge/lib/log.js.map +1 -0
- package/lib/node_modules/node-forge/lib/md.all.js +28 -0
- package/lib/node_modules/node-forge/lib/md.all.js.map +1 -0
- package/lib/node_modules/node-forge/lib/md.js +22 -0
- package/lib/node_modules/node-forge/lib/md.js.map +1 -0
- package/lib/node_modules/node-forge/lib/md5.js +288 -0
- package/lib/node_modules/node-forge/lib/md5.js.map +1 -0
- package/lib/node_modules/node-forge/lib/mgf.js +24 -0
- package/lib/node_modules/node-forge/lib/mgf.js.map +1 -0
- package/lib/node_modules/node-forge/lib/mgf1.js +68 -0
- package/lib/node_modules/node-forge/lib/mgf1.js.map +1 -0
- package/lib/node_modules/node-forge/lib/oids.js +185 -0
- package/lib/node_modules/node-forge/lib/oids.js.map +1 -0
- package/lib/node_modules/node-forge/lib/pbe.js +966 -0
- package/lib/node_modules/node-forge/lib/pbe.js.map +1 -0
- package/lib/node_modules/node-forge/lib/pbkdf2.js +209 -0
- package/lib/node_modules/node-forge/lib/pbkdf2.js.map +1 -0
- package/lib/node_modules/node-forge/lib/pem.js +250 -0
- package/lib/node_modules/node-forge/lib/pem.js.map +1 -0
- package/lib/node_modules/node-forge/lib/pkcs1.js +273 -0
- package/lib/node_modules/node-forge/lib/pkcs1.js.map +1 -0
- package/lib/node_modules/node-forge/lib/pkcs12.js +980 -0
- package/lib/node_modules/node-forge/lib/pkcs12.js.map +1 -0
- package/lib/node_modules/node-forge/lib/pkcs7.js +1073 -0
- package/lib/node_modules/node-forge/lib/pkcs7.js.map +1 -0
- package/lib/node_modules/node-forge/lib/pkcs7asn1.js +415 -0
- package/lib/node_modules/node-forge/lib/pkcs7asn1.js.map +1 -0
- package/lib/node_modules/node-forge/lib/pki.js +125 -0
- package/lib/node_modules/node-forge/lib/pki.js.map +1 -0
- package/lib/node_modules/node-forge/lib/prime.js +297 -0
- package/lib/node_modules/node-forge/lib/prime.js.map +1 -0
- package/lib/node_modules/node-forge/lib/prng.js +433 -0
- package/lib/node_modules/node-forge/lib/prng.js.map +1 -0
- package/lib/node_modules/node-forge/lib/pss.js +246 -0
- package/lib/node_modules/node-forge/lib/pss.js.map +1 -0
- package/lib/node_modules/node-forge/lib/random.js +191 -0
- package/lib/node_modules/node-forge/lib/random.js.map +1 -0
- package/lib/node_modules/node-forge/lib/rc2.js +382 -0
- package/lib/node_modules/node-forge/lib/rc2.js.map +1 -0
- package/lib/node_modules/node-forge/lib/rsa.js +1815 -0
- package/lib/node_modules/node-forge/lib/rsa.js.map +1 -0
- package/lib/node_modules/node-forge/lib/sha1.js +325 -0
- package/lib/node_modules/node-forge/lib/sha1.js.map +1 -0
- package/lib/node_modules/node-forge/lib/sha256.js +306 -0
- package/lib/node_modules/node-forge/lib/sha256.js.map +1 -0
- package/lib/node_modules/node-forge/lib/sha512.js +479 -0
- package/lib/node_modules/node-forge/lib/sha512.js.map +1 -0
- package/lib/node_modules/node-forge/lib/ssh.js +244 -0
- package/lib/node_modules/node-forge/lib/ssh.js.map +1 -0
- package/lib/node_modules/node-forge/lib/tls.js +4207 -0
- package/lib/node_modules/node-forge/lib/tls.js.map +1 -0
- package/lib/node_modules/node-forge/lib/util.js +2565 -0
- package/lib/node_modules/node-forge/lib/util.js.map +1 -0
- package/lib/node_modules/node-forge/lib/x509.js +2986 -0
- package/lib/node_modules/node-forge/lib/x509.js.map +1 -0
- package/lib/node_modules/prop-types/index.js +1 -1
- package/lib/node_modules/react-async-script/lib/esm/async-script-loader.js +1 -1
- package/lib/node_modules/react-google-recaptcha/lib/esm/recaptcha.js +1 -1
- package/lib/node_modules/react-is/index.js +1 -1
- package/lib/node_modules/react-phone-number-input/modules/CountryIcon.js +1 -1
- package/lib/node_modules/react-phone-number-input/modules/CountrySelect.js +1 -1
- package/lib/node_modules/react-phone-number-input/modules/Flag.js +1 -1
- package/lib/node_modules/react-phone-number-input/modules/InputBasic.js +1 -1
- package/lib/node_modules/react-phone-number-input/modules/InputSmart.js +1 -1
- package/lib/node_modules/react-phone-number-input/modules/InternationalIcon.js +1 -1
- package/lib/node_modules/react-phone-number-input/modules/PhoneInputWithCountry.js +1 -1
- package/lib/node_modules/react-phone-number-input/modules/PropTypes.js +1 -1
- package/lib/node_modules/scheduler/index.js +1 -1
- package/lib/node_modules/use-context-selector/dist/index.js +1 -1
- package/lib/styles.css +1 -1
- package/lib/styles.css.map +1 -1
- package/lib/utils/getEncryptedData/getEncryptedData.js +10 -13
- package/lib/utils/getEncryptedData/getEncryptedData.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
import { __module as prng } from '../../../_virtual/prng.js';
|
|
2
|
+
import { __require as requireForge } from './forge.js';
|
|
3
|
+
import { __require as requireUtil } from './util.js';
|
|
4
|
+
import require$$4 from 'crypto';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A javascript implementation of a cryptographically-secure
|
|
8
|
+
* Pseudo Random Number Generator (PRNG). The Fortuna algorithm is followed
|
|
9
|
+
* here though the use of SHA-256 is not enforced; when generating an
|
|
10
|
+
* a PRNG context, the hashing algorithm and block cipher used for
|
|
11
|
+
* the generator are specified via a plugin.
|
|
12
|
+
*
|
|
13
|
+
* @author Dave Longley
|
|
14
|
+
*
|
|
15
|
+
* Copyright (c) 2010-2014 Digital Bazaar, Inc.
|
|
16
|
+
*/
|
|
17
|
+
var hasRequiredPrng;
|
|
18
|
+
function requirePrng() {
|
|
19
|
+
if (hasRequiredPrng) return prng.exports;
|
|
20
|
+
hasRequiredPrng = 1;
|
|
21
|
+
var forge = requireForge();
|
|
22
|
+
requireUtil();
|
|
23
|
+
var _crypto = null;
|
|
24
|
+
if (forge.util.isNodejs && !forge.options.usePureJavaScript && !process.versions['node-webkit']) {
|
|
25
|
+
_crypto = require$$4;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* PRNG API */
|
|
29
|
+
var prng$1 = prng.exports = forge.prng = forge.prng || {};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Creates a new PRNG context.
|
|
33
|
+
*
|
|
34
|
+
* A PRNG plugin must be passed in that will provide:
|
|
35
|
+
*
|
|
36
|
+
* 1. A function that initializes the key and seed of a PRNG context. It
|
|
37
|
+
* will be given a 16 byte key and a 16 byte seed. Any key expansion
|
|
38
|
+
* or transformation of the seed from a byte string into an array of
|
|
39
|
+
* integers (or similar) should be performed.
|
|
40
|
+
* 2. The cryptographic function used by the generator. It takes a key and
|
|
41
|
+
* a seed.
|
|
42
|
+
* 3. A seed increment function. It takes the seed and returns seed + 1.
|
|
43
|
+
* 4. An api to create a message digest.
|
|
44
|
+
*
|
|
45
|
+
* For an example, see random.js.
|
|
46
|
+
*
|
|
47
|
+
* @param plugin the PRNG plugin to use.
|
|
48
|
+
*/
|
|
49
|
+
prng$1.create = function (plugin) {
|
|
50
|
+
var ctx = {
|
|
51
|
+
plugin: plugin,
|
|
52
|
+
key: null,
|
|
53
|
+
seed: null,
|
|
54
|
+
time: null,
|
|
55
|
+
// number of reseeds so far
|
|
56
|
+
reseeds: 0,
|
|
57
|
+
// amount of data generated so far
|
|
58
|
+
generated: 0,
|
|
59
|
+
// no initial key bytes
|
|
60
|
+
keyBytes: ''
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// create 32 entropy pools (each is a message digest)
|
|
64
|
+
var md = plugin.md;
|
|
65
|
+
var pools = new Array(32);
|
|
66
|
+
for (var i = 0; i < 32; ++i) {
|
|
67
|
+
pools[i] = md.create();
|
|
68
|
+
}
|
|
69
|
+
ctx.pools = pools;
|
|
70
|
+
|
|
71
|
+
// entropy pools are written to cyclically, starting at index 0
|
|
72
|
+
ctx.pool = 0;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Generates random bytes. The bytes may be generated synchronously or
|
|
76
|
+
* asynchronously. Web workers must use the asynchronous interface or
|
|
77
|
+
* else the behavior is undefined.
|
|
78
|
+
*
|
|
79
|
+
* @param count the number of random bytes to generate.
|
|
80
|
+
* @param [callback(err, bytes)] called once the operation completes.
|
|
81
|
+
*
|
|
82
|
+
* @return count random bytes as a string.
|
|
83
|
+
*/
|
|
84
|
+
ctx.generate = function (count, callback) {
|
|
85
|
+
// do synchronously
|
|
86
|
+
if (!callback) {
|
|
87
|
+
return ctx.generateSync(count);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// simple generator using counter-based CBC
|
|
91
|
+
var cipher = ctx.plugin.cipher;
|
|
92
|
+
var increment = ctx.plugin.increment;
|
|
93
|
+
var formatKey = ctx.plugin.formatKey;
|
|
94
|
+
var formatSeed = ctx.plugin.formatSeed;
|
|
95
|
+
var b = forge.util.createBuffer();
|
|
96
|
+
|
|
97
|
+
// paranoid deviation from Fortuna:
|
|
98
|
+
// reset key for every request to protect previously
|
|
99
|
+
// generated random bytes should the key be discovered;
|
|
100
|
+
// there is no 100ms based reseeding because of this
|
|
101
|
+
// forced reseed for every `generate` call
|
|
102
|
+
ctx.key = null;
|
|
103
|
+
generate();
|
|
104
|
+
function generate(err) {
|
|
105
|
+
if (err) {
|
|
106
|
+
return callback(err);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// sufficient bytes generated
|
|
110
|
+
if (b.length() >= count) {
|
|
111
|
+
return callback(null, b.getBytes(count));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// if amount of data generated is greater than 1 MiB, trigger reseed
|
|
115
|
+
if (ctx.generated > 0xfffff) {
|
|
116
|
+
ctx.key = null;
|
|
117
|
+
}
|
|
118
|
+
if (ctx.key === null) {
|
|
119
|
+
// prevent stack overflow
|
|
120
|
+
return forge.util.nextTick(function () {
|
|
121
|
+
_reseed(generate);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// generate the random bytes
|
|
126
|
+
var bytes = cipher(ctx.key, ctx.seed);
|
|
127
|
+
ctx.generated += bytes.length;
|
|
128
|
+
b.putBytes(bytes);
|
|
129
|
+
|
|
130
|
+
// generate bytes for a new key and seed
|
|
131
|
+
ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));
|
|
132
|
+
ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));
|
|
133
|
+
forge.util.setImmediate(generate);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Generates random bytes synchronously.
|
|
139
|
+
*
|
|
140
|
+
* @param count the number of random bytes to generate.
|
|
141
|
+
*
|
|
142
|
+
* @return count random bytes as a string.
|
|
143
|
+
*/
|
|
144
|
+
ctx.generateSync = function (count) {
|
|
145
|
+
// simple generator using counter-based CBC
|
|
146
|
+
var cipher = ctx.plugin.cipher;
|
|
147
|
+
var increment = ctx.plugin.increment;
|
|
148
|
+
var formatKey = ctx.plugin.formatKey;
|
|
149
|
+
var formatSeed = ctx.plugin.formatSeed;
|
|
150
|
+
|
|
151
|
+
// paranoid deviation from Fortuna:
|
|
152
|
+
// reset key for every request to protect previously
|
|
153
|
+
// generated random bytes should the key be discovered;
|
|
154
|
+
// there is no 100ms based reseeding because of this
|
|
155
|
+
// forced reseed for every `generateSync` call
|
|
156
|
+
ctx.key = null;
|
|
157
|
+
var b = forge.util.createBuffer();
|
|
158
|
+
while (b.length() < count) {
|
|
159
|
+
// if amount of data generated is greater than 1 MiB, trigger reseed
|
|
160
|
+
if (ctx.generated > 0xfffff) {
|
|
161
|
+
ctx.key = null;
|
|
162
|
+
}
|
|
163
|
+
if (ctx.key === null) {
|
|
164
|
+
_reseedSync();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// generate the random bytes
|
|
168
|
+
var bytes = cipher(ctx.key, ctx.seed);
|
|
169
|
+
ctx.generated += bytes.length;
|
|
170
|
+
b.putBytes(bytes);
|
|
171
|
+
|
|
172
|
+
// generate bytes for a new key and seed
|
|
173
|
+
ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));
|
|
174
|
+
ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));
|
|
175
|
+
}
|
|
176
|
+
return b.getBytes(count);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Private function that asynchronously reseeds a generator.
|
|
181
|
+
*
|
|
182
|
+
* @param callback(err) called once the operation completes.
|
|
183
|
+
*/
|
|
184
|
+
function _reseed(callback) {
|
|
185
|
+
if (ctx.pools[0].messageLength >= 32) {
|
|
186
|
+
_seed();
|
|
187
|
+
return callback();
|
|
188
|
+
}
|
|
189
|
+
// not enough seed data...
|
|
190
|
+
var needed = 32 - ctx.pools[0].messageLength << 5;
|
|
191
|
+
ctx.seedFile(needed, function (err, bytes) {
|
|
192
|
+
if (err) {
|
|
193
|
+
return callback(err);
|
|
194
|
+
}
|
|
195
|
+
ctx.collect(bytes);
|
|
196
|
+
_seed();
|
|
197
|
+
callback();
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Private function that synchronously reseeds a generator.
|
|
203
|
+
*/
|
|
204
|
+
function _reseedSync() {
|
|
205
|
+
if (ctx.pools[0].messageLength >= 32) {
|
|
206
|
+
return _seed();
|
|
207
|
+
}
|
|
208
|
+
// not enough seed data...
|
|
209
|
+
var needed = 32 - ctx.pools[0].messageLength << 5;
|
|
210
|
+
ctx.collect(ctx.seedFileSync(needed));
|
|
211
|
+
_seed();
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Private function that seeds a generator once enough bytes are available.
|
|
216
|
+
*/
|
|
217
|
+
function _seed() {
|
|
218
|
+
// update reseed count
|
|
219
|
+
ctx.reseeds = ctx.reseeds === 0xffffffff ? 0 : ctx.reseeds + 1;
|
|
220
|
+
|
|
221
|
+
// goal is to update `key` via:
|
|
222
|
+
// key = hash(key + s)
|
|
223
|
+
// where 's' is all collected entropy from selected pools, then...
|
|
224
|
+
|
|
225
|
+
// create a plugin-based message digest
|
|
226
|
+
var md = ctx.plugin.md.create();
|
|
227
|
+
|
|
228
|
+
// consume current key bytes
|
|
229
|
+
md.update(ctx.keyBytes);
|
|
230
|
+
|
|
231
|
+
// digest the entropy of pools whose index k meet the
|
|
232
|
+
// condition 'n mod 2^k == 0' where n is the number of reseeds
|
|
233
|
+
var _2powK = 1;
|
|
234
|
+
for (var k = 0; k < 32; ++k) {
|
|
235
|
+
if (ctx.reseeds % _2powK === 0) {
|
|
236
|
+
md.update(ctx.pools[k].digest().getBytes());
|
|
237
|
+
ctx.pools[k].start();
|
|
238
|
+
}
|
|
239
|
+
_2powK = _2powK << 1;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// get digest for key bytes
|
|
243
|
+
ctx.keyBytes = md.digest().getBytes();
|
|
244
|
+
|
|
245
|
+
// paranoid deviation from Fortuna:
|
|
246
|
+
// update `seed` via `seed = hash(key)`
|
|
247
|
+
// instead of initializing to zero once and only
|
|
248
|
+
// ever incrementing it
|
|
249
|
+
md.start();
|
|
250
|
+
md.update(ctx.keyBytes);
|
|
251
|
+
var seedBytes = md.digest().getBytes();
|
|
252
|
+
|
|
253
|
+
// update state
|
|
254
|
+
ctx.key = ctx.plugin.formatKey(ctx.keyBytes);
|
|
255
|
+
ctx.seed = ctx.plugin.formatSeed(seedBytes);
|
|
256
|
+
ctx.generated = 0;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* The built-in default seedFile. This seedFile is used when entropy
|
|
261
|
+
* is needed immediately.
|
|
262
|
+
*
|
|
263
|
+
* @param needed the number of bytes that are needed.
|
|
264
|
+
*
|
|
265
|
+
* @return the random bytes.
|
|
266
|
+
*/
|
|
267
|
+
function defaultSeedFile(needed) {
|
|
268
|
+
// use window.crypto.getRandomValues strong source of entropy if available
|
|
269
|
+
var getRandomValues = null;
|
|
270
|
+
var globalScope = forge.util.globalScope;
|
|
271
|
+
var _crypto = globalScope.crypto || globalScope.msCrypto;
|
|
272
|
+
if (_crypto && _crypto.getRandomValues) {
|
|
273
|
+
getRandomValues = function (arr) {
|
|
274
|
+
return _crypto.getRandomValues(arr);
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
var b = forge.util.createBuffer();
|
|
278
|
+
if (getRandomValues) {
|
|
279
|
+
while (b.length() < needed) {
|
|
280
|
+
// max byte length is 65536 before QuotaExceededError is thrown
|
|
281
|
+
// http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues
|
|
282
|
+
var count = Math.max(1, Math.min(needed - b.length(), 65536) / 4);
|
|
283
|
+
var entropy = new Uint32Array(Math.floor(count));
|
|
284
|
+
try {
|
|
285
|
+
getRandomValues(entropy);
|
|
286
|
+
for (var i = 0; i < entropy.length; ++i) {
|
|
287
|
+
b.putInt32(entropy[i]);
|
|
288
|
+
}
|
|
289
|
+
} catch (e) {
|
|
290
|
+
/* only ignore QuotaExceededError */
|
|
291
|
+
if (!(typeof QuotaExceededError !== 'undefined' && e instanceof QuotaExceededError)) {
|
|
292
|
+
throw e;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// be sad and add some weak random data
|
|
299
|
+
if (b.length() < needed) {
|
|
300
|
+
/* Draws from Park-Miller "minimal standard" 31 bit PRNG,
|
|
301
|
+
implemented with David G. Carta's optimization: with 32 bit math
|
|
302
|
+
and without division (Public Domain). */
|
|
303
|
+
var hi, lo, next;
|
|
304
|
+
var seed = Math.floor(Math.random() * 0x010000);
|
|
305
|
+
while (b.length() < needed) {
|
|
306
|
+
lo = 16807 * (seed & 0xFFFF);
|
|
307
|
+
hi = 16807 * (seed >> 16);
|
|
308
|
+
lo += (hi & 0x7FFF) << 16;
|
|
309
|
+
lo += hi >> 15;
|
|
310
|
+
lo = (lo & 0x7FFFFFFF) + (lo >> 31);
|
|
311
|
+
seed = lo & 0xFFFFFFFF;
|
|
312
|
+
|
|
313
|
+
// consume lower 3 bytes of seed
|
|
314
|
+
for (var i = 0; i < 3; ++i) {
|
|
315
|
+
// throw in more pseudo random
|
|
316
|
+
next = seed >>> (i << 3);
|
|
317
|
+
next ^= Math.floor(Math.random() * 0x0100);
|
|
318
|
+
b.putByte(next & 0xFF);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return b.getBytes(needed);
|
|
323
|
+
}
|
|
324
|
+
// initialize seed file APIs
|
|
325
|
+
if (_crypto) {
|
|
326
|
+
// use nodejs async API
|
|
327
|
+
ctx.seedFile = function (needed, callback) {
|
|
328
|
+
_crypto.randomBytes(needed, function (err, bytes) {
|
|
329
|
+
if (err) {
|
|
330
|
+
return callback(err);
|
|
331
|
+
}
|
|
332
|
+
callback(null, bytes.toString());
|
|
333
|
+
});
|
|
334
|
+
};
|
|
335
|
+
// use nodejs sync API
|
|
336
|
+
ctx.seedFileSync = function (needed) {
|
|
337
|
+
return _crypto.randomBytes(needed).toString();
|
|
338
|
+
};
|
|
339
|
+
} else {
|
|
340
|
+
ctx.seedFile = function (needed, callback) {
|
|
341
|
+
try {
|
|
342
|
+
callback(null, defaultSeedFile(needed));
|
|
343
|
+
} catch (e) {
|
|
344
|
+
callback(e);
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
ctx.seedFileSync = defaultSeedFile;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Adds entropy to a prng ctx's accumulator.
|
|
352
|
+
*
|
|
353
|
+
* @param bytes the bytes of entropy as a string.
|
|
354
|
+
*/
|
|
355
|
+
ctx.collect = function (bytes) {
|
|
356
|
+
// iterate over pools distributing entropy cyclically
|
|
357
|
+
var count = bytes.length;
|
|
358
|
+
for (var i = 0; i < count; ++i) {
|
|
359
|
+
ctx.pools[ctx.pool].update(bytes.substr(i, 1));
|
|
360
|
+
ctx.pool = ctx.pool === 31 ? 0 : ctx.pool + 1;
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Collects an integer of n bits.
|
|
366
|
+
*
|
|
367
|
+
* @param i the integer entropy.
|
|
368
|
+
* @param n the number of bits in the integer.
|
|
369
|
+
*/
|
|
370
|
+
ctx.collectInt = function (i, n) {
|
|
371
|
+
var bytes = '';
|
|
372
|
+
for (var x = 0; x < n; x += 8) {
|
|
373
|
+
bytes += String.fromCharCode(i >> x & 0xFF);
|
|
374
|
+
}
|
|
375
|
+
ctx.collect(bytes);
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Registers a Web Worker to receive immediate entropy from the main thread.
|
|
380
|
+
* This method is required until Web Workers can access the native crypto
|
|
381
|
+
* API. This method should be called twice for each created worker, once in
|
|
382
|
+
* the main thread, and once in the worker itself.
|
|
383
|
+
*
|
|
384
|
+
* @param worker the worker to register.
|
|
385
|
+
*/
|
|
386
|
+
ctx.registerWorker = function (worker) {
|
|
387
|
+
// worker receives random bytes
|
|
388
|
+
if (worker === self) {
|
|
389
|
+
ctx.seedFile = function (needed, callback) {
|
|
390
|
+
function listener(e) {
|
|
391
|
+
var data = e.data;
|
|
392
|
+
if (data.forge && data.forge.prng) {
|
|
393
|
+
self.removeEventListener('message', listener);
|
|
394
|
+
callback(data.forge.prng.err, data.forge.prng.bytes);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
self.addEventListener('message', listener);
|
|
398
|
+
self.postMessage({
|
|
399
|
+
forge: {
|
|
400
|
+
prng: {
|
|
401
|
+
needed: needed
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
};
|
|
406
|
+
} else {
|
|
407
|
+
// main thread sends random bytes upon request
|
|
408
|
+
var listener = function (e) {
|
|
409
|
+
var data = e.data;
|
|
410
|
+
if (data.forge && data.forge.prng) {
|
|
411
|
+
ctx.seedFile(data.forge.prng.needed, function (err, bytes) {
|
|
412
|
+
worker.postMessage({
|
|
413
|
+
forge: {
|
|
414
|
+
prng: {
|
|
415
|
+
err: err,
|
|
416
|
+
bytes: bytes
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
});
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
// TODO: do we need to remove the event listener when the worker dies?
|
|
424
|
+
worker.addEventListener('message', listener);
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
return ctx;
|
|
428
|
+
};
|
|
429
|
+
return prng.exports;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export { requirePrng as __require };
|
|
433
|
+
//# sourceMappingURL=prng.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prng.js","sources":["../../../../node_modules/node-forge/lib/prng.js"],"sourcesContent":["/**\n * A javascript implementation of a cryptographically-secure\n * Pseudo Random Number Generator (PRNG). The Fortuna algorithm is followed\n * here though the use of SHA-256 is not enforced; when generating an\n * a PRNG context, the hashing algorithm and block cipher used for\n * the generator are specified via a plugin.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nvar _crypto = null;\nif(forge.util.isNodejs && !forge.options.usePureJavaScript &&\n !process.versions['node-webkit']) {\n _crypto = require('crypto');\n}\n\n/* PRNG API */\nvar prng = module.exports = forge.prng = forge.prng || {};\n\n/**\n * Creates a new PRNG context.\n *\n * A PRNG plugin must be passed in that will provide:\n *\n * 1. A function that initializes the key and seed of a PRNG context. It\n * will be given a 16 byte key and a 16 byte seed. Any key expansion\n * or transformation of the seed from a byte string into an array of\n * integers (or similar) should be performed.\n * 2. The cryptographic function used by the generator. It takes a key and\n * a seed.\n * 3. A seed increment function. It takes the seed and returns seed + 1.\n * 4. An api to create a message digest.\n *\n * For an example, see random.js.\n *\n * @param plugin the PRNG plugin to use.\n */\nprng.create = function(plugin) {\n var ctx = {\n plugin: plugin,\n key: null,\n seed: null,\n time: null,\n // number of reseeds so far\n reseeds: 0,\n // amount of data generated so far\n generated: 0,\n // no initial key bytes\n keyBytes: ''\n };\n\n // create 32 entropy pools (each is a message digest)\n var md = plugin.md;\n var pools = new Array(32);\n for(var i = 0; i < 32; ++i) {\n pools[i] = md.create();\n }\n ctx.pools = pools;\n\n // entropy pools are written to cyclically, starting at index 0\n ctx.pool = 0;\n\n /**\n * Generates random bytes. The bytes may be generated synchronously or\n * asynchronously. Web workers must use the asynchronous interface or\n * else the behavior is undefined.\n *\n * @param count the number of random bytes to generate.\n * @param [callback(err, bytes)] called once the operation completes.\n *\n * @return count random bytes as a string.\n */\n ctx.generate = function(count, callback) {\n // do synchronously\n if(!callback) {\n return ctx.generateSync(count);\n }\n\n // simple generator using counter-based CBC\n var cipher = ctx.plugin.cipher;\n var increment = ctx.plugin.increment;\n var formatKey = ctx.plugin.formatKey;\n var formatSeed = ctx.plugin.formatSeed;\n var b = forge.util.createBuffer();\n\n // paranoid deviation from Fortuna:\n // reset key for every request to protect previously\n // generated random bytes should the key be discovered;\n // there is no 100ms based reseeding because of this\n // forced reseed for every `generate` call\n ctx.key = null;\n\n generate();\n\n function generate(err) {\n if(err) {\n return callback(err);\n }\n\n // sufficient bytes generated\n if(b.length() >= count) {\n return callback(null, b.getBytes(count));\n }\n\n // if amount of data generated is greater than 1 MiB, trigger reseed\n if(ctx.generated > 0xfffff) {\n ctx.key = null;\n }\n\n if(ctx.key === null) {\n // prevent stack overflow\n return forge.util.nextTick(function() {\n _reseed(generate);\n });\n }\n\n // generate the random bytes\n var bytes = cipher(ctx.key, ctx.seed);\n ctx.generated += bytes.length;\n b.putBytes(bytes);\n\n // generate bytes for a new key and seed\n ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));\n ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));\n\n forge.util.setImmediate(generate);\n }\n };\n\n /**\n * Generates random bytes synchronously.\n *\n * @param count the number of random bytes to generate.\n *\n * @return count random bytes as a string.\n */\n ctx.generateSync = function(count) {\n // simple generator using counter-based CBC\n var cipher = ctx.plugin.cipher;\n var increment = ctx.plugin.increment;\n var formatKey = ctx.plugin.formatKey;\n var formatSeed = ctx.plugin.formatSeed;\n\n // paranoid deviation from Fortuna:\n // reset key for every request to protect previously\n // generated random bytes should the key be discovered;\n // there is no 100ms based reseeding because of this\n // forced reseed for every `generateSync` call\n ctx.key = null;\n\n var b = forge.util.createBuffer();\n while(b.length() < count) {\n // if amount of data generated is greater than 1 MiB, trigger reseed\n if(ctx.generated > 0xfffff) {\n ctx.key = null;\n }\n\n if(ctx.key === null) {\n _reseedSync();\n }\n\n // generate the random bytes\n var bytes = cipher(ctx.key, ctx.seed);\n ctx.generated += bytes.length;\n b.putBytes(bytes);\n\n // generate bytes for a new key and seed\n ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));\n ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));\n }\n\n return b.getBytes(count);\n };\n\n /**\n * Private function that asynchronously reseeds a generator.\n *\n * @param callback(err) called once the operation completes.\n */\n function _reseed(callback) {\n if(ctx.pools[0].messageLength >= 32) {\n _seed();\n return callback();\n }\n // not enough seed data...\n var needed = (32 - ctx.pools[0].messageLength) << 5;\n ctx.seedFile(needed, function(err, bytes) {\n if(err) {\n return callback(err);\n }\n ctx.collect(bytes);\n _seed();\n callback();\n });\n }\n\n /**\n * Private function that synchronously reseeds a generator.\n */\n function _reseedSync() {\n if(ctx.pools[0].messageLength >= 32) {\n return _seed();\n }\n // not enough seed data...\n var needed = (32 - ctx.pools[0].messageLength) << 5;\n ctx.collect(ctx.seedFileSync(needed));\n _seed();\n }\n\n /**\n * Private function that seeds a generator once enough bytes are available.\n */\n function _seed() {\n // update reseed count\n ctx.reseeds = (ctx.reseeds === 0xffffffff) ? 0 : ctx.reseeds + 1;\n\n // goal is to update `key` via:\n // key = hash(key + s)\n // where 's' is all collected entropy from selected pools, then...\n\n // create a plugin-based message digest\n var md = ctx.plugin.md.create();\n\n // consume current key bytes\n md.update(ctx.keyBytes);\n\n // digest the entropy of pools whose index k meet the\n // condition 'n mod 2^k == 0' where n is the number of reseeds\n var _2powK = 1;\n for(var k = 0; k < 32; ++k) {\n if(ctx.reseeds % _2powK === 0) {\n md.update(ctx.pools[k].digest().getBytes());\n ctx.pools[k].start();\n }\n _2powK = _2powK << 1;\n }\n\n // get digest for key bytes\n ctx.keyBytes = md.digest().getBytes();\n\n // paranoid deviation from Fortuna:\n // update `seed` via `seed = hash(key)`\n // instead of initializing to zero once and only\n // ever incrementing it\n md.start();\n md.update(ctx.keyBytes);\n var seedBytes = md.digest().getBytes();\n\n // update state\n ctx.key = ctx.plugin.formatKey(ctx.keyBytes);\n ctx.seed = ctx.plugin.formatSeed(seedBytes);\n ctx.generated = 0;\n }\n\n /**\n * The built-in default seedFile. This seedFile is used when entropy\n * is needed immediately.\n *\n * @param needed the number of bytes that are needed.\n *\n * @return the random bytes.\n */\n function defaultSeedFile(needed) {\n // use window.crypto.getRandomValues strong source of entropy if available\n var getRandomValues = null;\n var globalScope = forge.util.globalScope;\n var _crypto = globalScope.crypto || globalScope.msCrypto;\n if(_crypto && _crypto.getRandomValues) {\n getRandomValues = function(arr) {\n return _crypto.getRandomValues(arr);\n };\n }\n\n var b = forge.util.createBuffer();\n if(getRandomValues) {\n while(b.length() < needed) {\n // max byte length is 65536 before QuotaExceededError is thrown\n // http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues\n var count = Math.max(1, Math.min(needed - b.length(), 65536) / 4);\n var entropy = new Uint32Array(Math.floor(count));\n try {\n getRandomValues(entropy);\n for(var i = 0; i < entropy.length; ++i) {\n b.putInt32(entropy[i]);\n }\n } catch(e) {\n /* only ignore QuotaExceededError */\n if(!(typeof QuotaExceededError !== 'undefined' &&\n e instanceof QuotaExceededError)) {\n throw e;\n }\n }\n }\n }\n\n // be sad and add some weak random data\n if(b.length() < needed) {\n /* Draws from Park-Miller \"minimal standard\" 31 bit PRNG,\n implemented with David G. Carta's optimization: with 32 bit math\n and without division (Public Domain). */\n var hi, lo, next;\n var seed = Math.floor(Math.random() * 0x010000);\n while(b.length() < needed) {\n lo = 16807 * (seed & 0xFFFF);\n hi = 16807 * (seed >> 16);\n lo += (hi & 0x7FFF) << 16;\n lo += hi >> 15;\n lo = (lo & 0x7FFFFFFF) + (lo >> 31);\n seed = lo & 0xFFFFFFFF;\n\n // consume lower 3 bytes of seed\n for(var i = 0; i < 3; ++i) {\n // throw in more pseudo random\n next = seed >>> (i << 3);\n next ^= Math.floor(Math.random() * 0x0100);\n b.putByte(next & 0xFF);\n }\n }\n }\n\n return b.getBytes(needed);\n }\n // initialize seed file APIs\n if(_crypto) {\n // use nodejs async API\n ctx.seedFile = function(needed, callback) {\n _crypto.randomBytes(needed, function(err, bytes) {\n if(err) {\n return callback(err);\n }\n callback(null, bytes.toString());\n });\n };\n // use nodejs sync API\n ctx.seedFileSync = function(needed) {\n return _crypto.randomBytes(needed).toString();\n };\n } else {\n ctx.seedFile = function(needed, callback) {\n try {\n callback(null, defaultSeedFile(needed));\n } catch(e) {\n callback(e);\n }\n };\n ctx.seedFileSync = defaultSeedFile;\n }\n\n /**\n * Adds entropy to a prng ctx's accumulator.\n *\n * @param bytes the bytes of entropy as a string.\n */\n ctx.collect = function(bytes) {\n // iterate over pools distributing entropy cyclically\n var count = bytes.length;\n for(var i = 0; i < count; ++i) {\n ctx.pools[ctx.pool].update(bytes.substr(i, 1));\n ctx.pool = (ctx.pool === 31) ? 0 : ctx.pool + 1;\n }\n };\n\n /**\n * Collects an integer of n bits.\n *\n * @param i the integer entropy.\n * @param n the number of bits in the integer.\n */\n ctx.collectInt = function(i, n) {\n var bytes = '';\n for(var x = 0; x < n; x += 8) {\n bytes += String.fromCharCode((i >> x) & 0xFF);\n }\n ctx.collect(bytes);\n };\n\n /**\n * Registers a Web Worker to receive immediate entropy from the main thread.\n * This method is required until Web Workers can access the native crypto\n * API. This method should be called twice for each created worker, once in\n * the main thread, and once in the worker itself.\n *\n * @param worker the worker to register.\n */\n ctx.registerWorker = function(worker) {\n // worker receives random bytes\n if(worker === self) {\n ctx.seedFile = function(needed, callback) {\n function listener(e) {\n var data = e.data;\n if(data.forge && data.forge.prng) {\n self.removeEventListener('message', listener);\n callback(data.forge.prng.err, data.forge.prng.bytes);\n }\n }\n self.addEventListener('message', listener);\n self.postMessage({forge: {prng: {needed: needed}}});\n };\n } else {\n // main thread sends random bytes upon request\n var listener = function(e) {\n var data = e.data;\n if(data.forge && data.forge.prng) {\n ctx.seedFile(data.forge.prng.needed, function(err, bytes) {\n worker.postMessage({forge: {prng: {err: err, bytes: bytes}}});\n });\n }\n };\n // TODO: do we need to remove the event listener when the worker dies?\n worker.addEventListener('message', listener);\n }\n };\n\n return ctx;\n};\n"],"names":["forge","require$$0","require$$1","_crypto","util","isNodejs","options","usePureJavaScript","process","versions","require$$2","prng","prngModule","exports","create","plugin","ctx","key","seed","time","reseeds","generated","keyBytes","md","pools","Array","i","pool","generate","count","callback","generateSync","cipher","increment","formatKey","formatSeed","b","createBuffer","err","length","getBytes","nextTick","_reseed","bytes","putBytes","setImmediate","_reseedSync","messageLength","_seed","needed","seedFile","collect","seedFileSync","update","_2powK","k","digest","start","seedBytes","defaultSeedFile","getRandomValues","globalScope","crypto","msCrypto","arr","Math","max","min","entropy","Uint32Array","floor","putInt32","e","QuotaExceededError","hi","lo","next","random","putByte","randomBytes","toString","substr","collectInt","n","x","String","fromCharCode","registerWorker","worker","self","listener","data","removeEventListener","addEventListener","postMessage"],"mappings":"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","x_google_ignoreList":[0]}
|