Provably Fair Gaming
Every card game on SuitedGames deals from a seed that is fixed before the first card, and every hand of a longer game comes from that same seed. You can recompute any deal and check that nobody changed it after the fact.
How It Works
Our provably fair system uses a commitment-reveal protocol based on SHA-256 cryptographic hashing. This ensures that the outcome of every game is determined before you play, and cannot be changed afterward.
Server Commits
Before the game begins, the server generates a random seed and computes its SHA-256 hash (the “commitment”). You have the commitment before any cards are dealt, and the server cannot change the seed after this point. In an online match you see only the hash until the match ends. A single-player game runs in your browser, so your browser gets the seed with the hash.
Client Seed Added
Your browser generates its own random seed, which is combined with the server's seed to produce the final shuffle. This means neither the server nor the client alone controls the outcome.
Game Plays Out
The combined seeds determine the card order. Games with more than one hand, such as Euchre, Canasta, and Cribbage, shuffle every hand from the same seeds: the first hand uses nonce 0, the second nonce 1, the third nonce 2. When a Rummy or Crazy Eights stock runs out mid-hand, the discard pile is reshuffled by a generator seeded from that hand's deal, so the seeds decide that too. A challenge link replays every hand.
Seed Revealed & Verified
Once you have the seed (at the end of an online match, or with the deal in a single-player game), check that its SHA-256 hash matches the commitment. If they match, the server could not have changed the cards, and you can recompute every hand from the seeds.
How the Shuffle Works
Every new game is dealt with shuffle v2: a Fisher-Yates shuffle whose random numbers all come from HMAC-SHA256 keyed with the server seed. Every order of the deck is equally likely, and anyone with the seeds can deal the same cards. To shuffle a deck of n cards:
- Build the random stream. For k = 0, 1, 2 and onward, compute HMAC-SHA256 with the server seed as the key and clientSeed:nonce:k as the message. Both are UTF-8 text, so a hex seed is used as written, not decoded. Each block is 32 bytes.
- Read it as 32-bit numbers. Take the bytes four at a time, big-endian, so each block gives 8 numbers.
- Shuffle from the back. For each position i from n - 1 down to 1, take the next number v. If v is at least 232 - (232 mod (i + 1)), skip it and take the next one. Otherwise swap the card at position i with the card at position v mod (i + 1).
Skipping the few numbers above that limit is what keeps every swap even: a plain remainder makes low positions very slightly more likely. A 52-card deck makes 51 swaps and reads 7 blocks. The unshuffled 52-card deck runs Clubs, Diamonds, Hearts, Spades, each from Ace to King. Hand N of a longer game uses nonce N.
Shuffle v1, and why it was replaced
Games dealt before shuffle v2 went live, and daily deals up to 30 September 2026, used shuffle v1. It ran the same Fisher-Yates loop, but only its first 8 swaps came from HMAC-SHA256 (one hash of clientSeed:nonce). The other 43 swaps of a 52-card deck came from a 32-bit string hash that is not cryptographic, and every swap took a plain remainder. So v1 was not uniform: the last nine swaps could come out only 2,520 ways instead of 3,628,800, and some cards landed in some positions over six times as often as they should have.
Shuffle v1 still exists for one job: every challenge link, saved game, and past daily keeps dealing exactly the cards it dealt before. Each game records its shuffle version, and the tools below re-run whichever version dealt it.
Verification Tool
Paste the commitment hash and revealed seed from any game to independently verify fairness. The tool computes SHA-256 of the seed and checks it against the commitment.
Import & Re-compute Shuffle
Paste exported verification JSON to perform a full re-computation. This tool verifies the commitment hash, re-computes the HMAC combined hash, and re-runs the Fisher-Yates shuffle to confirm the deck order matches. It uses the shuffle version the data names, and v1 when it names none. It re-deals a standard 52-card deck, so it checks games dealt from one.
Export Verification Data
Download the verification data for any game: the server seed, client seed, commitment hash, nonce, shuffle version, and the deck order of its first hand. To check a later hand, shuffle the same seeds with that hand's nonce (1 for the second hand, 2 for the third) and the same shuffle version.
Fair Play in Seed Challenges
Daily challenges and seed challenges let everyone play the exact same deal, hand for hand. Here's how shared leaderboards stay fair.
Same Deck for Everyone
Every player in a seed challenge receives the identical deck order, derived from the same cryptographic seed tuple, for every hand of the game. The shuffle is deterministic: the same seeds, nonce, and shuffle version always produce the same deck. A challenge stores its version with its seeds, so a link made today replays exactly as it did the day it was shared.
Daily Deals Come From the Date
The daily deal for a game is shuffled from a public seed: server seed daily-seed-YYYY-MM-DD-game, client seed daily-challenge, nonce 0 for the first hand, and shuffle v2 for dailies from 1 October 2026 (v1 before that). Nobody picks it and anyone can recompute it. Because the seed is public, a daily deal is not hidden in advance the way a shared challenge's server seed is. Only a game started from the daily page counts on its leaderboard.
No Peeking Before Playing
For a shared challenge link, the server reveals the seeds only when you start the challenge, and your browser computes the deck order with the provably fair shuffle. Leaderboards only show results (moves, time, score), never card positions or move sequences.
Spoiler-Free Leaderboards
Challenge leaderboards show aggregate results only, never fairness data, deck orders, or replay data. Before playing a daily challenge, you'll see leader names and win/loss status, but no move counts or times that could hint at difficulty.
Post-Game Verification
After completing a challenge, you can verify that the commitment hash matches the revealed seed, proving the deal was fixed before you played. Use the verification tools above to independently confirm any game's fairness.
Rate-Limited Seed Access
Seed retrieval is rate-limited and logged to prevent automated scraping of challenge deck orders. Each seed access is recorded for audit purposes.
Seed challenges use the same commitment-reveal protocol described above, applied to a shared seed tuple so every player gets the same verifiable deal in every hand.