Dice

Blackjack

Plinko

Crash

Mines

Beef

Keno

Castle Roulette

Video Poker

Groomer's Van

Rock Paper Scissors

Limbo

Hilo

Live Blackjack

Casino
Sports
Arena
High Scores
2,067 Online
$3m monthly and $25k daily leaderboards now live for slots and live games.
$3m monthly and $25k daily leaderboards now live for slots and live games.
JewishWinner :
Send him some seath threats
DamiUnGrr :
It’s ok just apologize, that was very rude 😞
tinycock67 :
$20?
JewishWinner :
Death
Donutispro1 :
Harvvv my nga wsg
@DamiUnGrr: It’s ok just apologize, that was very rude 😞
GoobrSon :
over my dead body nigga fuck you
luckiestluckytheluck :
any 50$+ poker?
@luckiestluckytheluck: any 50$+ poker?
Harv :
100
JewishWinner :
I'm down for 2$
GoobrSon :
you aren't getting jackshit
xhamster :
im black faggot
meerko :
aigh come poker
@Harv: 100
tinycock67 :
ill play 100
meerko :
anybody else wanna play poker 20$?
JewishWinner :
It'll be a interesting game
@tinycock67: ill play 100
Donutispro1 :
Your user is tiny____
@GoobrSon: you aren't getting jackshit
DamiUnGrr :
You really need help. My name is Kira don’t call people like that. Your parents did a bad job raising you
banger1 :
Tinycock
w7w7 :
join my game fucking faggot ass niggers
@DamiUnGrr: You really need help. My name is Kira don’t call people like that. Your parents did a bad job raising you
JewishWinner :
Stfu nigger
JewishWinner :
Kira suck my dick
@DamiUnGrr: You really need help. My name is Kira don’t call people like that. Your parents did a bad job raising you
GoobrSon :
Kira you filthy ebony nigger
meerko :
wanna do 15
GoobrSon :
please stop talking
johanpihl2 :
wads
@GoobrSon: please stop talking
JewishWinner :
Fr
@DamiUnGrr: You really need help. My name is Kira don’t call people like that. Your parents did a bad job raising you
banger1 :
Shut ur damn bitch ass up.
JewishWinner :
Damn nigger
@meerko: wanna do 15
joonatan9 :
wna do flappy bird?
@GoobrSon: Kira you filthy ebony nigger
JewishWinner :
Wait a moment ebony?
GoobrSon :
Fuck you kira
JewishWinner :
You watch porn don't you
JewishWinner :
I know what kind of man you are
@JewishWinner: You watch porn don't you
GoobrSon :
of course I do
JewishWinner :
"ebony"
JewishWinner :
Fucking hell lad
DamiUnGrr :
This chat is full of hate ? Why are you so frustrated people ? 😞 it’s gambling losses ? You lost control of that ? I can help you with that responsibly gambling
GoobrSon :
stay far away from that section
araw8 :
ww
@DamiUnGrr: This chat is full of hate ? Why are you so frustrated people ? 😞 it’s gambling losses ? You lost control of that ? I can help you with that responsibly gambling
GoobrSon :
you are so retarded
@GoobrSon: stay far away from that section
JewishWinner :
Nah they suck dick very good
@JewishWinner: Nah they suck dick very good
GoobrSon :
thats all they good for
luckiestluckytheluck :
@aiblackjack
GoobrSon :
dsl
@GoobrSon: you are so retarded
DamiUnGrr :
I can help you be a better person
@DamiUnGrr: I can help you be a better person
GoobrSon :
you cant
@DamiUnGrr: This chat is full of hate ? Why are you so frustrated people ? 😞 it’s gambling losses ? You lost control of that ? I can help you with that responsibly gambling
JewishWinner :
Say "Please tip me" you'll get alot of tips
luckiestluckytheluck :
@aiblackjack
are u done?
JewishWinner :
Especially from the mods
@JewishWinner: Say "Please tip me" you'll get alot of tips
GoobrSon :
I second this
@luckiestluckytheluck: @aiblackjack are u done?
aiblackjack :
ye bro
@aiblackjack: ye bro
luckiestluckytheluck :
all good
luckiestluckytheluck :
hyper is so luck#
@JewishWinner: Say "Please tip me" you'll get alot of tips
Futuraa :
dont beg bro
@JewishWinner: Say "Please tip me" you'll get alot of tips
DamiUnGrr :
What you mean ? I don’t want any tips
DamiUnGrr :
why you guys so rude
@Futuraa: dont beg bro
JewishWinner :
Nigga I brainslos
JewishWinner :
??
radixduel :
.
JewishWinner :
You brainslos?
JewishWinner :
BRI
JewishWinner :
BRAINSLOW
Futuraa :
who tf is brainslos
JewishWinner :
FINALLY
@JewishWinner: FINALLY
DamiUnGrr :
You are German right ?
@Futuraa: who tf is brainslos
JewishWinner :
Idk
w7w7 :
join my game fucking faggot ass niggers
LimboGod :
duel.com/#bet=1555324134
LimboGod :
yessir
@DamiUnGrr: You are German right ?
JewishWinner :
Nein, ich Nacht German
luckiestluckytheluck :
any nigga up for 50$+ poker
@LimboGod: duel.com/#bet=1555324134
Donutispro1 :
W
@LimboGod: duel.com/#bet=1555324134
DamiUnGrr :
Wow congrats 🙂🙂
@LimboGod: duel.com/#bet=1555324134
banger1 :
Gratz man
@LimboGod: duel.com/#bet=1555324134
FatFuck :
da bomb
@JewishWinner: Death
Skystarz :
Start with $10?
LimboGod :
0.6 bet size
LimboGod :
GIGA hit
@LimboGod: duel.com/#bet=1555324134
Spiritmonster :
nice one mate
@LimboGod: duel.com/#bet=1555324134
emenike :
gratz
LimboGod :
tyty
@LimboGod: duel.com/#bet=1555324134
DamiUnGrr :
Was it a bonus buy ? 🙂
@LimboGod: duel.com/#bet=1555324134
JewishWinner :
Ggs nigga
araw8 :
ww
araw8 :
gg
@DamiUnGrr: Was it a bonus buy ? 🙂
JewishWinner :
Stfu
araw8 :
happybarthday
JewishWinner :
Dumbass bitch
JewishWinner :
Ofc it's a bonus
JewishWinner :
He not doing 100$ spins
JewishWinner :
Fucking idiot
DamiUnGrr :
You have aggressive problems. Please get help
JewishWinner :
Go kill yourself
Eskeditzx :
JewishWinner :
Before I do with my dick
JewishWinner :
Been wanting to rape you jolly ass
beannnnzzzz :
yo lets all quit gambling. whose in?
@beannnnzzzz: yo lets all quit gambling. whose in?
JewishWinner :
Mission impossible
@beannnnzzzz: yo lets all quit gambling. whose in?
DamiUnGrr :
Gambling makes only fan if you have limits and gamble responsibly 🙂
luckiestluckytheluck :
any nigga up for 50$+ poker
2,067 Online

