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) {
...