The following examples explain most of the steps that are necessary to create a secure and verifiable card game with LibTMCG. We consider an application with five permanent players (denoted by P_0, P_1, P_2, P_3, and P_4) and a regular deck of 52 different cards. For convenience only the more efficient card encoding scheme of Barnett and Smart [BS03] is described. Additionally, we complete our exposition with code fragments which show the application of the fast shuffle verification protocol due to Groth [Gr05, Gr10] with an interactive or even non-interactive instantiation of the zero-knowledge proofs. On modern computers this approach achieves good real world performance and simultaneously keeps the cheating probability negligible.
Throughout the remaining pages we assume that all players are pairwise connected by
authenticated communication channels. These channels are organized in input resp.
output streams, where
std::ostream instance for the
communication with player P_i.13
|• Library Initialization:|
|• Setup Communication Channels:|
|• Session Initialization and Key Generation:|
|• Operations on Cards:|
|• Operations on Stacks:|
|• Quit a Session:|
We assume that the players are ordered in a natural way such that we can use an uniform nomenclature.