From 5c1dfee3e3d9b5bc3bd5e2667e73fd993cd1eed5 Mon Sep 17 00:00:00 2001 From: Matei Aruxandei Date: Sat, 18 Nov 2023 13:18:26 +0000 Subject: [PATCH 1/3] Added subtle polyfill and pull request 215 --- index.js | 29 ++++++++++++++++++++++++++++- package.json | 3 ++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index b6d4d24..0b00ea4 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,29 @@ 'use strict' exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') + +exports.getRandomValues = function (abv) { + var l = abv.length + while (l--) { + var bytes = exports.randomBytes(7) + var randomFloat = (bytes[0] % 32) / 32 + + for (var i = 0; i < bytes.length; i++) { + var byte = bytes[i] + randomFloat = (randomFloat + byte) / 256 + } + + abv[l] = Math.floor(randomFloat * 256) + } + return abv +} + +exports.randomUUID = function () { + return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, function (c) { + return (c ^ (exports.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16) + }) +} + exports.createHash = exports.Hash = require('create-hash') exports.createHmac = exports.Hmac = require('create-hmac') @@ -65,6 +88,10 @@ exports.privateDecrypt = publicEncrypt.privateDecrypt // } // }) +var { Crypto } = require('@peculiar/webcrypto'); +var crypto = new Crypto(); +exports.subtle = crypto.subtle; + var rf = require('randomfill') exports.randomFill = rf.randomFill @@ -94,4 +121,4 @@ exports.constants = { 'POINT_CONVERSION_COMPRESSED': 2, 'POINT_CONVERSION_UNCOMPRESSED': 4, 'POINT_CONVERSION_HYBRID': 6 -} +} \ No newline at end of file diff --git a/package.json b/package.json index 7de383b..bbab25b 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,8 @@ "pbkdf2": "^3.0.3", "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "randomfill": "^1.0.3", + "@peculiar/webcrypto": "1.4.3" }, "devDependencies": { "hash-test-vectors": "~1.3.2", From 2142b5b3dfb762dc476da0ea1ea7903d0320e48b Mon Sep 17 00:00:00 2001 From: Matei Aruxandei Date: Sat, 18 Nov 2023 13:18:26 +0000 Subject: [PATCH 2/3] [New] add `getRandomValues`, `getRandomUUID`, `webcrypto` --- index.js | 29 +++++++++++++++++++++++++++++ package.json | 3 ++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index b6d4d24..a1ca975 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,31 @@ 'use strict' +var floor = Math.floor + exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') + +exports.getRandomValues = function getRandomValues(abv) { + var l = abv.length + while (l--) { + var bytes = exports.randomBytes(7) + var randomFloat = (bytes[0] % 32) / 32 + + for (var i = 0; i < bytes.length; i++) { + var byte = bytes[i] + randomFloat = (randomFloat + byte) / 256 + } + + abv[l] = floor(randomFloat * 256) + } + return abv +} + +exports.randomUUID = function randomUUID() { + return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, function (c) { + return (c ^ (exports.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16) + }) +} + exports.createHash = exports.Hash = require('create-hash') exports.createHmac = exports.Hmac = require('create-hmac') @@ -65,6 +90,10 @@ exports.privateDecrypt = publicEncrypt.privateDecrypt // } // }) +var { Crypto } = require('@peculiar/webcrypto') +var crypto = new Crypto() +exports.webcrypto = crypto + var rf = require('randomfill') exports.randomFill = rf.randomFill diff --git a/package.json b/package.json index 7de383b..bbab25b 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,8 @@ "pbkdf2": "^3.0.3", "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "randomfill": "^1.0.3", + "@peculiar/webcrypto": "1.4.3" }, "devDependencies": { "hash-test-vectors": "~1.3.2", From 3bdee0aba8047bb963959fdc395de33b2cca6552 Mon Sep 17 00:00:00 2001 From: Matei Aruxandei Date: Sun, 19 Nov 2023 19:21:55 +0000 Subject: [PATCH 3/3] trying directly with webcrypto --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 0b00ea4..3f2da24 100644 --- a/index.js +++ b/index.js @@ -90,7 +90,7 @@ exports.privateDecrypt = publicEncrypt.privateDecrypt var { Crypto } = require('@peculiar/webcrypto'); var crypto = new Crypto(); -exports.subtle = crypto.subtle; +exports.webcrypto = crypto; var rf = require('randomfill')