PBKDF2 i=1000 (v7)

Revision 7 of this benchmark created on


Description

PBKDF2 (hmacSHA1) for JavaScript

Compares the PBKDF2 methods of the Stanford Javascript Crypto Library with the ones from CryptoJS and Anandam.

Preparation HTML

<script src="http://anandam.name/pbkdf2/sha1.js">
</script>
<script src="http://anandam.name/pbkdf2/pbkdf2.js">
</script>
<script src="https://raw.github.com/bitwiseshiftleft/sjcl/version-0.8/sjcl.js">
</script>
<script src="https://raw.github.com/bitwiseshiftleft/sjcl/master/core/sha1.js">
</script>
<script src="https://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/pbkdf2.js">
</script>
<script>
  var hmacSHA1 = function(key) {
      var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha1);
      this.encrypt = function() {
        return hasher.encrypt.apply(hasher, arguments);
      };
      };

  // from http://stackoverflow.com/questions/3745666/

  function hex2a(hex) {
    var str = '';
    for (var i = 0; i < hex.length; i += 2)
    str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
  }

  var iterations = 1000;
  var password = 'password';
  var hexSalt = '29EEE7AA9C0E9315';
  var keySizeBits = 256;
  var sjclSalt = sjcl.codec.hex.toBits(hexSalt);
  var cryptoSalt = CryptoJS.enc.Hex.parse(hexSalt);
  var anandamSalt = hex2a(hexSalt);
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
SJCL 0.8
x1 = sjcl.misc.pbkdf2(password, sjclSalt, iterations, keySizeBits, hmacSHA1);
console.log("sjcl: " + sjcl.codec.hex.fromBits(x1));
ready
CryptoJS 3.1.2
x2 = CryptoJS.PBKDF2(password, cryptoSalt, {
  keySize: keySizeBits / 32,
  iterations: iterations
});
console.log("CryptoJS: " + x2);
ready
Anandam 1.4
// async test
var pbkdf2 = new PBKDF2(password, anandamSalt, iterations, keySizeBits / 8);
pbkdf2.deriveKey(function() {}, function(res) {
  console.log("anandam:" + res)
  deferred.resolve()
});
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.