Provably Fair

OverviewVerify

Calculation

Enter the required details below to independently verify the fairness of your game round.

Enter the details to verify your results.
Code
// Code written in javascript

// User input values
const clientSeed = '';
const serverSeed = '';
const nonce = 0;

// Suits: D -> Diamonds, H -> Hearts, S -> Spades, C -> Clubs

// Index of 0 to 51: 2D to AC
const CARDS = [
  '2D', '2H', '2S', '2C', '3D', '3H', '3S', '3C', '4D', '4H',
  '4S', '4C', '5D', '5H', '5S', '5C', '6D', '6H', '6S', '6C',
  '7D', '7H', '7S', '7C', '8D', '8H', '8S', '8C', '9D', '9H',
  '9S', '9C', '10D', '10H', '10S', '10C', 'JD', 'JH', 'JS',
  'JC', 'QD', 'QH', 'QS', 'QC', 'KD', 'KH', 'KS', 'KC', 'AD',
  'AH', 'AS', 'AC',
];

// Converts a hex string (e.g. "deadbeef") into a Uint8Array of bytes
function hexToBytes(hex) {
  const bytes = new Uint8Array(hex.length / 2);
  for (let i = 0; i < bytes.length; i++) {
    bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
  }
  return bytes;
}

// Converts a Uint8Array of bytes back into a hex string (e.g. [222, 173, 190, 239] → "deadbeef")
function bytesToHex(bytes) {
  return Array.from(bytes)
    .map((b) => b.toString(16).padStart(2, '0'))
    .join('');
}

