// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // Run this file with `node` to regenerate the testdata/crypto_digest_fixtures.json file. import { readFileSync, writeFileSync } from "node:fs"; import { join } from "node:path"; import crypto from "node:crypto"; import { Buffer } from "node:buffer"; const privateKey = readFileSync( join(import.meta.dirname, "..", "testdata", "rsa_private.pem"), ); const fixtures = []; const DATA = "Hello, world!"; const SALT = "salt"; const INFO = "info"; const ITERATIONS = 1000; const KEY_LEN = 64; for (const digest of crypto.getHashes()) { const hasher = crypto.createHash(digest); hasher.update(DATA); let hash; try { hash = hasher.digest().toString("hex"); } catch { hash = null; } const sign = crypto.createSign(digest); sign.update(DATA); let signature; try { signature = sign.sign(privateKey).toString("hex"); } catch { signature = null; } let pkdf2; try { pkdf2 = crypto.pbkdf2Sync(DATA, SALT, ITERATIONS, KEY_LEN, digest).toString( "hex", ); } catch { pkdf2 = null; } let hkdf; try { hkdf = Buffer.from(crypto.hkdfSync(digest, DATA, SALT, INFO, KEY_LEN)) .toString("hex"); } catch { hkdf = null; } fixtures.push({ digest, hash, signature, pkdf2, hkdf, }); } writeFileSync( join(import.meta.dirname, "..", "testdata", "crypto_digest_fixtures.json"), JSON.stringify(fixtures, null, 2), );