Change to SHA256 hashing

This commit is contained in:
Andras Schmelczer 2026-09-19 15:24:47 +01:00
commit 02f70d5f9f
2 changed files with 18 additions and 10 deletions

View file

@ -0,0 +1,7 @@
import assert from "node:assert";
import { test } from "node:test";
import { EMPTY_HASH, hash } from "./hash";
void test("EMPTY_HASH is the SHA-256 hash of empty content", async () => {
assert.strictEqual(await hash(new Uint8Array()), EMPTY_HASH);
});

View file

@ -1,12 +1,13 @@
// https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript
export function hash(content: Uint8Array): string {
let result = 0;
// eslint-disable-next-line @typescript-eslint/prefer-for-of
for (let i = 0; i < content.length; i++) {
result = (result << 5) - result + content[i];
result |= 0; // Convert to 32bit integer
}
return Math.abs(result).toString(16).padStart(8, "0");
export async function hash(content: Uint8Array): Promise<string> {
const digest = await globalThis.crypto.subtle.digest(
"SHA-256",
new Uint8Array(content)
);
return Array.from(new Uint8Array(digest), (byte) =>
byte.toString(16).padStart(2, "0")
).join("");
}
export const EMPTY_HASH = hash(new Uint8Array(0));
export const EMPTY_HASH =
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";