mirror of
https://github.com/denoland/deno.git
synced 2024-12-27 01:29:14 -05:00
70 lines
1.5 KiB
JavaScript
70 lines
1.5 KiB
JavaScript
|
// 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),
|
||
|
);
|