mirror of
https://github.com/openpgpjs/openpgpjs.git
synced 2025-11-24 06:25:50 +00:00
Bump @noble/hashes to v2
This commit is contained in:
parent
06cf027d4e
commit
c40eb64743
17
package-lock.json
generated
17
package-lock.json
generated
@ -12,7 +12,7 @@
|
|||||||
"@eslint/js": "^9.37.0",
|
"@eslint/js": "^9.37.0",
|
||||||
"@noble/ciphers": "^1.3.0",
|
"@noble/ciphers": "^1.3.0",
|
||||||
"@noble/curves": "^2.0.1",
|
"@noble/curves": "^2.0.1",
|
||||||
"@noble/hashes": "^1.8.0",
|
"@noble/hashes": "^2.0.1",
|
||||||
"@openpgp/jsdoc": "^3.6.11",
|
"@openpgp/jsdoc": "^3.6.11",
|
||||||
"@openpgp/seek-bzip": "^1.0.5-git",
|
"@openpgp/seek-bzip": "^1.0.5-git",
|
||||||
"@openpgp/tweetnacl": "^1.0.4-2",
|
"@openpgp/tweetnacl": "^1.0.4-2",
|
||||||
@ -1056,7 +1056,7 @@
|
|||||||
"url": "https://paulmillr.com/funding/"
|
"url": "https://paulmillr.com/funding/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@noble/curves/node_modules/@noble/hashes": {
|
"node_modules/@noble/hashes": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz",
|
||||||
"integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==",
|
"integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==",
|
||||||
@ -1069,19 +1069,6 @@
|
|||||||
"url": "https://paulmillr.com/funding/"
|
"url": "https://paulmillr.com/funding/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@noble/hashes": {
|
|
||||||
"version": "1.8.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
|
|
||||||
"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": "^14.21.3 || >=16"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://paulmillr.com/funding/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@nodelib/fs.scandir": {
|
"node_modules/@nodelib/fs.scandir": {
|
||||||
"version": "2.1.5",
|
"version": "2.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||||
|
|||||||
@ -66,7 +66,7 @@
|
|||||||
"@eslint/js": "^9.37.0",
|
"@eslint/js": "^9.37.0",
|
||||||
"@noble/ciphers": "^1.3.0",
|
"@noble/ciphers": "^1.3.0",
|
||||||
"@noble/curves": "^2.0.1",
|
"@noble/curves": "^2.0.1",
|
||||||
"@noble/hashes": "^1.8.0",
|
"@noble/hashes": "^2.0.1",
|
||||||
"@openpgp/jsdoc": "^3.6.11",
|
"@openpgp/jsdoc": "^3.6.11",
|
||||||
"@openpgp/seek-bzip": "^1.0.5-git",
|
"@openpgp/seek-bzip": "^1.0.5-git",
|
||||||
"@openpgp/tweetnacl": "^1.0.4-2",
|
"@openpgp/tweetnacl": "^1.0.4-2",
|
||||||
|
|||||||
@ -1,77 +0,0 @@
|
|||||||
// Copied from https://github.com/paulmillr/noble-hashes/blob/main/test/misc/md5.ts
|
|
||||||
|
|
||||||
import { HashMD } from '@noble/hashes/_md';
|
|
||||||
import { rotl, wrapConstructor } from '@noble/hashes/utils';
|
|
||||||
|
|
||||||
// Per-round constants
|
|
||||||
const K = Array.from({ length: 64 }, (_, i) => Math.floor(2 ** 32 * Math.abs(Math.sin(i + 1))));
|
|
||||||
// Choice: a ? b : c
|
|
||||||
const Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);
|
|
||||||
// Initial state (same as sha1, but 4 u32 instead of 5)
|
|
||||||
const IV = /* @__PURE__ */ new Uint32Array([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]);
|
|
||||||
// Temporary buffer, not used to store anything between runs
|
|
||||||
// Named this way for SHA1 compat
|
|
||||||
const MD5_W = /* @__PURE__ */ new Uint32Array(16);
|
|
||||||
class MD5 extends HashMD<MD5> {
|
|
||||||
private A = IV[0] | 0;
|
|
||||||
private B = IV[1] | 0;
|
|
||||||
private C = IV[2] | 0;
|
|
||||||
private D = IV[3] | 0;
|
|
||||||
constructor() {
|
|
||||||
super(64, 16, 8, true);
|
|
||||||
}
|
|
||||||
protected get(): [number, number, number, number] {
|
|
||||||
const { A, B, C, D } = this;
|
|
||||||
return [A, B, C, D];
|
|
||||||
}
|
|
||||||
protected set(A: number, B: number, C: number, D: number) {
|
|
||||||
this.A = A | 0;
|
|
||||||
this.B = B | 0;
|
|
||||||
this.C = C | 0;
|
|
||||||
this.D = D | 0;
|
|
||||||
}
|
|
||||||
protected process(view: DataView, offset: number): void {
|
|
||||||
for (let i = 0; i < 16; i++, offset += 4) MD5_W[i] = view.getUint32(offset, true);
|
|
||||||
// Compression function main loop, 64 rounds
|
|
||||||
let { A, B, C, D } = this;
|
|
||||||
for (let i = 0; i < 64; i++) {
|
|
||||||
let F, g, s;
|
|
||||||
if (i < 16) {
|
|
||||||
F = Chi(B, C, D);
|
|
||||||
g = i;
|
|
||||||
s = [7, 12, 17, 22];
|
|
||||||
} else if (i < 32) {
|
|
||||||
F = Chi(D, B, C);
|
|
||||||
g = (5 * i + 1) % 16;
|
|
||||||
s = [5, 9, 14, 20];
|
|
||||||
} else if (i < 48) {
|
|
||||||
F = B ^ C ^ D;
|
|
||||||
g = (3 * i + 5) % 16;
|
|
||||||
s = [4, 11, 16, 23];
|
|
||||||
} else {
|
|
||||||
F = C ^ (B | ~D);
|
|
||||||
g = (7 * i) % 16;
|
|
||||||
s = [6, 10, 15, 21];
|
|
||||||
}
|
|
||||||
F = F + A + K[i] + MD5_W[g];
|
|
||||||
A = D;
|
|
||||||
D = C;
|
|
||||||
C = B;
|
|
||||||
B = B + rotl(F, s[i % 4]);
|
|
||||||
}
|
|
||||||
// Add the compressed chunk to the current hash value
|
|
||||||
A = (A + this.A) | 0;
|
|
||||||
B = (B + this.B) | 0;
|
|
||||||
C = (C + this.C) | 0;
|
|
||||||
D = (D + this.D) | 0;
|
|
||||||
this.set(A, B, C, D);
|
|
||||||
}
|
|
||||||
protected roundClean() {
|
|
||||||
MD5_W.fill(0);
|
|
||||||
}
|
|
||||||
destroy() {
|
|
||||||
this.set(0, 0, 0, 0);
|
|
||||||
this.buffer.fill(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
export const md5 = /* @__PURE__ */ wrapConstructor(() => new MD5());
|
|
||||||
@ -4,12 +4,9 @@
|
|||||||
* which share a lot of code anyway.
|
* which share a lot of code anyway.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { sha1 } from '@noble/hashes/sha1';
|
import { sha224, sha256, sha384, sha512 } from '@noble/hashes/sha2.js';
|
||||||
import { sha224, sha256 } from '@noble/hashes/sha256';
|
import { sha3_256, sha3_512 } from '@noble/hashes/sha3.js';
|
||||||
import { sha384, sha512 } from '@noble/hashes/sha512';
|
import { md5, ripemd160, sha1 } from '@noble/hashes/legacy.js';
|
||||||
import { sha3_256, sha3_512 } from '@noble/hashes/sha3';
|
|
||||||
import { ripemd160 } from '@noble/hashes/ripemd160';
|
|
||||||
import { md5 } from './md5';
|
|
||||||
|
|
||||||
export const nobleHashes = new Map(Object.entries({
|
export const nobleHashes = new Map(Object.entries({
|
||||||
md5,
|
md5,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user