// Computes a HMAC-SHA256 using the Web Crypto API
// keyHex: hex-encoded key (e.g. server seed)
// message: Uint8Array to be signed
async function generateHMAC_SHA256(keyHex, message) {
  const keyBytes = hexToBytes(keyHex);

  // Import raw key for HMAC use
  const cryptoKey = await crypto.subtle.importKey(
    'raw',
    keyBytes,
    { name: 'HMAC', hash: 'SHA-256' },
    false,
    ['sign'],
  );

  // Generate HMAC signature
  const signature = await crypto.subtle.sign('HMAC', cryptoKey, message);
  return bytesToHex(new Uint8Array(signature)); // Return signature as hex
}

// Generates a single card from a SHA-256 hash (hex string)
// Uses rejection sampling to ensure fair distribution across 52 possible cards
function generateInfiniteDeckCard(hashHex) {
  const hashBytes = hexToBytes(hashHex);

  for (let i = 0; i <= hashBytes.length - 4; i += 4) {
    const view = new DataView(
      hashBytes.buffer,
      hashBytes.byteOffset + i,
      4,
    );
    const value = view.getUint32(0); // Read 4 bytes as big-endian unsigned integer
    const max = 52 * Math.floor(0x100000000 / 52); // Bias-free range
    if (value < max) {
      const index = value % 52; // Fair card index
      return CARDS[index];
    }
  }

  throw new Error('Failed to generate unbiased card value from hash');
}

// Combines all steps to return a Blackjack card result
// Inputs: serverSeed, clientSeed, nonce, cursor
async function getCard(serverSeed, clientSeed, nonce, cursor) {
  // Prepare input message for HMAC: public seed + nonce + cursor
  const message = new TextEncoder().encode(
    `${clientSeed}:${nonce}:${cursor}`
  );

  // Compute HMAC hash
  const hash = await generateHMAC_SHA256(serverSeed, message);

  // Generate and return card using the hash
  const card = generateInfiniteDeckCard(hash);
  return card;
}

async function validateBlackjackResult(serverSeed, clientSeed, nonce) {
  const cards = [];

  for (let cursor = 0; cursor < 50; cursor++) {
    cards.push(await getCard(serverSeed, clientSeed, nonce, cursor));
  }

  return cards;
}

// Run the validateBlackjackResult function if input values are provided
if (serverSeed && serverSeed.trim() !== '' && clientSeed && clientSeed.trim() !== '' && nonce >= 0) {
  validateBlackjackResult(serverSeed, clientSeed, nonce).then(result => {
    console.log("Suits: D -> Diamonds, H -> Hearts, S -> Spades, C -> Clubs");
    console.log("Next 50 cards in the deck:", result);
  });
} else {
  console.log("Please provide valid serverSeed, clientSeed, and nonce (>=0) before running.");
}
            
Enter the details to verify your results.
Code
// Code written in javascript

// User input values
const clientSeed = '';
const serverSeed = '';
const nonce = 0;

// Suits: D -> Diamonds, H -> Hearts, S -> Spades, C -> Clubs

