You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							52 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							52 lines
						
					
					
						
							1.2 KiB
						
					
					
				var sizes = { | 
						|
  md5: 16, | 
						|
  sha1: 20, | 
						|
  sha224: 28, | 
						|
  sha256: 32, | 
						|
  sha384: 48, | 
						|
  sha512: 64, | 
						|
  rmd160: 20, | 
						|
  ripemd160: 20 | 
						|
} | 
						|
 | 
						|
var createHmac = require('create-hmac') | 
						|
var Buffer = require('safe-buffer').Buffer | 
						|
 | 
						|
var checkParameters = require('./precondition') | 
						|
var defaultEncoding = require('./default-encoding') | 
						|
var toBuffer = require('./to-buffer') | 
						|
 | 
						|
function pbkdf2 (password, salt, iterations, keylen, digest) { | 
						|
  checkParameters(iterations, keylen) | 
						|
  password = toBuffer(password, defaultEncoding, 'Password') | 
						|
  salt = toBuffer(salt, defaultEncoding, 'Salt') | 
						|
 | 
						|
  digest = digest || 'sha1' | 
						|
 | 
						|
  var DK = Buffer.allocUnsafe(keylen) | 
						|
  var block1 = Buffer.allocUnsafe(salt.length + 4) | 
						|
  salt.copy(block1, 0, 0, salt.length) | 
						|
 | 
						|
  var destPos = 0 | 
						|
  var hLen = sizes[digest] | 
						|
  var l = Math.ceil(keylen / hLen) | 
						|
 | 
						|
  for (var i = 1; i <= l; i++) { | 
						|
    block1.writeUInt32BE(i, salt.length) | 
						|
 | 
						|
    var T = createHmac(digest, password).update(block1).digest() | 
						|
    var U = T | 
						|
 | 
						|
    for (var j = 1; j < iterations; j++) { | 
						|
      U = createHmac(digest, password).update(U).digest() | 
						|
      for (var k = 0; k < hLen; k++) T[k] ^= U[k] | 
						|
    } | 
						|
 | 
						|
    T.copy(DK, destPos) | 
						|
    destPos += hLen | 
						|
  } | 
						|
 | 
						|
  return DK | 
						|
} | 
						|
 | 
						|
module.exports = pbkdf2
 | 
						|
 |