JSFiddle - React, Tailwind, and code Playground

by russau

HTML

<script src="http://jssha.sourceforge.net/sha.js"></script>

JavaScript

function dec2hex( s ) { return ( s<15.5 ? '0' : '' ) + Math.round( s ).toString( 16 ); }
function hex2dec( s ) { return parseInt( s, 16 ); }

function base32tohex(base32)
{
    var base32chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
    var bits = "";
    var hex = "";
    
    for (var i=0; i<base32.length; i++)
    {
        var val = base32chars.indexOf(base32.charAt(i));
        bits += leftpad(val.toString(2), 5, '0');
    }
    
    // leftpad bits with 0 until length is a multiple of 4
    while (bits.length % 4 != 0)
        bits = "0" + bits;
    
    for (var i=bits.length-4; i>=0; i=i-4)
    {
        var chunk = bits.substr(i, 4);
        hex = parseInt(chunk, 2).toString(16) + hex;   
    }
    return hex;
}

function leftpad(str, len, pad) {
    if (len + 1 >= str.length) {
                str = Array(len + 1 - str.length).join(pad) + str;
    }
    return str;
}

$(function()
{
  var key = base32tohex("JBSWY3DPEHPK3PXP");
    var epoch = Math.round(new Date().getTime()/1000.0);
    var time = leftpad(dec2hex(Math.floor(epoch / 30)), 16, '0');   

    var hmacObj = new jsSHA(time, 'HEX');
    var hmac = hmacObj.getHMAC(key,'HEX','SHA-1',"HEX");

    var offset = hex2dec(hmac.substring(hmac.length-1));
var part1 = hmac.substr(0, offset*2);
var part2 = hmac.substr(offset*2, 8);
    var part3 = hmac.substr(offset*2 + 8, hmac.length - offset );
    
    
     $('body').append(hmac);
     $('body').append($('<br/>'))
     $('body').append(part1);
    $('body').append("<span style='background-color:#ff0000'>" +  part2 + "</span>");
     $('body').append(part3);
    
    var binary =  (hex2dec(hmac.substr(offset*2, 8)) &
        hex2dec('7fffffff')) + '';
    binary = (binary).substr(binary.length - 6,6);    
        
     $('body').append($('<br/>')).append(binary);

    
    //var time= "2000000000";
    

    
    
});