Update asmcrypto.js, use for AES only (move to noble-hashes for sha1, sha256)

This commit is contained in:
larabr 2023-05-30 18:14:01 +02:00
parent 0b2767fe4c
commit 21a6d83ec8
9 changed files with 68 additions and 22 deletions

59
package-lock.json generated
View File

@ -12,9 +12,10 @@
"asn1.js": "^5.0.0" "asn1.js": "^5.0.0"
}, },
"devDependencies": { "devDependencies": {
"@openpgp/asmcrypto.js": "^2.3.2", "@openpgp/asmcrypto.js": "^3.0.0",
"@openpgp/elliptic": "^6.5.1", "@openpgp/elliptic": "^6.5.1",
"@openpgp/jsdoc": "^3.6.11", "@openpgp/jsdoc": "^3.6.11",
"@openpgp/noble-hashes": "^1.3.2-1",
"@openpgp/seek-bzip": "^1.0.5-git", "@openpgp/seek-bzip": "^1.0.5-git",
"@openpgp/tweetnacl": "^1.0.3", "@openpgp/tweetnacl": "^1.0.3",
"@openpgp/web-stream-tools": "^0.0.14", "@openpgp/web-stream-tools": "^0.0.14",
@ -590,9 +591,9 @@
} }
}, },
"node_modules/@openpgp/asmcrypto.js": { "node_modules/@openpgp/asmcrypto.js": {
"version": "2.3.2", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/@openpgp/asmcrypto.js/-/asmcrypto.js-2.3.2.tgz", "resolved": "https://registry.npmjs.org/@openpgp/asmcrypto.js/-/asmcrypto.js-3.0.0.tgz",
"integrity": "sha512-CEb3I/Tqg+i5NgEnhYj3fi6XsT5JTuvYdwbMq+STGxlZ8uYSWmYFmVyz9vQgtNwCll/FbB6eR1opa4hoeHGceQ==", "integrity": "sha512-X/DPYy7uHe+dlY2Botb99uXwb2kXR6HTv0hQOnnI0TVEqOIMQyzCDWAzlX00AacsYryDAphuOndg6mk6wtJCNg==",
"dev": true "dev": true
}, },
"node_modules/@openpgp/elliptic": { "node_modules/@openpgp/elliptic": {
@ -660,6 +661,22 @@
"node": ">=10" "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": { "node_modules/@openpgp/seek-bzip": {
"version": "1.0.5-git", "version": "1.0.5-git",
"resolved": "https://registry.npmjs.org/@openpgp/seek-bzip/-/seek-bzip-1.0.5-git.tgz", "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==", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
"dev": true "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": { "node_modules/@types/chai": {
"version": "4.3.5", "version": "4.3.5",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz",
@ -8093,9 +8119,9 @@
} }
}, },
"@openpgp/asmcrypto.js": { "@openpgp/asmcrypto.js": {
"version": "2.3.2", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/@openpgp/asmcrypto.js/-/asmcrypto.js-2.3.2.tgz", "resolved": "https://registry.npmjs.org/@openpgp/asmcrypto.js/-/asmcrypto.js-3.0.0.tgz",
"integrity": "sha512-CEb3I/Tqg+i5NgEnhYj3fi6XsT5JTuvYdwbMq+STGxlZ8uYSWmYFmVyz9vQgtNwCll/FbB6eR1opa4hoeHGceQ==", "integrity": "sha512-X/DPYy7uHe+dlY2Botb99uXwb2kXR6HTv0hQOnnI0TVEqOIMQyzCDWAzlX00AacsYryDAphuOndg6mk6wtJCNg==",
"dev": true "dev": true
}, },
"@openpgp/elliptic": { "@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": { "@openpgp/seek-bzip": {
"version": "1.0.5-git", "version": "1.0.5-git",
"resolved": "https://registry.npmjs.org/@openpgp/seek-bzip/-/seek-bzip-1.0.5-git.tgz", "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==", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
"dev": true "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": { "@types/chai": {
"version": "4.3.5", "version": "4.3.5",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz",

View File

@ -62,9 +62,10 @@
"postversion": "git push && git push --tags && npm publish" "postversion": "git push && git push --tags && npm publish"
}, },
"devDependencies": { "devDependencies": {
"@openpgp/asmcrypto.js": "^2.3.2", "@openpgp/asmcrypto.js": "^3.0.0",
"@openpgp/elliptic": "^6.5.1", "@openpgp/elliptic": "^6.5.1",
"@openpgp/jsdoc": "^3.6.11", "@openpgp/jsdoc": "^3.6.11",
"@openpgp/noble-hashes": "^1.3.2-1",
"@openpgp/seek-bzip": "^1.0.5-git", "@openpgp/seek-bzip": "^1.0.5-git",
"@openpgp/tweetnacl": "^1.0.3", "@openpgp/tweetnacl": "^1.0.3",
"@openpgp/web-stream-tools": "^0.0.14", "@openpgp/web-stream-tools": "^0.0.14",

View File

@ -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. * Javascript AES implementation.

View File

@ -4,7 +4,7 @@
* @module crypto/cmac * @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'; import util from '../util';
const webCrypto = util.getWebCrypto(); const webCrypto = util.getWebCrypto();

View File

@ -5,8 +5,8 @@
* @module crypto/hash * @module crypto/hash
*/ */
import { Sha1 } from '@openpgp/asmcrypto.js/dist_es8/hash/sha1/sha1'; import { sha1 } from '@openpgp/noble-hashes/sha1';
import { Sha256 } from '@openpgp/asmcrypto.js/dist_es8/hash/sha256/sha256'; import { sha256 } from '@openpgp/noble-hashes/sha256';
import sha224 from 'hash.js/lib/hash/sha/224'; import sha224 from 'hash.js/lib/hash/sha/224';
import sha384 from 'hash.js/lib/hash/sha/384'; import sha384 from 'hash.js/lib/hash/sha/384';
import sha512 from 'hash.js/lib/hash/sha/512'; 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) { return async function(data, config = defaultConfig) {
if (stream.isArrayStream(data)) { if (stream.isArrayStream(data)) {
data = await stream.readToEnd(data); data = await stream.readToEnd(data);
} }
if (util.isStream(data)) { if (util.isStream(data)) {
const hashInstance = new hash(); const hashInstance = hash.create();
return stream.transform(data, value => { return stream.transform(data, value => {
hashInstance.process(value); hashInstance.update(value);
}, () => hashInstance.finish().result); }, () => hashInstance.digest());
} else if (webCrypto && webCryptoHash && data.length >= config.minBytesForWebCrypto) { } else if (webCrypto && webCryptoHash && data.length >= config.minBytesForWebCrypto) {
return new Uint8Array(await webCrypto.digest(webCryptoHash, data)); return new Uint8Array(await webCrypto.digest(webCryptoHash, data));
} else { } else {
return hash.bytes(data); return hash(data);
} }
}; };
} }
const hashFunctions = { const hashFunctions = {
md5: nodeHash('md5') || md5, md5: nodeHash('md5') || md5,
sha1: nodeHash('sha1') || asmcryptoHash(Sha1, 'SHA-1'), sha1: nodeHash('sha1') || nobleHash(sha1, 'SHA-1'),
sha224: nodeHash('sha224') || hashjsHash(sha224), 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'), sha384: nodeHash('sha384') || hashjsHash(sha384, 'SHA-384'),
sha512: nodeHash('sha512') || hashjsHash(sha512, 'SHA-512'), // asmcrypto sha512 is huge. sha512: nodeHash('sha512') || hashjsHash(sha512, 'SHA-512'), // asmcrypto sha512 is huge.
ripemd: nodeHash('ripemd160') || hashjsHash(ripemd160) ripemd: nodeHash('ripemd160') || hashjsHash(ripemd160)

View File

@ -21,7 +21,7 @@
* @module crypto/mode/cfb * @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 * as stream from '@openpgp/web-stream-tools';
import getCipher from '../cipher/getCipher'; import getCipher from '../cipher/getCipher';
import util from '../../util'; import util from '../../util';

View File

@ -21,7 +21,7 @@
* @module crypto/mode/eax * @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 CMAC from '../cmac';
import util from '../../util'; import util from '../../util';
import enums from '../../enums'; import enums from '../../enums';

View File

@ -21,7 +21,7 @@
* @module crypto/mode/gcm * @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 util from '../../util';
import enums from '../../enums'; import enums from '../../enums';