sync-browser.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/__node_modules/pbkdf2/lib/sync-browser.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}var md5 = require('create-hash/md5')
  12. var RIPEMD160 = require('ripemd160')
  13. var sha = require('sha.js')
  14. var Buffer = require('safe-buffer').Buffer
  15. var checkParameters = require('./precondition')
  16. var defaultEncoding = require('./default-encoding')
  17. var toBuffer = require('./to-buffer')
  18. var ZEROS = Buffer.alloc(128)
  19. var sizes = {
  20. md5: 16,
  21. sha1: 20,
  22. sha224: 28,
  23. sha256: 32,
  24. sha384: 48,
  25. sha512: 64,
  26. rmd160: 20,
  27. ripemd160: 20
  28. }
  29. function Hmac (alg, key, saltLen) {
  30. var hash = getDigest(alg)
  31. var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
  32. if (key.length > blocksize) {
  33. key = hash(key)
  34. } else if (key.length < blocksize) {
  35. key = Buffer.concat([key, ZEROS], blocksize)
  36. }
  37. var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
  38. var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
  39. for (var i = 0; i < blocksize; i++) {
  40. ipad[i] = key[i] ^ 0x36
  41. opad[i] = key[i] ^ 0x5C
  42. }
  43. var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
  44. ipad.copy(ipad1, 0, 0, blocksize)
  45. this.ipad1 = ipad1
  46. this.ipad2 = ipad
  47. this.opad = opad
  48. this.alg = alg
  49. this.blocksize = blocksize
  50. this.hash = hash
  51. this.size = sizes[alg]
  52. }
  53. Hmac.prototype.run = function (data, ipad) {
  54. data.copy(ipad, this.blocksize)
  55. var h = this.hash(ipad)
  56. h.copy(this.opad, this.blocksize)
  57. return this.hash(this.opad)
  58. }
  59. function getDigest (alg) {
  60. function shaFunc (data) {
  61. return sha(alg).update(data).digest()
  62. }
  63. function rmd160Func (data) {
  64. return new RIPEMD160().update(data).digest()
  65. }
  66. if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func
  67. if (alg === 'md5') return md5
  68. return shaFunc
  69. }
  70. function pbkdf2 (password, salt, iterations, keylen, digest) {
  71. checkParameters(iterations, keylen)
  72. password = toBuffer(password, defaultEncoding, 'Password')
  73. salt = toBuffer(salt, defaultEncoding, 'Salt')
  74. digest = digest || 'sha1'
  75. var hmac = new Hmac(digest, password, salt.length)
  76. var DK = Buffer.allocUnsafe(keylen)
  77. var block1 = Buffer.allocUnsafe(salt.length + 4)
  78. salt.copy(block1, 0, 0, salt.length)
  79. var destPos = 0
  80. var hLen = sizes[digest]
  81. var l = Math.ceil(keylen / hLen)
  82. for (var i = 1; i <= l; i++) {
  83. block1.writeUInt32BE(i, salt.length)
  84. var T = hmac.run(block1, hmac.ipad1)
  85. var U = T
  86. for (var j = 1; j < iterations; j++) {
  87. U = hmac.run(U, hmac.ipad2)
  88. for (var k = 0; k < hLen; k++) T[k] ^= U[k]
  89. }
  90. T.copy(DK, destPos)
  91. destPos += hLen
  92. }
  93. return DK
  94. }
  95. module.exports = pbkdf2
  96. }
  97. if (nodeEnv) {
  98. __define(__module.exports, __require, __module);
  99. }
  100. else {
  101. __quick_compile_project__.registerModuleFunc(__filename, function () {
  102. __define(__module.exports, __require, __module);
  103. });
  104. }
  105. })();