@ethersproject/json-wallets
Advanced tools
Comparing version 5.4.0 to 5.5.0
@@ -1,2 +0,2 @@ | ||
export declare const version = "json-wallets/5.4.0"; | ||
export declare const version = "json-wallets/5.5.0"; | ||
//# sourceMappingURL=_version.d.ts.map |
@@ -1,2 +0,2 @@ | ||
export const version = "json-wallets/5.4.0"; | ||
export const version = "json-wallets/5.5.0"; | ||
//# sourceMappingURL=_version.js.map |
@@ -1,2 +0,2 @@ | ||
export declare const version = "json-wallets/5.4.0"; | ||
export declare const version = "json-wallets/5.5.0"; | ||
//# sourceMappingURL=_version.d.ts.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.version = void 0; | ||
exports.version = "json-wallets/5.4.0"; | ||
exports.version = "json-wallets/5.5.0"; | ||
//# sourceMappingURL=_version.js.map |
@@ -47,11 +47,11 @@ "use strict"; | ||
var data = JSON.parse(json); | ||
password = utils_1.getPassword(password); | ||
password = (0, utils_1.getPassword)(password); | ||
// Ethereum Address | ||
var ethaddr = address_1.getAddress(utils_1.searchPath(data, "ethaddr")); | ||
var ethaddr = (0, address_1.getAddress)((0, utils_1.searchPath)(data, "ethaddr")); | ||
// Encrypted Seed | ||
var encseed = utils_1.looseArrayify(utils_1.searchPath(data, "encseed")); | ||
var encseed = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "encseed")); | ||
if (!encseed || (encseed.length % 16) !== 0) { | ||
logger.throwArgumentError("invalid encseed", "json", json); | ||
} | ||
var key = bytes_1.arrayify(pbkdf2_1.pbkdf2(password, password, 2000, 32, "sha256")).slice(0, 16); | ||
var key = (0, bytes_1.arrayify)((0, pbkdf2_1.pbkdf2)(password, password, 2000, 32, "sha256")).slice(0, 16); | ||
var iv = encseed.slice(0, 16); | ||
@@ -61,3 +61,3 @@ var encryptedSeed = encseed.slice(16); | ||
var aesCbc = new aes_js_1.default.ModeOfOperation.cbc(key, iv); | ||
var seed = aes_js_1.default.padding.pkcs7.strip(bytes_1.arrayify(aesCbc.decrypt(encryptedSeed))); | ||
var seed = aes_js_1.default.padding.pkcs7.strip((0, bytes_1.arrayify)(aesCbc.decrypt(encryptedSeed))); | ||
// This wallet format is weird... Convert the binary encoded hex to a string. | ||
@@ -68,4 +68,4 @@ var seedHex = ""; | ||
} | ||
var seedHexBytes = strings_1.toUtf8Bytes(seedHex); | ||
var privateKey = keccak256_1.keccak256(seedHexBytes); | ||
var seedHexBytes = (0, strings_1.toUtf8Bytes)(seedHex); | ||
var privateKey = (0, keccak256_1.keccak256)(seedHexBytes); | ||
return new CrowdsaleAccount({ | ||
@@ -72,0 +72,0 @@ _isCrowdsaleAccount: true, |
@@ -15,7 +15,7 @@ "use strict"; | ||
function decryptJsonWallet(json, password, progressCallback) { | ||
if (inspect_1.isCrowdsaleWallet(json)) { | ||
if ((0, inspect_1.isCrowdsaleWallet)(json)) { | ||
if (progressCallback) { | ||
progressCallback(0); | ||
} | ||
var account = crowdsale_1.decrypt(json, password); | ||
var account = (0, crowdsale_1.decrypt)(json, password); | ||
if (progressCallback) { | ||
@@ -26,4 +26,4 @@ progressCallback(1); | ||
} | ||
if (inspect_1.isKeystoreWallet(json)) { | ||
return keystore_1.decrypt(json, password, progressCallback); | ||
if ((0, inspect_1.isKeystoreWallet)(json)) { | ||
return (0, keystore_1.decrypt)(json, password, progressCallback); | ||
} | ||
@@ -34,7 +34,7 @@ return Promise.reject(new Error("invalid JSON wallet")); | ||
function decryptJsonWalletSync(json, password) { | ||
if (inspect_1.isCrowdsaleWallet(json)) { | ||
return crowdsale_1.decrypt(json, password); | ||
if ((0, inspect_1.isCrowdsaleWallet)(json)) { | ||
return (0, crowdsale_1.decrypt)(json, password); | ||
} | ||
if (inspect_1.isKeystoreWallet(json)) { | ||
return keystore_1.decryptSync(json, password); | ||
if ((0, inspect_1.isKeystoreWallet)(json)) { | ||
return (0, keystore_1.decryptSync)(json, password); | ||
} | ||
@@ -41,0 +41,0 @@ throw new Error("invalid JSON wallet"); |
@@ -37,3 +37,3 @@ "use strict"; | ||
try { | ||
return address_1.getAddress(JSON.parse(json).ethaddr); | ||
return (0, address_1.getAddress)(JSON.parse(json).ethaddr); | ||
} | ||
@@ -46,3 +46,3 @@ catch (error) { | ||
try { | ||
return address_1.getAddress(JSON.parse(json).address); | ||
return (0, address_1.getAddress)(JSON.parse(json).address); | ||
} | ||
@@ -49,0 +49,0 @@ catch (error) { |
@@ -88,8 +88,8 @@ "use strict"; | ||
function _decrypt(data, key, ciphertext) { | ||
var cipher = utils_1.searchPath(data, "crypto/cipher"); | ||
var cipher = (0, utils_1.searchPath)(data, "crypto/cipher"); | ||
if (cipher === "aes-128-ctr") { | ||
var iv = utils_1.looseArrayify(utils_1.searchPath(data, "crypto/cipherparams/iv")); | ||
var iv = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "crypto/cipherparams/iv")); | ||
var counter = new aes_js_1.default.Counter(iv); | ||
var aesCtr = new aes_js_1.default.ModeOfOperation.ctr(key, counter); | ||
return bytes_1.arrayify(aesCtr.decrypt(ciphertext)); | ||
return (0, bytes_1.arrayify)(aesCtr.decrypt(ciphertext)); | ||
} | ||
@@ -99,5 +99,5 @@ return null; | ||
function _getAccount(data, key) { | ||
var ciphertext = utils_1.looseArrayify(utils_1.searchPath(data, "crypto/ciphertext")); | ||
var computedMAC = bytes_1.hexlify(keccak256_1.keccak256(bytes_1.concat([key.slice(16, 32), ciphertext]))).substring(2); | ||
if (computedMAC !== utils_1.searchPath(data, "crypto/mac").toLowerCase()) { | ||
var ciphertext = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "crypto/ciphertext")); | ||
var computedMAC = (0, bytes_1.hexlify)((0, keccak256_1.keccak256)((0, bytes_1.concat)([key.slice(16, 32), ciphertext]))).substring(2); | ||
if (computedMAC !== (0, utils_1.searchPath)(data, "crypto/mac").toLowerCase()) { | ||
throw new Error("invalid password"); | ||
@@ -112,3 +112,3 @@ } | ||
var mnemonicKey = key.slice(32, 64); | ||
var address = transactions_1.computeAddress(privateKey); | ||
var address = (0, transactions_1.computeAddress)(privateKey); | ||
if (data.address) { | ||
@@ -119,3 +119,3 @@ var check = data.address.toLowerCase(); | ||
} | ||
if (address_1.getAddress(check) !== address) { | ||
if ((0, address_1.getAddress)(check) !== address) { | ||
throw new Error("address mismatch"); | ||
@@ -127,15 +127,15 @@ } | ||
address: address, | ||
privateKey: bytes_1.hexlify(privateKey) | ||
privateKey: (0, bytes_1.hexlify)(privateKey) | ||
}; | ||
// Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase | ||
if (utils_1.searchPath(data, "x-ethers/version") === "0.1") { | ||
var mnemonicCiphertext = utils_1.looseArrayify(utils_1.searchPath(data, "x-ethers/mnemonicCiphertext")); | ||
var mnemonicIv = utils_1.looseArrayify(utils_1.searchPath(data, "x-ethers/mnemonicCounter")); | ||
if ((0, utils_1.searchPath)(data, "x-ethers/version") === "0.1") { | ||
var mnemonicCiphertext = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "x-ethers/mnemonicCiphertext")); | ||
var mnemonicIv = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "x-ethers/mnemonicCounter")); | ||
var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv); | ||
var mnemonicAesCtr = new aes_js_1.default.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter); | ||
var path = utils_1.searchPath(data, "x-ethers/path") || hdnode_1.defaultPath; | ||
var locale = utils_1.searchPath(data, "x-ethers/locale") || "en"; | ||
var entropy = bytes_1.arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext)); | ||
var path = (0, utils_1.searchPath)(data, "x-ethers/path") || hdnode_1.defaultPath; | ||
var locale = (0, utils_1.searchPath)(data, "x-ethers/locale") || "en"; | ||
var entropy = (0, bytes_1.arrayify)(mnemonicAesCtr.decrypt(mnemonicCiphertext)); | ||
try { | ||
var mnemonic = hdnode_1.entropyToMnemonic(entropy, locale); | ||
var mnemonic = (0, hdnode_1.entropyToMnemonic)(entropy, locale); | ||
var node = hdnode_1.HDNode.fromMnemonic(mnemonic, null, locale).derivePath(path); | ||
@@ -159,3 +159,3 @@ if (node.privateKey != account.privateKey) { | ||
function pbkdf2Sync(passwordBytes, salt, count, dkLen, prfFunc) { | ||
return bytes_1.arrayify(pbkdf2_1.pbkdf2(passwordBytes, salt, count, dkLen, prfFunc)); | ||
return (0, bytes_1.arrayify)((0, pbkdf2_1.pbkdf2)(passwordBytes, salt, count, dkLen, prfFunc)); | ||
} | ||
@@ -166,4 +166,4 @@ function pbkdf2(passwordBytes, salt, count, dkLen, prfFunc) { | ||
function _computeKdfKey(data, password, pbkdf2Func, scryptFunc, progressCallback) { | ||
var passwordBytes = utils_1.getPassword(password); | ||
var kdf = utils_1.searchPath(data, "crypto/kdf"); | ||
var passwordBytes = (0, utils_1.getPassword)(password); | ||
var kdf = (0, utils_1.searchPath)(data, "crypto/kdf"); | ||
if (kdf && typeof (kdf) === "string") { | ||
@@ -174,6 +174,6 @@ var throwError = function (name, value) { | ||
if (kdf.toLowerCase() === "scrypt") { | ||
var salt = utils_1.looseArrayify(utils_1.searchPath(data, "crypto/kdfparams/salt")); | ||
var N = parseInt(utils_1.searchPath(data, "crypto/kdfparams/n")); | ||
var r = parseInt(utils_1.searchPath(data, "crypto/kdfparams/r")); | ||
var p = parseInt(utils_1.searchPath(data, "crypto/kdfparams/p")); | ||
var salt = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "crypto/kdfparams/salt")); | ||
var N = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/n")); | ||
var r = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/r")); | ||
var p = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/p")); | ||
// Check for all required parameters | ||
@@ -187,3 +187,3 @@ if (!N || !r || !p) { | ||
} | ||
var dkLen = parseInt(utils_1.searchPath(data, "crypto/kdfparams/dklen")); | ||
var dkLen = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/dklen")); | ||
if (dkLen !== 32) { | ||
@@ -195,5 +195,5 @@ throwError("dklen", dkLen); | ||
else if (kdf.toLowerCase() === "pbkdf2") { | ||
var salt = utils_1.looseArrayify(utils_1.searchPath(data, "crypto/kdfparams/salt")); | ||
var salt = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "crypto/kdfparams/salt")); | ||
var prfFunc = null; | ||
var prf = utils_1.searchPath(data, "crypto/kdfparams/prf"); | ||
var prf = (0, utils_1.searchPath)(data, "crypto/kdfparams/prf"); | ||
if (prf === "hmac-sha256") { | ||
@@ -208,4 +208,4 @@ prfFunc = "sha256"; | ||
} | ||
var count = parseInt(utils_1.searchPath(data, "crypto/kdfparams/c")); | ||
var dkLen = parseInt(utils_1.searchPath(data, "crypto/kdfparams/dklen")); | ||
var count = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/c")); | ||
var dkLen = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/dklen")); | ||
if (dkLen !== 32) { | ||
@@ -244,3 +244,3 @@ throwError("dklen", dkLen); | ||
// Check the address matches the private key | ||
if (address_1.getAddress(account.address) !== transactions_1.computeAddress(account.privateKey)) { | ||
if ((0, address_1.getAddress)(account.address) !== (0, transactions_1.computeAddress)(account.privateKey)) { | ||
throw new Error("address/privateKey mismatch"); | ||
@@ -268,4 +268,4 @@ } | ||
} | ||
var privateKey = bytes_1.arrayify(account.privateKey); | ||
var passwordBytes = utils_1.getPassword(password); | ||
var privateKey = (0, bytes_1.arrayify)(account.privateKey); | ||
var passwordBytes = (0, utils_1.getPassword)(password); | ||
var entropy = null; | ||
@@ -276,3 +276,3 @@ var path = null; | ||
var srcMnemonic = account.mnemonic; | ||
entropy = bytes_1.arrayify(hdnode_1.mnemonicToEntropy(srcMnemonic.phrase, srcMnemonic.locale || "en")); | ||
entropy = (0, bytes_1.arrayify)((0, hdnode_1.mnemonicToEntropy)(srcMnemonic.phrase, srcMnemonic.locale || "en")); | ||
path = srcMnemonic.path || hdnode_1.defaultPath; | ||
@@ -288,6 +288,6 @@ locale = srcMnemonic.locale || "en"; | ||
if (options.salt) { | ||
salt = bytes_1.arrayify(options.salt); | ||
salt = (0, bytes_1.arrayify)(options.salt); | ||
} | ||
else { | ||
salt = random_1.randomBytes(32); | ||
salt = (0, random_1.randomBytes)(32); | ||
; | ||
@@ -298,3 +298,3 @@ } | ||
if (options.iv) { | ||
iv = bytes_1.arrayify(options.iv); | ||
iv = (0, bytes_1.arrayify)(options.iv); | ||
if (iv.length !== 16) { | ||
@@ -305,3 +305,3 @@ throw new Error("invalid iv"); | ||
else { | ||
iv = random_1.randomBytes(16); | ||
iv = (0, random_1.randomBytes)(16); | ||
} | ||
@@ -311,3 +311,3 @@ // Override the uuid | ||
if (options.uuid) { | ||
uuidRandom = bytes_1.arrayify(options.uuid); | ||
uuidRandom = (0, bytes_1.arrayify)(options.uuid); | ||
if (uuidRandom.length !== 16) { | ||
@@ -318,3 +318,3 @@ throw new Error("invalid uuid"); | ||
else { | ||
uuidRandom = random_1.randomBytes(16); | ||
uuidRandom = (0, random_1.randomBytes)(16); | ||
} | ||
@@ -338,3 +338,3 @@ // Override the scrypt password-based key derivation function parameters | ||
return scrypt_js_1.default.scrypt(passwordBytes, salt, N, r, p, 64, progressCallback).then(function (key) { | ||
key = bytes_1.arrayify(key); | ||
key = (0, bytes_1.arrayify)(key); | ||
// This will be used to encrypt the wallet (as per Web3 secret storage) | ||
@@ -348,9 +348,9 @@ var derivedKey = key.slice(0, 16); | ||
var aesCtr = new aes_js_1.default.ModeOfOperation.ctr(derivedKey, counter); | ||
var ciphertext = bytes_1.arrayify(aesCtr.encrypt(privateKey)); | ||
var ciphertext = (0, bytes_1.arrayify)(aesCtr.encrypt(privateKey)); | ||
// Compute the message authentication code, used to check the password | ||
var mac = keccak256_1.keccak256(bytes_1.concat([macPrefix, ciphertext])); | ||
var mac = (0, keccak256_1.keccak256)((0, bytes_1.concat)([macPrefix, ciphertext])); | ||
// See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition | ||
var data = { | ||
address: account.address.substring(2).toLowerCase(), | ||
id: utils_1.uuidV4(uuidRandom), | ||
id: (0, utils_1.uuidV4)(uuidRandom), | ||
version: 3, | ||
@@ -360,8 +360,8 @@ Crypto: { | ||
cipherparams: { | ||
iv: bytes_1.hexlify(iv).substring(2), | ||
iv: (0, bytes_1.hexlify)(iv).substring(2), | ||
}, | ||
ciphertext: bytes_1.hexlify(ciphertext).substring(2), | ||
ciphertext: (0, bytes_1.hexlify)(ciphertext).substring(2), | ||
kdf: "scrypt", | ||
kdfparams: { | ||
salt: bytes_1.hexlify(salt).substring(2), | ||
salt: (0, bytes_1.hexlify)(salt).substring(2), | ||
n: N, | ||
@@ -377,18 +377,18 @@ dklen: 32, | ||
if (entropy) { | ||
var mnemonicIv = random_1.randomBytes(16); | ||
var mnemonicIv = (0, random_1.randomBytes)(16); | ||
var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv); | ||
var mnemonicAesCtr = new aes_js_1.default.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter); | ||
var mnemonicCiphertext = bytes_1.arrayify(mnemonicAesCtr.encrypt(entropy)); | ||
var mnemonicCiphertext = (0, bytes_1.arrayify)(mnemonicAesCtr.encrypt(entropy)); | ||
var now = new Date(); | ||
var timestamp = (now.getUTCFullYear() + "-" + | ||
utils_1.zpad(now.getUTCMonth() + 1, 2) + "-" + | ||
utils_1.zpad(now.getUTCDate(), 2) + "T" + | ||
utils_1.zpad(now.getUTCHours(), 2) + "-" + | ||
utils_1.zpad(now.getUTCMinutes(), 2) + "-" + | ||
utils_1.zpad(now.getUTCSeconds(), 2) + ".0Z"); | ||
(0, utils_1.zpad)(now.getUTCMonth() + 1, 2) + "-" + | ||
(0, utils_1.zpad)(now.getUTCDate(), 2) + "T" + | ||
(0, utils_1.zpad)(now.getUTCHours(), 2) + "-" + | ||
(0, utils_1.zpad)(now.getUTCMinutes(), 2) + "-" + | ||
(0, utils_1.zpad)(now.getUTCSeconds(), 2) + ".0Z"); | ||
data["x-ethers"] = { | ||
client: client, | ||
gethFilename: ("UTC--" + timestamp + "--" + data.address), | ||
mnemonicCounter: bytes_1.hexlify(mnemonicIv).substring(2), | ||
mnemonicCiphertext: bytes_1.hexlify(mnemonicCiphertext).substring(2), | ||
mnemonicCounter: (0, bytes_1.hexlify)(mnemonicIv).substring(2), | ||
mnemonicCiphertext: (0, bytes_1.hexlify)(mnemonicCiphertext).substring(2), | ||
path: path, | ||
@@ -395,0 +395,0 @@ locale: locale, |
@@ -10,3 +10,3 @@ "use strict"; | ||
} | ||
return bytes_1.arrayify(hexString); | ||
return (0, bytes_1.arrayify)(hexString); | ||
} | ||
@@ -24,5 +24,5 @@ exports.looseArrayify = looseArrayify; | ||
if (typeof (password) === 'string') { | ||
return strings_1.toUtf8Bytes(password, strings_1.UnicodeNormalizationForm.NFKC); | ||
return (0, strings_1.toUtf8Bytes)(password, strings_1.UnicodeNormalizationForm.NFKC); | ||
} | ||
return bytes_1.arrayify(password); | ||
return (0, bytes_1.arrayify)(password); | ||
} | ||
@@ -54,3 +54,3 @@ exports.getPassword = getPassword; | ||
function uuidV4(randomBytes) { | ||
var bytes = bytes_1.arrayify(randomBytes); | ||
var bytes = (0, bytes_1.arrayify)(randomBytes); | ||
// Section: 4.1.3: | ||
@@ -63,3 +63,3 @@ // - time_hi_and_version[12:16] = 0b0100 | ||
bytes[8] = (bytes[8] & 0x3f) | 0x80; | ||
var value = bytes_1.hexlify(bytes); | ||
var value = (0, bytes_1.hexlify)(bytes); | ||
return [ | ||
@@ -66,0 +66,0 @@ value.substring(2, 10), |
{ | ||
"author": "Richard Moore <me@ricmoo.com>", | ||
"dependencies": { | ||
"@ethersproject/abstract-signer": "^5.4.0", | ||
"@ethersproject/address": "^5.4.0", | ||
"@ethersproject/bytes": "^5.4.0", | ||
"@ethersproject/hdnode": "^5.4.0", | ||
"@ethersproject/keccak256": "^5.4.0", | ||
"@ethersproject/logger": "^5.4.0", | ||
"@ethersproject/pbkdf2": "^5.4.0", | ||
"@ethersproject/properties": "^5.4.0", | ||
"@ethersproject/random": "^5.4.0", | ||
"@ethersproject/strings": "^5.4.0", | ||
"@ethersproject/transactions": "^5.4.0", | ||
"@ethersproject/abstract-signer": "^5.5.0", | ||
"@ethersproject/address": "^5.5.0", | ||
"@ethersproject/bytes": "^5.5.0", | ||
"@ethersproject/hdnode": "^5.5.0", | ||
"@ethersproject/keccak256": "^5.5.0", | ||
"@ethersproject/logger": "^5.5.0", | ||
"@ethersproject/pbkdf2": "^5.5.0", | ||
"@ethersproject/properties": "^5.5.0", | ||
"@ethersproject/random": "^5.5.0", | ||
"@ethersproject/strings": "^5.5.0", | ||
"@ethersproject/transactions": "^5.5.0", | ||
"aes-js": "3.0.0", | ||
@@ -30,3 +30,3 @@ "scrypt-js": "3.0.1" | ||
], | ||
"gitHead": "c2c0ce75039e7256b287f9a764188d08ed0b7296", | ||
"gitHead": "73a46efea32c3f9a4833ed77896a216e3d3752a0", | ||
"keywords": [ | ||
@@ -52,5 +52,5 @@ "Ethereum", | ||
"sideEffects": false, | ||
"tarballHash": "0x10ff1e0b44741ad030f770b0797020520c746dac1dff2ec027a7dcf492dfa228", | ||
"tarballHash": "0xde9c1ef5ff92f71418ec3430531320f776248a11e3e698caf551d0f164c29ae1", | ||
"types": "./lib/index.d.ts", | ||
"version": "5.4.0" | ||
"version": "5.5.0" | ||
} |
@@ -1,1 +0,1 @@ | ||
export const version = "json-wallets/5.4.0"; | ||
export const version = "json-wallets/5.5.0"; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
124998
Updated@ethersproject/bytes@^5.5.0
Updated@ethersproject/hdnode@^5.5.0
Updated@ethersproject/logger@^5.5.0
Updated@ethersproject/pbkdf2@^5.5.0
Updated@ethersproject/random@^5.5.0