Skip to content

Commit d203a57

Browse files
authored
crypto: getRandomValues, randomUUID (#99)
1 parent 1107a83 commit d203a57

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

nodelibs/browser/crypto.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76079,6 +76079,24 @@ const exports = dew();
7607976079
exports['randomBytes']; exports['rng']; exports['pseudoRandomBytes']; exports['prng']; exports['createHash']; exports['Hash']; exports['createHmac']; exports['Hmac']; exports['getHashes']; exports['pbkdf2']; exports['pbkdf2Sync']; exports['Cipher']; exports['createCipher']; exports['Cipheriv']; exports['createCipheriv']; exports['Decipher']; exports['createDecipher']; exports['Decipheriv']; exports['createDecipheriv']; exports['getCiphers']; exports['listCiphers']; exports['DiffieHellmanGroup']; exports['createDiffieHellmanGroup']; exports['getDiffieHellman']; exports['createDiffieHellman']; exports['DiffieHellman']; exports['createSign']; exports['Sign']; exports['createVerify']; exports['Verify']; exports['createECDH']; exports['publicEncrypt']; exports['privateEncrypt']; exports['publicDecrypt']; exports['privateDecrypt']; exports['randomFill']; exports['randomFillSync']; exports['createCredentials']; exports['constants'];
7608076080

7608176081
exports.webcrypto = globalThis.crypto;
76082+
exports.getRandomValues = function (abv) {
76083+
var l = abv.length;
76084+
while (l--) {
76085+
var bytes = exports.randomBytes(7);
76086+
var randomFloat = (bytes[0] % 32) / 32;
76087+
for (var i = 0; i < bytes.length; i++) {
76088+
var byte = bytes[i];
76089+
randomFloat = (randomFloat + byte) / 256;
76090+
}
76091+
abv[l] = Math.floor(randomFloat * 256);
76092+
}
76093+
return abv;
76094+
};
76095+
exports.randomUUID = function () {
76096+
return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, function (c) {
76097+
return (c ^ (exports.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16);
76098+
});
76099+
};
7608276100
var Cipher = exports.Cipher;
7608376101
var Cipheriv = exports.Cipheriv;
7608476102
var Decipher = exports.Decipher;
@@ -76119,5 +76137,7 @@ var randomFill = exports.randomFill;
7611976137
var randomFillSync = exports.randomFillSync;
7612076138
var rng = exports.rng;
7612176139
var webcrypto = exports.webcrypto;
76140+
var getRandomValues = exports.getRandomValues;
76141+
var randomUUID = exports.randomUUID;
7612276142

76123-
export { Cipher, Cipheriv, Decipher, Decipheriv, DiffieHellman, DiffieHellmanGroup, Hash, Hmac, Sign, Verify, constants, createCipher, createCipheriv, createCredentials, createDecipher, createDecipheriv, createDiffieHellman, createDiffieHellmanGroup, createECDH, createHash, createHmac, createSign, createVerify, exports as default, getCiphers, getDiffieHellman, getHashes, listCiphers, pbkdf2, pbkdf2Sync, privateDecrypt, privateEncrypt, prng, pseudoRandomBytes, publicDecrypt, publicEncrypt, randomBytes, randomFill, randomFillSync, rng, webcrypto };
76143+
export { Cipher, Cipheriv, Decipher, Decipheriv, DiffieHellman, DiffieHellmanGroup, Hash, Hmac, Sign, Verify, constants, createCipher, createCipheriv, createCredentials, createDecipher, createDecipheriv, createDiffieHellman, createDiffieHellmanGroup, createECDH, createHash, createHmac, createSign, createVerify, exports as default, getCiphers, getDiffieHellman, getHashes, getRandomValues, listCiphers, pbkdf2, pbkdf2Sync, privateDecrypt, privateEncrypt, prng, pseudoRandomBytes, publicDecrypt, publicEncrypt, randomBytes, randomFill, randomFillSync, randomUUID, rng, webcrypto };

src-browser/crypto.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
import crypto from 'crypto-browserify';
22
crypto.webcrypto = globalThis.crypto;
3+
crypto.getRandomValues = function (abv) {
4+
var l = abv.length;
5+
while (l--) {
6+
var bytes = crypto.randomBytes(7);
7+
var randomFloat = (bytes[0] % 32) / 32;
8+
for (var i = 0; i < bytes.length; i++) {
9+
var byte = bytes[i];
10+
randomFloat = (randomFloat + byte) / 256;
11+
}
12+
abv[l] = Math.floor(randomFloat * 256);
13+
}
14+
return abv;
15+
}
16+
crypto.randomUUID = function () {
17+
return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, function (c) {
18+
return (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16);
19+
});
20+
}
321
export default crypto;
422
export var Cipher = crypto.Cipher;
523
export var Cipheriv = crypto.Cipheriv;
@@ -41,3 +59,5 @@ export var randomFill = crypto.randomFill;
4159
export var randomFillSync = crypto.randomFillSync;
4260
export var rng = crypto.rng;
4361
export var webcrypto = crypto.webcrypto;
62+
export var getRandomValues = crypto.getRandomValues;
63+
export var randomUUID = crypto.randomUUID;

0 commit comments

Comments
 (0)