Prove the key.
Each party proves pk = sk · G on BabyJubJub and
emits a padding ciphertext for seats that are empty.
USPTO 19/811,546 · patent pending
Ice Cold Casino is a zero-knowledge mental-poker stack. Players jointly encrypt and shuffle the shoe, seal partial decryptions to one another, and prove the showdown. The verifier checks a Groth16 proof and two hashes. The faces stay off the public tape.
Four phases
Every game runs the same sequence. Each phase is a Circom circuit. A Poseidon commitment threads the private witness from one phase to the next, so the witness is never written onto the public tape.
Each party proves pk = sk · G on BabyJubJub and
emits a padding ciphertext for seats that are empty.
The encrypted shoe is permuted under a private matrix and re-randomized under the aggregate key. The public statement is that the output is a re-encryption of a permutation of the input.
Each registered key computes its partial decryption and seals that payload to every other key. The partial itself is not published.
Partials are aggregated, opened values are checked against the legal encoding, and the game function runs in-circuit. The result leaves as a polynomial hash. Any key that already holds the sealed partials can produce that proof.
Threshold ElGamal
A shoe index — card, pocket, die, reel stop, or ball — is a curve
point P(v) = (v + 1) · G. The shoe is encrypted under
the sum of every registered public key. Recovering a plaintext
takes a contribution from each secret.
Aggregate decryptionP = c1 − Σ (sk_i · c0)
Poseidon commitment over the shoe, the keys, and the designation.
Groth16 attestation that the circuit accepted the private witness.
Polynomial commitment to the sealed payloads or the evaluated result.
Who sits
Hold'em is peer to peer. House games add one key whose circuit work is the shuffle and the share.
Hold'em
Two to ten players each register, shuffle, and share. One of them proves showdown over the holes, the board, and the winner masks. Pot membership is the only private extra. Street betting stays outside these circuits.
House games
Blackjack, roulette, craps, keno, and slots seat the house. It shuffles the shoe and seals partials with everyone else, so its secret is inside the aggregate and the player’s partials are sealed to it. Bet commits, blackjack hit, stand, and split, and a player’s own showdown are separate circuits.
A hand can still close when a player never submits a showdown. Share already delivered every partial to the house. The house runs that same showdown circuit with its own key. The verifier still sees a proof and a hash, and the faces stay off the public tape.
Example
Alice is seat 0 and Bob is seat 1. The poker circuits are compiled for ten seats, so the other eight stay padding. Street betting sits outside the proofs.
Each player proves a key. The shoe will be encrypted under their sum.
pk_A = sk_A · G
pk_B = sk_B · G
Each permutation is a private witness. The public statement is that the output shoe is a re-encryption of a permutation of the input.
pk_A + pk_B.The deal window is 25 positions. Each player seals a partial of every position to the other. The card mask picks a real partial, sk · c0, or the identity. The identity leaves that position closed.
Hole slots 4 through 19 belong to the empty seats and stay padding.
Blinds and the streets are between Alice and Bob. Wager amounts are not witnesses in these circuits.
One of them aggregates both partials, checks each opened card against P(v), and scores both seven-card hands. The proof commits winner masks. If Alice never submits, Bob already holds her sealed partials and can close the hand. The same is true the other way.
Parameters
Encryption does not change. The shoe size, which positions open, and the evaluation function do.
Audit
The public tree is the Circom sources and the protocol notes. It exists for audit and transparency. Copyright © 2026 Barrett Harber. All rights reserved. USPTO application 19/811,546 is patent pending. No copyright license and no patent license are granted.
Arcium MPC, the Solana programs, and the native application live outside that repository. Those layers consume the same hashes and proofs.