async.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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/async.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);}(function (global){
  12. var Buffer = require('safe-buffer').Buffer
  13. var checkParameters = require('./precondition')
  14. var defaultEncoding = require('./default-encoding')
  15. var sync = require('./sync')
  16. var toBuffer = require('./to-buffer')
  17. var ZERO_BUF
  18. var subtle = global.crypto && global.crypto.subtle
  19. var toBrowser = {
  20. sha: 'SHA-1',
  21. 'sha-1': 'SHA-1',
  22. sha1: 'SHA-1',
  23. sha256: 'SHA-256',
  24. 'sha-256': 'SHA-256',
  25. sha384: 'SHA-384',
  26. 'sha-384': 'SHA-384',
  27. 'sha-512': 'SHA-512',
  28. sha512: 'SHA-512'
  29. }
  30. var checks = []
  31. function checkNative (algo) {
  32. if (global.process && !global.process.browser) {
  33. return Promise.resolve(false)
  34. }
  35. if (!subtle || !subtle.importKey || !subtle.deriveBits) {
  36. return Promise.resolve(false)
  37. }
  38. if (checks[algo] !== undefined) {
  39. return checks[algo]
  40. }
  41. ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
  42. var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
  43. .then(function () {
  44. return true
  45. }).catch(function () {
  46. return false
  47. })
  48. checks[algo] = prom
  49. return prom
  50. }
  51. var nextTick
  52. function getNextTick () {
  53. if (nextTick) {
  54. return nextTick
  55. }
  56. if (global.process && global.process.nextTick) {
  57. nextTick = global.process.nextTick
  58. } else if (global.queueMicrotask) {
  59. nextTick = global.queueMicrotask
  60. } else if (global.setImmediate) {
  61. nextTick = global.setImmediate
  62. } else {
  63. nextTick = global.setTimeout
  64. }
  65. return nextTick
  66. }
  67. function browserPbkdf2 (password, salt, iterations, length, algo) {
  68. return subtle.importKey(
  69. 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']
  70. ).then(function (key) {
  71. return subtle.deriveBits({
  72. name: 'PBKDF2',
  73. salt: salt,
  74. iterations: iterations,
  75. hash: {
  76. name: algo
  77. }
  78. }, key, length << 3)
  79. }).then(function (res) {
  80. return Buffer.from(res)
  81. })
  82. }
  83. function resolvePromise (promise, callback) {
  84. promise.then(function (out) {
  85. getNextTick()(function () {
  86. callback(null, out)
  87. })
  88. }, function (e) {
  89. getNextTick()(function () {
  90. callback(e)
  91. })
  92. })
  93. }
  94. module.exports = function (password, salt, iterations, keylen, digest, callback) {
  95. if (typeof digest === 'function') {
  96. callback = digest
  97. digest = undefined
  98. }
  99. digest = digest || 'sha1'
  100. var algo = toBrowser[digest.toLowerCase()]
  101. if (!algo || typeof global.Promise !== 'function') {
  102. getNextTick()(function () {
  103. var out
  104. try {
  105. out = sync(password, salt, iterations, keylen, digest)
  106. } catch (e) {
  107. return callback(e)
  108. }
  109. callback(null, out)
  110. })
  111. return
  112. }
  113. checkParameters(iterations, keylen)
  114. password = toBuffer(password, defaultEncoding, 'Password')
  115. salt = toBuffer(salt, defaultEncoding, 'Salt')
  116. if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
  117. resolvePromise(checkNative(algo).then(function (resp) {
  118. if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)
  119. return sync(password, salt, iterations, keylen, digest)
  120. }), callback)
  121. }
  122. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  123. }
  124. if (nodeEnv) {
  125. __define(__module.exports, __require, __module);
  126. }
  127. else {
  128. __quick_compile_project__.registerModuleFunc(__filename, function () {
  129. __define(__module.exports, __require, __module);
  130. });
  131. }
  132. })();