UNPKG

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