How Results Are Generated
The technical details of how your seeds become random numbers
Oct 6, 2026
This article is for players who want the technical details. It explains how we turn your seeds into random numbers.
Step 1: Create random bytes
We use HMAC-SHA256. The server seed is the key. The message is your client seed, the nonce and a cursor, joined with colons:
HMAC_SHA256(key = serverSeed, message = clientSeed + ":" + nonce + ":" + cursor)Each HMAC gives 32 bytes. The cursor starts at 0. If a game needs more than 32 bytes, we run the HMAC again with the cursor set to 1, then 2, and so on. We join the outputs in order.
Step 2: Turn bytes into numbers between 0 and 1
We split the bytes into groups of 4. Each group becomes one number, called a float, between 0 (included) and 1 (not included). So each HMAC gives 8 floats.
For a group of 4 bytes (b1, b2, b3, b4), the float is:
float = b1/256 + b2/256² + b3/256³ + b4/256⁴Example
Say the first 4 bytes are 163, 244, 224 and 172.
163 / 256 = 0.636719
244 / 65,536 = 0.003723
224 / 16,777,216 = 0.000013
172 / 4,294,967,296 = 0.00000004
Adding them up gives a float of about 0.640455.
Step 3: Turn floats into a game result
Each game uses its floats in its own way. For example, Dice multiplies the float by 10,001, rounds down, and divides by 100. A float of 0.640455 gives a roll of 64.05.
See Game results for how every game uses its floats.