Replace hash.js with noble-hashes

This commit is contained in:
larabr 2023-06-20 13:44:23 +02:00
parent 7c9549ce88
commit e07a0c432a
5 changed files with 11 additions and 36 deletions

1
package-lock.json generated
View File

@ -38,7 +38,6 @@
"eslint-plugin-chai-friendly": "^0.7.2", "eslint-plugin-chai-friendly": "^0.7.2",
"eslint-plugin-import": "^2.27.5", "eslint-plugin-import": "^2.27.5",
"fflate": "^0.7.4", "fflate": "^0.7.4",
"hash.js": "^1.1.3",
"http-server": "^14.1.1", "http-server": "^14.1.1",
"karma": "^6.4.0", "karma": "^6.4.0",
"karma-browserstack-launcher": "^1.6.0", "karma-browserstack-launcher": "^1.6.0",

View File

@ -88,7 +88,6 @@
"eslint-plugin-chai-friendly": "^0.7.2", "eslint-plugin-chai-friendly": "^0.7.2",
"eslint-plugin-import": "^2.27.5", "eslint-plugin-import": "^2.27.5",
"fflate": "^0.7.4", "fflate": "^0.7.4",
"hash.js": "^1.1.3",
"http-server": "^14.1.1", "http-server": "^14.1.1",
"karma": "^6.4.0", "karma": "^6.4.0",
"karma-browserstack-launcher": "^1.6.0", "karma-browserstack-launcher": "^1.6.0",

View File

@ -6,11 +6,9 @@
*/ */
import { sha1 } from '@openpgp/noble-hashes/sha1'; import { sha1 } from '@openpgp/noble-hashes/sha1';
import { sha256 } from '@openpgp/noble-hashes/sha256'; import { sha224, sha256 } from '@openpgp/noble-hashes/sha256';
import sha224 from 'hash.js/lib/hash/sha/224'; import { sha384, sha512 } from '@openpgp/noble-hashes/sha512';
import sha384 from 'hash.js/lib/hash/sha/384'; import { ripemd160 } from '@openpgp/noble-hashes/ripemd160';
import sha512 from 'hash.js/lib/hash/sha/512';
import { ripemd160 } from 'hash.js/lib/hash/ripemd';
import * as stream from '@openpgp/web-stream-tools'; import * as stream from '@openpgp/web-stream-tools';
import md5 from './md5'; import md5 from './md5';
import util from '../../util'; import util from '../../util';
@ -32,21 +30,6 @@ function nodeHash(type) {
}; };
} }
function hashjsHash(hash, webCryptoHash) {
return async function(data) {
if (stream.isArrayStream(data)) {
data = await stream.readToEnd(data);
}
if (!util.isStream(data) && webCrypto && webCryptoHash) {
return new Uint8Array(await webCrypto.digest(webCryptoHash, data));
}
const hashInstance = hash();
return stream.transform(data, value => {
hashInstance.update(value);
}, () => new Uint8Array(hashInstance.digest()));
};
}
function nobleHash(hash, webCryptoHash) { function nobleHash(hash, webCryptoHash) {
return async function(data) { return async function(data) {
if (stream.isArrayStream(data)) { if (stream.isArrayStream(data)) {
@ -68,28 +51,22 @@ function nobleHash(hash, webCryptoHash) {
const hashFunctions = { const hashFunctions = {
md5: nodeHash('md5') || md5, md5: nodeHash('md5') || md5,
sha1: nodeHash('sha1') || nobleHash(sha1, 'SHA-1'), sha1: nodeHash('sha1') || nobleHash(sha1, 'SHA-1'),
sha224: nodeHash('sha224') || hashjsHash(sha224), sha224: nodeHash('sha224') || nobleHash(sha224),
sha256: nodeHash('sha256') || nobleHash(sha256, 'SHA-256'), sha256: nodeHash('sha256') || nobleHash(sha256, 'SHA-256'),
sha384: nodeHash('sha384') || hashjsHash(sha384, 'SHA-384'), sha384: nodeHash('sha384') || nobleHash(sha384, 'SHA-384'),
sha512: nodeHash('sha512') || hashjsHash(sha512, 'SHA-512'), // asmcrypto sha512 is huge. sha512: nodeHash('sha512') || nobleHash(sha512, 'SHA-512'),
ripemd: nodeHash('ripemd160') || hashjsHash(ripemd160) ripemd: nodeHash('ripemd160') || nobleHash(ripemd160)
}; };
export default { export default {
/** @see module:md5 */ /** @see module:md5 */
md5: hashFunctions.md5, md5: hashFunctions.md5,
/** @see asmCrypto */
sha1: hashFunctions.sha1, sha1: hashFunctions.sha1,
/** @see hash.js */
sha224: hashFunctions.sha224, sha224: hashFunctions.sha224,
/** @see asmCrypto */
sha256: hashFunctions.sha256, sha256: hashFunctions.sha256,
/** @see hash.js */
sha384: hashFunctions.sha384, sha384: hashFunctions.sha384,
/** @see asmCrypto */
sha512: hashFunctions.sha512, sha512: hashFunctions.sha512,
/** @see hash.js */
ripemd: hashFunctions.ripemd, ripemd: hashFunctions.ripemd,
/** /**

View File

@ -20,14 +20,14 @@
* @module crypto/public_key/elliptic/eddsa * @module crypto/public_key/elliptic/eddsa
*/ */
import sha512 from 'hash.js/lib/hash/sha/512'; import { sha512 } from '@openpgp/noble-hashes/sha512';
import nacl from '@openpgp/tweetnacl/nacl-fast-light'; import nacl from '@openpgp/tweetnacl/nacl-fast-light';
import util from '../../../util'; import util from '../../../util';
import enums from '../../../enums'; import enums from '../../../enums';
import hash from '../../hash'; import hash from '../../hash';
import { getRandomBytes } from '../../random'; import { getRandomBytes } from '../../random';
nacl.hash = bytes => new Uint8Array(sha512().update(bytes).digest()); nacl.hash = bytes => sha512(bytes);
/** /**
* Generate (non-legacy) EdDSA key * Generate (non-legacy) EdDSA key

View File

@ -21,13 +21,13 @@
* @module crypto/public_key/elliptic/eddsa_legacy * @module crypto/public_key/elliptic/eddsa_legacy
*/ */
import sha512 from 'hash.js/lib/hash/sha/512'; import { sha512 } from '@openpgp/noble-hashes/sha512';
import nacl from '@openpgp/tweetnacl/nacl-fast-light'; import nacl from '@openpgp/tweetnacl/nacl-fast-light';
import util from '../../../util'; import util from '../../../util';
import enums from '../../../enums'; import enums from '../../../enums';
import hash from '../../hash'; import hash from '../../hash';
nacl.hash = bytes => new Uint8Array(sha512().update(bytes).digest()); nacl.hash = bytes => sha512(bytes);
/** /**
* Sign a message using the provided legacy EdDSA key * Sign a message using the provided legacy EdDSA key