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"
},
"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",

View File

@ -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",

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.

View File

@ -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();

View File

@ -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)

View File

@ -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';

View File

@ -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';

View File

@ -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';