// Index of 0 to 51: 2D to AC
const CARDS = [
  '2D', '2H', '2S', '2C', '3D', '3H', '3S', '3C', '4D', '4H',
  '4S', '4C', '5D', '5H', '5S', '5C', '6D', '6H', '6S', '6C',
  '7D', '7H', '7S', '7C', '8D', '8H', '8S', '8C', '9D', '9H',
  '9S', '9C', '10D', '10H', '10S', '10C', 'JD', 'JH', 'JS',
  'JC', 'QD', 'QH', 'QS', 'QC', 'KD', 'KH', 'KS', 'KC', 'AD',
  'AH', 'AS', 'AC',
];

// Converts a hex string (e.g. "deadbeef") into a Uint8Array of bytes
function hexToBytes(hex) {
  const bytes = new Uint8Array(hex.length / 2);
  for (let i = 0; i < bytes.length; i++) {
    bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
  }
  return bytes;
}

// Converts a Uint8Array of bytes back into a hex string (e.g. [222, 173, 190, 239] → "deadbeef")
function bytesToHex(bytes) {
  return Array.from(bytes)
    .map((b) => b.toString(16).padStart(2, '0'))
    .join('');
}

// Computes a HMAC-SHA256 using the Web Crypto API
// keyHex: hex-encoded key (e.g. server seed)
// message: Uint8Array to be signed
async function generateHMAC_SHA256(keyHex, message) {
  const keyBytes = hexToBytes(keyHex);

  // Import raw key for HMAC use
  const cryptoKey = await crypto.subtle.importKey(
    'raw',
    keyBytes,
    { name: 'HMAC', hash: 'SHA-256' },
    false,
    ['sign'],
  );

  // Generate HMAC signature
  const signature = await crypto.subtle.sign('HMAC', cryptoKey, message);
  return bytesToHex(new Uint8Array(signature)); // Return signature as hex
}

// Generates a single card from a SHA-256 hash (hex string)
// Uses rejection sampling to ensure fair distribution across 52 possible cards
function generateInfiniteDeckCard(hashHex) {
  const hashBytes = hexToBytes(hashHex);

  for (let i = 0; i <= hashBytes.length - 4; i += 4) {
    const view = new DataView(
      hashBytes.buffer,
      hashBytes.byteOffset + i,
      4,
    );
    const value = view.getUint32(0); // Read 4 bytes as big-endian unsigned integer
    const max = 52 * Math.floor(0x100000000 / 52); // Bias-free range
    if (value < max) {
      const index = value % 52; // Fair card index
      return CARDS[index];
    }
  }

  throw new Error('Failed to generate unbiased card value from hash');
}

// Combines all steps to return a Blackjack card result
// Inputs: serverSeed, clientSeed, nonce, cursor
async function getCard(serverSeed, clientSeed, nonce, cursor) {
  // Prepare input message for HMAC: public seed + nonce + cursor
  const message = new TextEncoder().encode(
    `${clientSeed}:${nonce}:${cursor}`
  );

  // Compute HMAC hash
  const hash = await generateHMAC_SHA256(serverSeed, message);

  // Generate and return card using the hash
  const card = generateInfiniteDeckCard(hash);
  return card;
}

async function validateBlackjackResult(serverSeed, clientSeed, nonce) {
  const cards = [];

  for (let cursor = 0; cursor < 50; cursor++) {
    cards.push(await getCard(serverSeed, clientSeed, nonce, cursor));
  }

  return cards;
}

// Run the validateBlackjackResult function if input values are provided
if (serverSeed && serverSeed.trim() !== '' && clientSeed && clientSeed.trim() !== '' && nonce >= 0) {
  validateBlackjackResult(serverSeed, clientSeed, nonce).then(result => {
    console.log("Suits: D -> Diamonds, H -> Hearts, S -> Spades, C -> Clubs");
    console.log("Next 50 cards in the deck:", result);
  });
} else {
  console.log("Please provide valid serverSeed, clientSeed, and nonce (>=0) before running.");
}
            
About
  • wtf Duel?
  • High Scores
  • Referral FAQ
  • Provably Fair
  • Why Bonuses Suck
  • Fake Bets
  • Zero Edge
  • Careers
  • Merch
Legal
  • Terms of Service
  • Privacy Policy
  • Sports Betting Rules
  • Responsible Gaming
