rittenhop-dev/versions/5.94.2/node_modules/node-jose/lib/algorithms/sha.js
2024-09-23 19:40:12 -04:00

63 lines
1.4 KiB
JavaScript

/*!
* algorithms/sha.js - Cryptographic Secure Hash Algorithms, versions 1 and 2
*
* Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.
*/
"use strict";
var forge = require("../deps/forge.js"),
helpers = require("./helpers.js");
function hashDigestFN(hash) {
var md = hash.replace("SHA-", "SHA").toLowerCase();
var alg = {
name: hash
};
// ### Fallback Implementation -- uses forge
var fallback = function(pdata /* props */) {
var digest = forge.md[md].create();
digest.update(pdata.toString("binary"));
digest = Buffer.from(digest.digest().bytes(), "binary");
return Promise.resolve(digest);
};
// ### WebCryptoAPI Implementation
var webcrypto = function(pdata /* props */) {
var promise;
promise = helpers.subtleCrypto.digest(alg, pdata);
promise = promise.then(function(result) {
result = Buffer.from(result);
return result;
});
return promise;
};
// ### nodejs Implementation
var nodejs = function(pdata /* props */) {
var digest = helpers.nodeCrypto.createHash(md);
digest.update(pdata);
return digest.digest();
};
return helpers.setupFallback(nodejs, webcrypto, fallback);
}
// Public API
// * [name].digest
var sha = {};
[
"SHA-1",
"SHA-256",
"SHA-384",
"SHA-512"
].forEach(function(name) {
sha[name] = {
digest: hashDigestFN(name)
};
});
module.exports = sha;