verify.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const crypto = require("crypto");
  4. const util_1 = require("util");
  5. const dsa_digest_js_1 = require("./dsa_digest.js");
  6. const node_key_js_1 = require("./node_key.js");
  7. const sign_js_1 = require("./sign.js");
  8. const get_sign_verify_key_js_1 = require("./get_sign_verify_key.js");
  9. const flags_js_1 = require("./flags.js");
  10. let oneShotVerify;
  11. if (crypto.verify.length > 4 && flags_js_1.oneShotCallback) {
  12. oneShotVerify = (0, util_1.promisify)(crypto.verify);
  13. }
  14. else {
  15. oneShotVerify = crypto.verify;
  16. }
  17. const verify = async (alg, key, signature, data) => {
  18. const keyObject = (0, get_sign_verify_key_js_1.default)(alg, key, 'verify');
  19. if (alg.startsWith('HS')) {
  20. const expected = await (0, sign_js_1.default)(alg, keyObject, data);
  21. const actual = signature;
  22. try {
  23. return crypto.timingSafeEqual(actual, expected);
  24. }
  25. catch {
  26. return false;
  27. }
  28. }
  29. const algorithm = (0, dsa_digest_js_1.default)(alg);
  30. const keyInput = (0, node_key_js_1.default)(alg, keyObject);
  31. try {
  32. return await oneShotVerify(algorithm, data, keyInput, signature);
  33. }
  34. catch {
  35. return false;
  36. }
  37. };
  38. exports.default = verify;