Community
Duel.com is owned and operated by Immortal Snail LLC, registration number: L22982, registered address: Arthur Evelyn Building, Suite 5, Main Street, Charlestown, Nevis, West lndies. Contact us at hey@duel.com. Duel.com is licensed and regulated by the Government of the Autonomous Island of Anjouan, Union of Comoros and operates under License No. ALSI-202411026-FI1. Duel.com has passed all regulatory compliance and is legally authorized to conduct gaming operations for any and all games of chance and wagering.Duel is dedicated to encouraging responsible gambling. To learn more, please visit: https://www.gambleaware.org
Copyright © 2026 duel.com. All rights reserved.
2,067 Online
$3m monthly and $25k daily leaderboards now live for slots and live games.
$3m monthly and $25k daily leaderboards now live for slots and live games.
JewishWinner :
Send him some seath threats
DamiUnGrr :
It’s ok just apologize, that was very rude 😞
tinycock67 :
$20?
JewishWinner :
Death
Donutispro1 :
Harvvv my nga wsg
@DamiUnGrr: It’s ok just apologize, that was very rude 😞
GoobrSon :
over my dead body nigga fuck you
luckiestluckytheluck :
any 50$+ poker?
@luckiestluckytheluck: any 50$+ poker?
Harv :
100
JewishWinner :
I'm down for 2$
GoobrSon :
you aren't getting jackshit
xhamster :
im black faggot
meerko :
aigh come poker
@Harv: 100
tinycock67 :
ill play 100
meerko :
anybody else wanna play poker 20$?
JewishWinner :
It'll be a interesting game
@tinycock67: ill play 100
Donutispro1 :
Your user is tiny____
@GoobrSon: you aren't getting jackshit
DamiUnGrr :
You really need help. My name is Kira don’t call people like that. Your parents did a bad job raising you
banger1 :
Tinycock
w7w7 :
join my game fucking faggot ass niggers
@DamiUnGrr: You really need help. My name is Kira don’t call people like that. Your parents did a bad job raising you
JewishWinner :
Stfu nigger
JewishWinner :
Kira suck my dick
@DamiUnGrr: You really need help. My name is Kira don’t call people like that. Your parents did a bad job raising you
GoobrSon :
Kira you filthy ebony nigger
meerko :
wanna do 15
GoobrSon :
please stop talking
johanpihl2 :
wads
@GoobrSon: please stop talking
JewishWinner :
Fr
@DamiUnGrr: You really need help. My name is Kira don’t call people like that. Your parents did a bad job raising you
banger1 :
Shut ur damn bitch ass up.
JewishWinner :
Damn nigger
@meerko: wanna do 15
joonatan9 :
wna do flappy bird?
@GoobrSon: Kira you filthy ebony nigger
JewishWinner :
Wait a moment ebony?
GoobrSon :
Fuck you kira
JewishWinner :
You watch porn don't you
JewishWinner :
I know what kind of man you are
@JewishWinner: You watch porn don't you
GoobrSon :
of course I do
JewishWinner :
"ebony"
JewishWinner :
Fucking hell lad
DamiUnGrr :
This chat is full of hate ? Why are you so frustrated people ? 😞 it’s gambling losses ? You lost control of that ? I can help you with that responsibly gambling
GoobrSon :
stay far away from that section
araw8 :
ww
@DamiUnGrr: This chat is full of hate ? Why are you so frustrated people ? 😞 it’s gambling losses ? You lost control of that ? I can help you with that responsibly gambling
GoobrSon :
you are so retarded
@GoobrSon: stay far away from that section
JewishWinner :
Nah they suck dick very good
@JewishWinner: Nah they suck dick very good
GoobrSon :
thats all they good for
luckiestluckytheluck :
@aiblackjack
GoobrSon :
dsl
@GoobrSon: you are so retarded
DamiUnGrr :
I can help you be a better person
@DamiUnGrr: I can help you be a better person
GoobrSon :
you cant
@DamiUnGrr: This chat is full of hate ? Why are you so frustrated people ? 😞 it’s gambling losses ? You lost control of that ? I can help you with that responsibly gambling
JewishWinner :
Say "Please tip me" you'll get alot of tips
luckiestluckytheluck :
@aiblackjack
are u done?
JewishWinner :
Especially from the mods
@JewishWinner: Say "Please tip me" you'll get alot of tips
GoobrSon :
I second this
@luckiestluckytheluck: @aiblackjack are u done?
aiblackjack :
ye bro
@aiblackjack: ye bro
luckiestluckytheluck :
all good
luckiestluckytheluck :
hyper is so luck#
@JewishWinner: Say "Please tip me" you'll get alot of tips
Futuraa :
dont beg bro
@JewishWinner: Say "Please tip me" you'll get alot of tips
DamiUnGrr :
What you mean ? I don’t want any tips
DamiUnGrr :
why you guys so rude
@Futuraa: dont beg bro
JewishWinner :
Nigga I brainslos
JewishWinner :
??
radixduel :
.
JewishWinner :
You brainslos?
JewishWinner :
BRI
JewishWinner :
BRAINSLOW
Futuraa :
who tf is brainslos
JewishWinner :
FINALLY
@JewishWinner: FINALLY
DamiUnGrr :
You are German right ?
@Futuraa: who tf is brainslos
JewishWinner :
Idk
w7w7 :
join my game fucking faggot ass niggers
LimboGod :
duel.com/#bet=1555324134
LimboGod :
yessir
@DamiUnGrr: You are German right ?
JewishWinner :
Nein, ich Nacht German
luckiestluckytheluck :
any nigga up for 50$+ poker
@LimboGod: duel.com/#bet=1555324134
Donutispro1 :
W
@LimboGod: duel.com/#bet=1555324134
DamiUnGrr :
Wow congrats 🙂🙂
@LimboGod: duel.com/#bet=1555324134
banger1 :
Gratz man
@LimboGod: duel.com/#bet=1555324134
FatFuck :
da bomb
@JewishWinner: Death
Skystarz :
Start with $10?
LimboGod :
0.6 bet size
LimboGod :
GIGA hit
@LimboGod: duel.com/#bet=1555324134
Spiritmonster :
nice one mate
@LimboGod: duel.com/#bet=1555324134
emenike :
gratz
LimboGod :
tyty
@LimboGod: duel.com/#bet=1555324134
DamiUnGrr :
Was it a bonus buy ? 🙂
@LimboGod: duel.com/#bet=1555324134
JewishWinner :
Ggs nigga
araw8 :
ww
araw8 :
gg
@DamiUnGrr: Was it a bonus buy ? 🙂
JewishWinner :
Stfu
araw8 :
happybarthday
JewishWinner :
Dumbass bitch
JewishWinner :
Ofc it's a bonus
JewishWinner :
He not doing 100$ spins
JewishWinner :
Fucking idiot
DamiUnGrr :
You have aggressive problems. Please get help
JewishWinner :
Go kill yourself
Eskeditzx :
JewishWinner :
Before I do with my dick
JewishWinner :
Been wanting to rape you jolly ass
beannnnzzzz :
yo lets all quit gambling. whose in?
@beannnnzzzz: yo lets all quit gambling. whose in?
JewishWinner :
Mission impossible
@beannnnzzzz: yo lets all quit gambling. whose in?
DamiUnGrr :
Gambling makes only fan if you have limits and gamble responsibly 🙂
luckiestluckytheluck :
any nigga up for 50$+ poker
2,067 Online

Duel

Casino

Sports

Arena

Chat

IconSolana
IconMinesBomb
IconMinesDiamondBlue
IconMinesDiamondGreen
IconMinesExplosion
IconKenoGem

Forgot password?

or continue with
or continue with
  • United-Kingdom
    English
  • China
    汉语
  • Japan
    日本語
  • Korea,-South
    한국어
  • Thailand
    ภาษาไทย
  • Vietnam
    Tiếng Việt