Streamdice makes a collection of keyboards with permuted buttons, where each unique keyboard set is generated from a "hash" random seed, all of which are produced by the provided encryption keys. The keyboard below [it may look crowded if seen from a phone or small tablet] demonstrates how we can create a unique shuffled keyboard from a specific hash:
Keyboard Hash: #
The shuffled keyboards are periodically repeated per each character type. Streamdice is is therefore a stream cipher 😯. The number of unique shuffled keyboards is equal to the number of digits used for key # 2, while key # 1 nests each of the digits from key # 2 to create the hashes. In simple words, each hash is a function of both keys. The white paper explains this process in more depth
Pseudo-Random Number Generators (PRNGs):
streamdiceJS uses the Mulberry32 PRNG, while the standalone C++ streamdice program uses the std::mt19937 Mersenne Twister engine . Therefore, these different implementations will generate different ciphertext.