Just Cribbage · Independent Verifier

Verify a deal for yourself

This page reproduces the cards from the seed the game commits to, using only SHA-256, entirely in your browser, offline. If the cards below match what was on the table, the deal was honest: nothing was re-rolled or stacked, by anyone. Handles both single-player receipts and online (server-dealt) match receipts.

How it works, single-player: hand_seed = SHA256(secret | client_seed | index). Online (v2): the SERVER commits SHA256(server_seed) before either player sits down; both players' public nonces are mixed into every hand: hand_secret_i = SHA256(server_seed | host_nonce | joiner_nonce | i), hand_seed_i = SHA256(hand_secret_i) (first 63 bits); the opening cut comes from SHA256(server_seed | nonces | "first"). Either way, a uint32 stream SHA256(seed || counter) drives a Fisher-Yates shuffle of the ordered deck; the starter is the next draw into the remaining stock. Identical to the game's core/DealController.gd + core/FairDeal.gd, the server's engine.ts, and verify.py. Audit the source of this page; it is the whole algorithm.

Want to see how the computer opponent decides its plays, and why it can't peek at your hand? Read the AI Deep Dive: a walk through the actual decision engine, straight from the source code.