True Odds

Fairness verifier

Every shoe at a True Odds table is shuffled from a seed pair you can check. When you rotate a table's seed, the table reveals the server seed behind it. Paste that reveal here to check it against its commitment and see every shoe it dealt, card by card.

The check runs in this page. It sends nothing anywhere, and works offline once loaded.

Your reveal

Loading the verifier…

How a shoe is checked

The method is the same at every table (protocol version 1). Each step can be redone with ordinary tools; the commands at the end use the standard sha256sum and openssl.

  1. The commitment

    Before the first shuffle from a seed pair, the table makes a server seed of 32 random bytes and shows you its commitment: the SHA-256 hash of those 32 bytes (not of their hex text), as 64 hex characters. The hash fixes the seed without showing it.

  2. Your client seed

    The pair's other half is a client seed of 1 to 64 printable characters, with no spaces. You can choose your own when you rotate the seed.

  3. The stream

    Each shoe takes the pair's next nonce, counting from 0. Its random stream is HMAC-SHA256, keyed with the server seed's bytes, over the text client seed:nonce:counter for counter 0, 1, 2 and so on, with the numbers written in decimal. The 32-byte results are joined end to end and read 4 bytes at a time as big-endian 32-bit numbers.

  4. Fair numbers (Lemire's method)

    To draw a number below n, a 32-bit number is multiplied by n, and the top 32 bits of the 64-bit product are the result. When the bottom 32 bits fall below 232 mod n, the number is set aside and the next one is used. That keeps every result from 0 to n − 1 exactly equally likely.

  5. The shuffle (Fisher–Yates)

    The shoe starts in order, deck after deck, each deck ♣A to ♣K, ♦A to ♦K, ♥A to ♥K, then ♠A to ♠K. For each place i from the last down to 1 (counting places from 0), a place j below i + 1 is drawn, and the cards at i and j swap.

  6. The deal

    Cards leave the shuffled shoe from place 0 on. First the burn: at blackjack one card, face down; at baccarat one card face up, then as many face down as its value (ace 1, two to nine their pips, ten and court cards 10). The cut card sits after 75 % of a blackjack shoe and 95 % of a baccarat shoe, burn included: the round in which it comes out is finished, and the next round starts a new shoe from the next nonce.

  7. The reveal

    When you rotate the seed, the table reveals the server seed and starts a new pair, and the shoe in play is retired. A pair deals at most 1,000 shoes; after that, play waits until the seed is rotated.

Check it with your own tools

# The commitment: SHA-256 of the server seed's 32 bytes
printf '%s' SERVER_SEED | xxd -r -p | sha256sum

# The first block of the first shoe's stream (nonce 0, counter 0)
printf '%s' 'CLIENT_SEED:0:0' | openssl dgst -sha256 -mac HMAC -macopt hexkey:SERVER_SEED