用工小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.5 KiB

6 months ago
  1. var Buffer = require('buffer').Buffer;
  2. var sha = require('./sha');
  3. var sha256 = require('./sha256');
  4. var md5 = require('./md5');
  5. var algorithms = {
  6. sha1: sha,
  7. sha256: sha256,
  8. md5: md5
  9. };
  10. var blocksize = 64;
  11. var zeroBuffer = Buffer.alloc(blocksize);
  12. zeroBuffer.fill(0);
  13. function hmac(fn, key, data) {
  14. if (!Buffer.isBuffer(key)) key = Buffer.from(key);
  15. if (!Buffer.isBuffer(data)) data = Buffer.from(data);
  16. if (key.length > blocksize) {
  17. key = fn(key);
  18. } else if (key.length < blocksize) {
  19. key = Buffer.concat([key, zeroBuffer], blocksize);
  20. }
  21. var ipad = Buffer.alloc(blocksize),
  22. opad = Buffer.alloc(blocksize);
  23. for (var i = 0; i < blocksize; i++) {
  24. ipad[i] = key[i] ^ 0x36;
  25. opad[i] = key[i] ^ 0x5c;
  26. }
  27. var hash = fn(Buffer.concat([ipad, data]));
  28. return fn(Buffer.concat([opad, hash]));
  29. }
  30. function hash(alg, key) {
  31. alg = alg || 'sha1';
  32. var fn = algorithms[alg];
  33. var bufs = [];
  34. var length = 0;
  35. if (!fn) error('algorithm:', alg, 'is not yet supported');
  36. return {
  37. update: function (data) {
  38. if (!Buffer.isBuffer(data)) data = Buffer.from(data);
  39. bufs.push(data);
  40. length += data.length;
  41. return this;
  42. },
  43. digest: function (enc) {
  44. var buf = Buffer.concat(bufs);
  45. var r = key ? hmac(fn, key, buf) : fn(buf);
  46. bufs = null;
  47. return enc ? r.toString(enc) : r;
  48. }
  49. };
  50. }
  51. function error() {
  52. var m = [].slice.call(arguments).join(' ');
  53. throw new Error([m, 'we accept pull requests', 'http://github.com/dominictarr/crypto-browserify'].join('\n'));
  54. }
  55. exports.createHash = function (alg) {
  56. return hash(alg);
  57. };
  58. exports.createHmac = function (alg, key) {
  59. return hash(alg, key);
  60. };
  61. exports.createCredentials = () => {
  62. error('sorry,createCredentials is not implemented yet');
  63. };
  64. exports.createCipher = () => {
  65. error('sorry,createCipher is not implemented yet');
  66. };
  67. exports.createCipheriv = () => {
  68. error('sorry,createCipheriv is not implemented yet');
  69. };
  70. exports.createDecipher = () => {
  71. error('sorry,createDecipher is not implemented yet');
  72. };
  73. exports.createDecipheriv = () => {
  74. error('sorry,createDecipheriv is not implemented yet');
  75. };
  76. exports.createSign = () => {
  77. error('sorry,createSign is not implemented yet');
  78. };
  79. exports.createVerify = () => {
  80. error('sorry,createVerify is not implemented yet');
  81. };
  82. exports.createDiffieHellman = () => {
  83. error('sorry,createDiffieHellman is not implemented yet');
  84. };
  85. exports.pbkdf2 = () => {
  86. error('sorry,pbkdf2 is not implemented yet');
  87. };