crypto_callbacks.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.hmacSha256Hook = exports.hmacSha512Hook = exports.aes256CtrDecryptHook = exports.aes256CtrEncryptHook = exports.aes256CbcDecryptHook = exports.aes256CbcEncryptHook = void 0;
  4. exports.makeAES256Hook = makeAES256Hook;
  5. exports.randomHook = randomHook;
  6. exports.sha256Hook = sha256Hook;
  7. exports.makeHmacHook = makeHmacHook;
  8. exports.signRsaSha256Hook = signRsaSha256Hook;
  9. const crypto = require("crypto");
  10. function makeAES256Hook(method, mode) {
  11. return function (key, iv, input, output) {
  12. let result;
  13. try {
  14. const cipher = crypto[method](mode, key, iv);
  15. cipher.setAutoPadding(false);
  16. result = cipher.update(input);
  17. const final = cipher.final();
  18. if (final.length > 0) {
  19. result = Buffer.concat([result, final]);
  20. }
  21. }
  22. catch (e) {
  23. return e;
  24. }
  25. result.copy(output);
  26. return result.length;
  27. };
  28. }
  29. function randomHook(buffer, count) {
  30. try {
  31. crypto.randomFillSync(buffer, 0, count);
  32. }
  33. catch (e) {
  34. return e;
  35. }
  36. return count;
  37. }
  38. function sha256Hook(input, output) {
  39. let result;
  40. try {
  41. result = crypto.createHash('sha256').update(input).digest();
  42. }
  43. catch (e) {
  44. return e;
  45. }
  46. result.copy(output);
  47. return result.length;
  48. }
  49. function makeHmacHook(algorithm) {
  50. return (key, input, output) => {
  51. let result;
  52. try {
  53. result = crypto.createHmac(algorithm, key).update(input).digest();
  54. }
  55. catch (e) {
  56. return e;
  57. }
  58. result.copy(output);
  59. return result.length;
  60. };
  61. }
  62. function signRsaSha256Hook(key, input, output) {
  63. let result;
  64. try {
  65. const signer = crypto.createSign('sha256WithRSAEncryption');
  66. const privateKey = Buffer.from(`-----BEGIN PRIVATE KEY-----\n${key.toString('base64')}\n-----END PRIVATE KEY-----\n`);
  67. result = signer.update(input).end().sign(privateKey);
  68. }
  69. catch (e) {
  70. return e;
  71. }
  72. result.copy(output);
  73. return result.length;
  74. }
  75. exports.aes256CbcEncryptHook = makeAES256Hook('createCipheriv', 'aes-256-cbc');
  76. exports.aes256CbcDecryptHook = makeAES256Hook('createDecipheriv', 'aes-256-cbc');
  77. exports.aes256CtrEncryptHook = makeAES256Hook('createCipheriv', 'aes-256-ctr');
  78. exports.aes256CtrDecryptHook = makeAES256Hook('createDecipheriv', 'aes-256-ctr');
  79. exports.hmacSha512Hook = makeHmacHook('sha512');
  80. exports.hmacSha256Hook = makeHmacHook('sha256');
  81. //# sourceMappingURL=crypto_callbacks.js.map