diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 100% rename from .eslintrc.js rename to .eslintrc.cjs diff --git a/package-lock.json b/package-lock.json index 31e521ee..db59ef68 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,10 @@ "asn1.js": "^5.0.0" }, "devDependencies": { - "@openpgp/asmcrypto.js": "^2.3.2", + "@openpgp/asmcrypto.js": "^3.0.0", "@openpgp/elliptic": "^6.5.1", "@openpgp/jsdoc": "^3.6.11", + "@openpgp/noble-hashes": "^1.3.2-1", "@openpgp/seek-bzip": "^1.0.5-git", "@openpgp/tweetnacl": "^1.0.3", "@openpgp/web-stream-tools": "^0.0.14", @@ -590,9 +591,9 @@ } }, "node_modules/@openpgp/asmcrypto.js": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@openpgp/asmcrypto.js/-/asmcrypto.js-2.3.2.tgz", - "integrity": "sha512-CEb3I/Tqg+i5NgEnhYj3fi6XsT5JTuvYdwbMq+STGxlZ8uYSWmYFmVyz9vQgtNwCll/FbB6eR1opa4hoeHGceQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@openpgp/asmcrypto.js/-/asmcrypto.js-3.0.0.tgz", + "integrity": "sha512-X/DPYy7uHe+dlY2Botb99uXwb2kXR6HTv0hQOnnI0TVEqOIMQyzCDWAzlX00AacsYryDAphuOndg6mk6wtJCNg==", "dev": true }, "node_modules/@openpgp/elliptic": { @@ -660,6 +661,22 @@ "node": ">=10" } }, + "node_modules/@openpgp/noble-hashes": { + "version": "1.3.2-1", + "resolved": "https://registry.npmjs.org/@openpgp/noble-hashes/-/noble-hashes-1.3.2-1.tgz", + "integrity": "sha512-4pmVh5O+bq1vO4xIAQXh0m7AxasEidFmHA1zm3Fk46IsLObz8pI43EyuLdwqs/6cmL6vAUCde/Xh2MYrVZd5bw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.6", + "bn.js": "^4.11.8" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@openpgp/seek-bzip": { "version": "1.0.5-git", "resolved": "https://registry.npmjs.org/@openpgp/seek-bzip/-/seek-bzip-1.0.5-git.tgz", @@ -986,6 +1003,15 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/chai": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", @@ -8093,9 +8119,9 @@ } }, "@openpgp/asmcrypto.js": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@openpgp/asmcrypto.js/-/asmcrypto.js-2.3.2.tgz", - "integrity": "sha512-CEb3I/Tqg+i5NgEnhYj3fi6XsT5JTuvYdwbMq+STGxlZ8uYSWmYFmVyz9vQgtNwCll/FbB6eR1opa4hoeHGceQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@openpgp/asmcrypto.js/-/asmcrypto.js-3.0.0.tgz", + "integrity": "sha512-X/DPYy7uHe+dlY2Botb99uXwb2kXR6HTv0hQOnnI0TVEqOIMQyzCDWAzlX00AacsYryDAphuOndg6mk6wtJCNg==", "dev": true }, "@openpgp/elliptic": { @@ -8150,6 +8176,16 @@ } } }, + "@openpgp/noble-hashes": { + "version": "1.3.2-1", + "resolved": "https://registry.npmjs.org/@openpgp/noble-hashes/-/noble-hashes-1.3.2-1.tgz", + "integrity": "sha512-4pmVh5O+bq1vO4xIAQXh0m7AxasEidFmHA1zm3Fk46IsLObz8pI43EyuLdwqs/6cmL6vAUCde/Xh2MYrVZd5bw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.6", + "bn.js": "^4.11.8" + } + }, "@openpgp/seek-bzip": { "version": "1.0.5-git", "resolved": "https://registry.npmjs.org/@openpgp/seek-bzip/-/seek-bzip-1.0.5-git.tgz", @@ -8374,6 +8410,15 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/chai": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", diff --git a/package.json b/package.json index 96ff8a05..b2dbd347 100644 --- a/package.json +++ b/package.json @@ -62,9 +62,10 @@ "postversion": "git push && git push --tags && npm publish" }, "devDependencies": { - "@openpgp/asmcrypto.js": "^2.3.2", + "@openpgp/asmcrypto.js": "^3.0.0", "@openpgp/elliptic": "^6.5.1", "@openpgp/jsdoc": "^3.6.11", + "@openpgp/noble-hashes": "^1.3.2-1", "@openpgp/seek-bzip": "^1.0.5-git", "@openpgp/tweetnacl": "^1.0.3", "@openpgp/web-stream-tools": "^0.0.14", diff --git a/src/crypto/cipher/aes.js b/src/crypto/cipher/aes.js index 8a985079..0ef89041 100644 --- a/src/crypto/cipher/aes.js +++ b/src/crypto/cipher/aes.js @@ -1,4 +1,4 @@ -import { AES_ECB } from '@openpgp/asmcrypto.js/dist_es8/aes/ecb'; +import { AES_ECB } from '@openpgp/asmcrypto.js/aes/ecb.js'; /** * Javascript AES implementation. diff --git a/src/crypto/cmac.js b/src/crypto/cmac.js index e838bd6f..8c20afc7 100644 --- a/src/crypto/cmac.js +++ b/src/crypto/cmac.js @@ -4,7 +4,7 @@ * @module crypto/cmac */ -import { AES_CBC } from '@openpgp/asmcrypto.js/dist_es8/aes/cbc'; +import { AES_CBC } from '@openpgp/asmcrypto.js/aes/cbc.js'; import util from '../util'; const webCrypto = util.getWebCrypto(); diff --git a/src/crypto/hash/index.js b/src/crypto/hash/index.js index d5752841..a3dc6972 100644 --- a/src/crypto/hash/index.js +++ b/src/crypto/hash/index.js @@ -5,8 +5,8 @@ * @module crypto/hash */ -import { Sha1 } from '@openpgp/asmcrypto.js/dist_es8/hash/sha1/sha1'; -import { Sha256 } from '@openpgp/asmcrypto.js/dist_es8/hash/sha256/sha256'; +import { sha1 } from '@openpgp/noble-hashes/sha1'; +import { sha256 } from '@openpgp/noble-hashes/sha256'; import sha224 from 'hash.js/lib/hash/sha/224'; import sha384 from 'hash.js/lib/hash/sha/384'; import sha512 from 'hash.js/lib/hash/sha/512'; @@ -48,29 +48,29 @@ function hashjsHash(hash, webCryptoHash) { }; } -function asmcryptoHash(hash, webCryptoHash) { +function nobleHash(hash, webCryptoHash) { return async function(data, config = defaultConfig) { if (stream.isArrayStream(data)) { data = await stream.readToEnd(data); } if (util.isStream(data)) { - const hashInstance = new hash(); + const hashInstance = hash.create(); return stream.transform(data, value => { - hashInstance.process(value); - }, () => hashInstance.finish().result); + hashInstance.update(value); + }, () => hashInstance.digest()); } else if (webCrypto && webCryptoHash && data.length >= config.minBytesForWebCrypto) { return new Uint8Array(await webCrypto.digest(webCryptoHash, data)); } else { - return hash.bytes(data); + return hash(data); } }; } const hashFunctions = { md5: nodeHash('md5') || md5, - sha1: nodeHash('sha1') || asmcryptoHash(Sha1, 'SHA-1'), + sha1: nodeHash('sha1') || nobleHash(sha1, 'SHA-1'), sha224: nodeHash('sha224') || hashjsHash(sha224), - sha256: nodeHash('sha256') || asmcryptoHash(Sha256, 'SHA-256'), + sha256: nodeHash('sha256') || nobleHash(sha256, 'SHA-256'), sha384: nodeHash('sha384') || hashjsHash(sha384, 'SHA-384'), sha512: nodeHash('sha512') || hashjsHash(sha512, 'SHA-512'), // asmcrypto sha512 is huge. ripemd: nodeHash('ripemd160') || hashjsHash(ripemd160) diff --git a/src/crypto/mode/cfb.js b/src/crypto/mode/cfb.js index a1bdb526..bca03563 100644 --- a/src/crypto/mode/cfb.js +++ b/src/crypto/mode/cfb.js @@ -21,7 +21,7 @@ * @module crypto/mode/cfb */ -import { AES_CFB } from '@openpgp/asmcrypto.js/dist_es8/aes/cfb'; +import { AES_CFB } from '@openpgp/asmcrypto.js/aes/cfb.js'; import * as stream from '@openpgp/web-stream-tools'; import getCipher from '../cipher/getCipher'; import util from '../../util'; diff --git a/src/crypto/mode/eax.js b/src/crypto/mode/eax.js index 4917ba1c..433d4485 100644 --- a/src/crypto/mode/eax.js +++ b/src/crypto/mode/eax.js @@ -21,7 +21,7 @@ * @module crypto/mode/eax */ -import { AES_CTR } from '@openpgp/asmcrypto.js/dist_es8/aes/ctr'; +import { AES_CTR } from '@openpgp/asmcrypto.js/aes/ctr.js'; import CMAC from '../cmac'; import util from '../../util'; import enums from '../../enums'; diff --git a/src/crypto/mode/gcm.js b/src/crypto/mode/gcm.js index c5b5e332..0088b58b 100644 --- a/src/crypto/mode/gcm.js +++ b/src/crypto/mode/gcm.js @@ -21,7 +21,7 @@ * @module crypto/mode/gcm */ -import { AES_GCM } from '@openpgp/asmcrypto.js/dist_es8/aes/gcm'; +import { AES_GCM } from '@openpgp/asmcrypto.js/aes/gcm.js'; import util from '../../util'; import enums from '../../enums';