39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var native = require('crypto')
 | |
| 
 | |
| var checkParameters = require('./lib/precondition')
 | |
| var defaultEncoding = require('./lib/default-encoding')
 | |
| var toBuffer = require('./lib/to-buffer')
 | |
| 
 | |
| function nativePBKDF2 (password, salt, iterations, keylen, digest, callback) {
 | |
|   checkParameters(iterations, keylen)
 | |
|   password = toBuffer(password, defaultEncoding, 'Password')
 | |
|   salt = toBuffer(salt, defaultEncoding, 'Salt')
 | |
| 
 | |
|   if (typeof digest === 'function') {
 | |
|     callback = digest
 | |
|     digest = 'sha1'
 | |
|   }
 | |
|   if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
 | |
| 
 | |
|   return native.pbkdf2(password, salt, iterations, keylen, digest, callback)
 | |
| }
 | |
| 
 | |
| function nativePBKDF2Sync (password, salt, iterations, keylen, digest) {
 | |
|   checkParameters(iterations, keylen)
 | |
|   password = toBuffer(password, defaultEncoding, 'Password')
 | |
|   salt = toBuffer(salt, defaultEncoding, 'Salt')
 | |
|   digest = digest || 'sha1'
 | |
|   return native.pbkdf2Sync(password, salt, iterations, keylen, digest)
 | |
| }
 | |
| 
 | |
| /* istanbul ignore next */
 | |
| if (!native.pbkdf2Sync || native.pbkdf2Sync.toString().indexOf('keylen, digest') === -1) {
 | |
|   exports.pbkdf2Sync = require('./lib/sync')
 | |
|   exports.pbkdf2 = require('./lib/async')
 | |
| 
 | |
| // native
 | |
| } else {
 | |
|   exports.pbkdf2Sync = nativePBKDF2Sync
 | |
|   exports.pbkdf2 = nativePBKDF2
 | |
| }
 |