<div class="container text-white mx-auto w-full max-w-xl mt-10 p-4 rounded-md">
<h1 class="text-2xl text-center font-bold mb-6">RustCasino Blackjack Verifier</h1>
<label for="serverSeed">Server Seed</label>
<input id="serverSeed" type='text' class='w-full py-2 px-3 rounded-md mt-1 mb-2' />
<label for="serverHash">Server Hash</label>
<input id="serverHash" type='text' class='w-full py-2 px-3 rounded-md mt-1 mb-2' />
<div id="verify" class='cursor-pointer text-center p-3 rounded-md mt-3'>
Verify Game
</div>
<div id="result" class='mt-3'>
</div>
</div>
import seedrandom from 'https://cdn.skypack.dev/seedrandom@3.0.5'
const result = document.getElementById('result')
const error = message => {
result.innerHTML = `<div class="text-red-500">${message}</div>`
}
document.getElementById('verify').onclick = () => {
const serverSeed = document.getElementById('serverSeed').value
const serverHash = document.getElementById('serverHash').value
if (!serverSeed) return error('Server seed is required')
if (!serverHash) return error('Server hash is required')
const isHashValid = CryptoJS.SHA256(serverSeed).toString() === serverHash
const deck = shuffleDeck(serverSeed);
result.innerHTML = `<div class="text-center">
<div class="font-bold my-2 uppercase text-xl">
${isHashValid
? '<div class="text-green-500">Game is valid</div><div>Deck: '+deck.join(" ")+'</div>'
: '<div class="text-red-500">Game is invalid</div>'}
</div>
</div>`
}
function shuffleDeck(serverSeed, deckCount = 6) {
let deck = [];
for (let i = 0; i < deckCount; i++) {
deck = deck.concat(createDeck());
}
const rng = seedrandom(`${serverSeed}`);
for (let i = deck.length - 1; i > 0; i--) {
const j = Math.floor(rng() * (i + 1));
[deck[i], deck[j]] = [deck[j], deck[i]];
}
return deck;
}
function createDeck() {
const suits = ["H", "D", "C", "S"];
const values = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"];
let deck = [];
for (let suit of suits) {
for (let value of values) {
deck.push(`${value}|${suit}`);
}
}
return deck;
}