| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 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').Buffervar 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
 |