Dicenow Verifier

Verifies the fairness of the dicenow.com game

HTML

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha512.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha256.js"></script>
<h1>Dicenow Verifier</h1>

<div class="cont">
    <textarea id="randomize" placeholder="Paste from copy paste textbox"></textarea>
    <br />or
    <br />
    <textarea id="ssh" placeholder="Server secret hash"></textarea>
    <br />
    <textarea id="ss" placeholder="Server secret"></textarea>
    <br />
    <textarea id="cs" placeholder="Client seed"></textarea>
    <br />
    <input id="sn" placeholder="Starting nonce (>=1)" type="number"></input>
    <input id="nb" placeholder="Number of Bets (>=1)" type="number"></input>
    <br />
    <button id="verify">Verify</button>
</div>

<h2>Results:</h2>

<div class="cont">
    <p id="results"></p>
</div>

CSS

textarea {
    width:90%;
}
input {
}
button {
    font-size:2em;
    padding:1%;
    margin:2%;
}
.cont {
    margin-left:3%;
}

JavaScript

function check(event, ignoreInput) {
    var randomize = document.getElementById('randomize').value;
    var ssh = document.getElementById('ssh').value;
    var ss = document.getElementById('ss').value;
    var cs = document.getElementById('cs').value;
    var sn = document.getElementById('sn').value;
    sn = parseInt(sn);
    var nb = document.getElementById('nb').value;
    nb = parseInt(nb);

    if (!ignoreInput && randomize.length > 0) {
        var pattern = /"(.+?)" "(.+?)" "(.+?)" "(.+?)"/;
        if (pattern.test(randomize)) {
            var result = pattern.exec(randomize);
            document.getElementById('ss').value = result[1];
            document.getElementById('ssh').value = result[2];
            document.getElementById('cs').value = result[3];
            document.getElementById('nb').value = result[4];
            document.getElementById('sn').value = '1';
            document.getElementById('randomize').value = '';
            check(event, true);
            return;
        }
    }

    if (ssh != check.lastssh) {
        ssh2 = CryptoJS.SHA256(ss);
        if (ssh2 + '' == ssh) {
            println('<span style="color: green; font-weight: bold;">' + 'Server secret hash is correct.</span>');
        } else {
            println('<span style="color: red; font-weight: bold;">' + 'Server secret hash check failed!</span>');
            println('Purported hash: ' + ssh);
            println('Actual hash: ' + ssh2);
        }
    }

    for (j = sn + nb - 1; j >= sn; j--) {
        gen = cs + ':' + j;
        hash = CryptoJS.HmacSHA512(gen, ss).toString(CryptoJS.enc.Hex);
        i = 0;
        roll = -1;
        while (roll == -1) {
            if (i == 25) {
                l3 = hash.substring(125, 128);
                l3p = l3.parseInt(l3, 16);
                roll = l3p / 10000;
            } else {
                f5 = hash.substring(5 * i, 5 + 5 * i);
                f5p = parseInt(f5, 16);
                if (f5p < 1000000) {
        ...