nstdlib-nightly
Version:
Node.js standard library converted to runtime-agnostic ES modules.
80 lines (72 loc) • 2.54 kB
JavaScript
// Source: https://github.com/nodejs/node/blob/65eff1eb/lib/internal/crypto/hashnames.js
const kHashContextNode = 1;
const kHashContextWebCrypto = 2;
const kHashContextJwkRsa = 3;
const kHashContextJwkRsaPss = 4;
const kHashContextJwkRsaOaep = 5;
const kHashContextJwkHmac = 6;
// WebCrypto and JWK use a bunch of different names for the
// standard set of SHA-* digest algorithms... which is ... fun.
// Here we provide a utility for mapping between them in order
// make it easier in the code.
const kHashNames = {
sha1: {
[]: "sha1",
[]: "SHA-1",
[]: "RS1",
[]: "PS1",
[]: "RSA-OAEP",
[]: "HS1",
},
sha256: {
[]: "sha256",
[]: "SHA-256",
[]: "RS256",
[]: "PS256",
[]: "RSA-OAEP-256",
[]: "HS256",
},
sha384: {
[]: "sha384",
[]: "SHA-384",
[]: "RS384",
[]: "PS384",
[]: "RSA-OAEP-384",
[]: "HS384",
},
sha512: {
[]: "sha512",
[]: "SHA-512",
[]: "RS512",
[]: "PS512",
[]: "RSA-OAEP-512",
[]: "HS512",
},
};
{
// Index the aliases
const keys = Object.keys(kHashNames);
for (let n = 0; n < keys.length; n++) {
const contexts = Object.keys(kHashNames[keys[n]]);
for (let i = 0; i < contexts.length; i++) {
const alias = String.prototype.toLowerCase.call(
kHashNames[keys[n]][contexts[i]],
);
if (kHashNames[alias] === undefined)
kHashNames[alias] = kHashNames[keys[n]];
}
}
}
function normalizeHashName(name, context = kHashContextNode) {
if (typeof name !== "string") return name;
name = String.prototype.toLowerCase.call(name);
const alias = kHashNames[name] && kHashNames[name][context];
return alias || name;
}
normalizeHashName.kContextNode = kHashContextNode;
normalizeHashName.kContextWebCrypto = kHashContextWebCrypto;
normalizeHashName.kContextJwkRsa = kHashContextJwkRsa;
normalizeHashName.kContextJwkRsaPss = kHashContextJwkRsaPss;
normalizeHashName.kContextJwkRsaOaep = kHashContextJwkRsaOaep;
normalizeHashName.kContextJwkHmac = kHashContextJwkHmac;
export default normalizeHashName;