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
1,667 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.
zoIfi :
Enjoy
Mamm0n :
me
LemmeShowU :
I was 1st
zoIfi :
Fuck….
Iduot :
wow
Milbe :
Who wants $10
asadyy1 :
me
niggert1n :
me
Itsmee :
me
Donut :
me
Bitcoinboss :
Ms
melodicblue :
me
KenoblessMeplease :
Me
devingr128 :
Meee
wjack :
w chooma
tjrr :
me
melodicblue :
lmao
tjrr :
I do
niggert1n :
asady won last time
@Milbe: Who wants $10
nnacdonalds :
me
Donut :
lol
tjrr :
me
@Milbe: Who wants $10
bigfatwin :
yes
zoIfi :
Calm down
@Milbe: Who wants $10
rigby :
me
@Milbe: Who wants $10
Bitcoinboss :
No need for all this u can just choose whoever u like to tip
Iduot :
Ok guys
melodicblue :
nigga owned nasa network
Donut :
xdd
Gypsy_Disciple :
Fucking beggars ong
@Milbe: Who wants $10
KenoblessMeplease :
Me I was 1sy
Iduot :
shut up
@Milbe: Who wants $10
devingr128 :
Me ofc
hasbulla :
who wants dick in their ass
@Milbe: Who wants $10
Spiritmonster :
me2
@Milbe: Who wants $10
Vincenz0 :
sure
@hasbulla: who wants dick in their ass
melodicblue :
zolfi
@hasbulla: who wants dick in their ass
Hype85 :
Me sir
hasbulla :
hot
nnacdonalds :
i was 1t who reply
zoIfi :
Wow
Itsmee :
hehe
@Milbe: Who wants $10
Methylamine :
yea
zoIfi :
Not cool man not cool.
tjrr :
Say Factor Owns Me For 10$
KenoblessMeplease :
Me..
rapemeplease :
@Lion
fix chat
rigby :
factor owns
niggert1n :
factor owns me
mwaman :
factor owns me
therealhadex :
factor owns me
bigfatwin :
factor owns me
@tjrr: Say Factor Owns Me For 10$
Bitcoinboss :
Factor owns slaves
@rapemeplease: @Lion fix chat
Lion :
sar
bla2k :
?
Donut :
nice fake
Milbe :
Whoever says “I Love Duel❤” gets a tip
rigby :
i love duel
mwaman :
i love duek
KenoblessMeplease :
Me....
Eitri :
I love duel
Itsmee :
i love duel
Spiritmonster :
i love duel <3
niggert1n :
i love duel <3
rapemeplease :
fuck ur mother
Mamm0n :
I love duel <3
Donut :
I Love Duel❤
Vincenz0 :
I Love Duel❤
therealhadex :
I Love Duel❤
Methylamine :
i love duel
@Milbe: Whoever says “I Love Duel❤” gets a tip
rigby :
I Love Duel❤
KenoblessMeplease :
I love duele
nnacdonalds :
Love Duel❤
Lion :
ok
Bitcoinboss :
I love duel❤
Donut :
im first
Gypsy_Disciple :
Fuck jeets
InesF28 :
“I Love Duel❤
@Milbe: Whoever says “I Love Duel❤” gets a tip
Hans1488 :
I love Duel❤
zoIfi :
I love hegerton ❤
@Milbe: Whoever says “I Love Duel❤” gets a tip
Methylamine :
I Love Duel❤
KenoblessMeplease :
I love duels♥
Bitcoinboss :
I love niggers
@Milbe: Whoever says “I Love Duel❤” gets a tip
Donut :
i said first
macroniste :
I Love Duel❤
Spiritmonster :
thank you
hasbulla :
duel is charity
zoIfi :
fuck
nnacdonalds :
Its fake stop spamming
melodicblue :
I love n_gger
Gypsy_Disciple :
Stopppp
Milbe :
Sent
Warren :
I fucking despise Duel
Warren :
this gamemode sucks dick
Iduot :
lmaooo
Lion :
ok stop here
@Milbe: Sent
Vincenz0 :
gg
Bitcoinboss :
Yo
znajderr :
stop bitches
Bitcoinboss :
Enough
@Warren: this gamemode sucks dick
zoIfi :
Ok warren
Iduot :
FUCK DUEL!!!!
1,667 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.
1,667 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.
zoIfi :
Enjoy
Mamm0n :
me
LemmeShowU :
I was 1st
zoIfi :
Fuck….
Iduot :
wow
Milbe :
Who wants $10
asadyy1 :
me
niggert1n :
me
Itsmee :
me
Donut :
me
Bitcoinboss :
Ms
melodicblue :
me
KenoblessMeplease :
Me
devingr128 :
Meee
wjack :
w chooma
tjrr :
me
melodicblue :
lmao
tjrr :
I do
niggert1n :
asady won last time
@Milbe: Who wants $10
nnacdonalds :
me
Donut :
lol
tjrr :
me
@Milbe: Who wants $10
bigfatwin :
yes
zoIfi :
Calm down
@Milbe: Who wants $10
rigby :
me
@Milbe: Who wants $10
Bitcoinboss :
No need for all this u can just choose whoever u like to tip
Iduot :
Ok guys
melodicblue :
nigga owned nasa network
Donut :
xdd
Gypsy_Disciple :
Fucking beggars ong
@Milbe: Who wants $10
KenoblessMeplease :
Me I was 1sy
Iduot :
shut up
@Milbe: Who wants $10
devingr128 :
Me ofc
hasbulla :
who wants dick in their ass
@Milbe: Who wants $10
Spiritmonster :
me2
@Milbe: Who wants $10
Vincenz0 :
sure
@hasbulla: who wants dick in their ass
melodicblue :
zolfi
@hasbulla: who wants dick in their ass
Hype85 :
Me sir
hasbulla :
hot
nnacdonalds :
i was 1t who reply
zoIfi :
Wow
Itsmee :
hehe
@Milbe: Who wants $10
Methylamine :
yea
zoIfi :
Not cool man not cool.
tjrr :
Say Factor Owns Me For 10$
KenoblessMeplease :
Me..
rapemeplease :
@Lion
fix chat
rigby :
factor owns
niggert1n :
factor owns me
mwaman :
factor owns me
therealhadex :
factor owns me
bigfatwin :
factor owns me
@tjrr: Say Factor Owns Me For 10$
Bitcoinboss :
Factor owns slaves
@rapemeplease: @Lion fix chat
Lion :
sar
bla2k :
?
Donut :
nice fake
Milbe :
Whoever says “I Love Duel❤” gets a tip
rigby :
i love duel
mwaman :
i love duek
KenoblessMeplease :
Me....
Eitri :
I love duel
Itsmee :
i love duel
Spiritmonster :
i love duel <3
niggert1n :
i love duel <3
rapemeplease :
fuck ur mother
Mamm0n :
I love duel <3
Donut :
I Love Duel❤
Vincenz0 :
I Love Duel❤
therealhadex :
I Love Duel❤
Methylamine :
i love duel
@Milbe: Whoever says “I Love Duel❤” gets a tip
rigby :
I Love Duel❤
KenoblessMeplease :
I love duele
nnacdonalds :
Love Duel❤
Lion :
ok
Bitcoinboss :
I love duel❤
Donut :
im first
Gypsy_Disciple :
Fuck jeets
InesF28 :
“I Love Duel❤
@Milbe: Whoever says “I Love Duel❤” gets a tip
Hans1488 :
I love Duel❤
zoIfi :
I love hegerton ❤
@Milbe: Whoever says “I Love Duel❤” gets a tip
Methylamine :
I Love Duel❤
KenoblessMeplease :
I love duels♥
Bitcoinboss :
I love niggers
@Milbe: Whoever says “I Love Duel❤” gets a tip
Donut :
i said first
macroniste :
I Love Duel❤
Spiritmonster :
thank you
hasbulla :
duel is charity
zoIfi :
fuck
nnacdonalds :
Its fake stop spamming
melodicblue :
I love n_gger
Gypsy_Disciple :
Stopppp
Milbe :
Sent
Warren :
I fucking despise Duel
Warren :
this gamemode sucks dick
Iduot :
lmaooo
Lion :
ok stop here
@Milbe: Sent
Vincenz0 :
gg
Bitcoinboss :
Yo
znajderr :
stop bitches
Bitcoinboss :
Enough
@Warren: this gamemode sucks dick
zoIfi :
Ok warren
Iduot :
FUCK DUEL!!!!
1,667 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