index.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. 'use strict';
  2. var nativeImpl = require('crypto');
  3. var checkParameters = require('./lib/precondition');
  4. var defaultEncoding = require('./lib/default-encoding');
  5. var toBuffer = require('./lib/to-buffer');
  6. function nativePBKDF2(password, salt, iterations, keylen, digest, callback) {
  7. checkParameters(iterations, keylen);
  8. password = toBuffer(password, defaultEncoding, 'Password');
  9. salt = toBuffer(salt, defaultEncoding, 'Salt');
  10. if (typeof digest === 'function') {
  11. callback = digest;
  12. digest = 'sha1';
  13. }
  14. if (typeof callback !== 'function') {
  15. throw new Error('No callback provided to pbkdf2');
  16. }
  17. return nativeImpl.pbkdf2(password, salt, iterations, keylen, digest, callback);
  18. }
  19. function nativePBKDF2Sync(password, salt, iterations, keylen, digest) {
  20. checkParameters(iterations, keylen);
  21. password = toBuffer(password, defaultEncoding, 'Password');
  22. salt = toBuffer(salt, defaultEncoding, 'Salt');
  23. digest = digest || 'sha1';
  24. return nativeImpl.pbkdf2Sync(password, salt, iterations, keylen, digest);
  25. }
  26. /* istanbul ignore next */
  27. if (!nativeImpl.pbkdf2Sync || nativeImpl.pbkdf2Sync.toString().indexOf('keylen, digest') === -1) {
  28. /* eslint global-require: 0 */
  29. exports.pbkdf2Sync = require('./lib/sync');
  30. exports.pbkdf2 = require('./lib/async');
  31. // native
  32. } else {
  33. exports.pbkdf2Sync = nativePBKDF2Sync;
  34. exports.pbkdf2 = nativePBKDF2;
  35. }