Adler32 / SHA-512 Speed Test

by skibulk

JavaScript

console.clear();

// Caution: str must be a string
function adler32(str) {
    var i = 0, l = str.length, s1 = 1, s2 = 0;
    for (; i < l; i++) {
        s1 = (s1 + str.charCodeAt(i)) % 65521;
        s2 = (s2 + s1) % 65521;
    }
    return ((s2 << 16) + s1).toString(16).padStart(8, '0');
}

var i = 0;
var seed = "180b041d";

var start = Date.now();
for(; i<50000; i++) seed = adler32(seed);
var stop = Date.now();
console.log( (stop-start)/1000000, seed);

// ---------------------------------------

// Caution: str must be a string
var dict = [];
for(var i=0; i<128; i++) dict[String.fromCharCode(i)] = i;

function adler32_dict(str) {
    var i = 0, l = str.length, s1 = 1, s2 = 0;
    for (; i < l; i++) {
        s1 = (s1 + dict[str[i]]) % 65521;
        s2 = (s2 + s1) % 65521;
    }
    return ((s2 << 16) + s1).toString(16).padStart(8, '0');
}

var i = 0;
var seed = "180b041d";

var start = Date.now();
for(; i<50000; i++) seed = adler32_dict(seed);
var stop = Date.now();
console.log( (stop-start)/1000000, seed);

// ---------------------------------------

async function sha512(message) {
    // encode as UTF-8
    const msgBuffer = new TextEncoder().encode(message);                    

    // hash the message
    const hashBuffer = await crypto.subtle.digest('SHA-512', msgBuffer);

    // convert ArrayBuffer to Array
    const hashArray = Array.from(new Uint8Array(hashBuffer));

    // convert bytes to hex string                  
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return hashHex;
}

var i = 0;
var seed = "2c74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459b";
var start = Date.now();

runB();
function runB(){
  sha512(seed).then(function(result){
    seed = result;
    if( i < 50000 ){
      i++;
      runB();
    } else {
      var stop = Date.now();
      console.log( (stop-start)/1000000, seed);
    }
  });
}