🍪

We use cookies for functional, analytical and personalisation purposes.

Read moreAccept

Dice

Blackjack

Plinko

Crash

Mines

Beef

Keno

Castle Roulette

Video Poker

Groomer's Van

Rock Paper Scissors

Limbo

Live Blackjack

Casino
Sports
High Scores
1,480 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.
Wayoftoast :
is 5 gems on high usually give high rewards?
Wayoftoast :
on ekno
Wayoftoast :
keno
Moby :
‎
Wayoftoast :
cuz i got a x8.10
@Wayoftoast: is 5 gems on high usually give high rewards?
cufafitonmezemer :
no
@Wayoftoast: is 5 gems on high usually give high rewards?
ry8k :
go all in on 10x limbo
Wayoftoast :
limbos not good
@Wayoftoast: is 5 gems on high usually give high rewards?
ChristianWins :
Yea
Moby :
yeee limbop gonna cook u
@Wayoftoast: cuz i got a x8.10
ChristianWins :
thats on 10 numbers tho
Moby :
as f
Dodongcharing :
awts
ChristianWins :
Do 9 or 8 numbers the hits on it are better ig you get more
anal :
okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
anal :
and not get scammed.
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
brunomarsgng :
okay gl bro
brunomarsgng :
whod u send it to?
Mo7amm3d :
Does Duel give loss back? I’ve been on losing strike for 3 weeks now
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
ChristianWins :
Yeah ur cooked gg
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
Degenerat :
u got scammed, no pc for you
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
111larp :
u sent that to my uncle he said he sending u a dildo
johnn :
a
SweetLullaby :
Lmaoooo
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
Moby :
ggs ur getting scammed
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
ry8k :
3-4 months in dagestan man
d4jonathan :
🚨JEET ALERT🚨
ry8k :
ur gonr
Degenerat :
1600$ pc ? it is probably the worst pc ever, u wont even lunch a counter strike game on that
anal :
yes true
@Degenerat: 1600$ pc ? it is probably the worst pc ever, u wont even lunch a counter strike game on that
ChristianWins :
nigga it aint that horrible
ry8k :
naw u lost it all man
ChristianWins :
Calma
d4jonathan :
SAR CLAIM UR RAKEBACK SAR?
Moby :
fahh
StinkyPinky :
niggas
@Mo7amm3d: Does Duel give loss back? I’ve been on losing strike for 3 weeks now
PABLO5K :
Nah
ry8k :
621
jojokas :
yo
d4jonathan :
sybau
d4jonathan :
pajeet
@Mo7amm3d: Does Duel give loss back? I’ve been on losing strike for 3 weeks now
PABLO5K :
U have just the Rakeback
@Mo7amm3d: Does Duel give loss back? I’ve been on losing strike for 3 weeks now
cufafitonmezemer :
ye and massage
letmechin :
Hi
kisomain :
oi
Mo7amm3d :
That’s unfortunate
kisomain :
50 cent in what way
Mod anal muted user vivititsnotamazing for a day. Reason: "Begging"
FatFuck :
hi bye
ry8k :
will see u in 24 hrs mate
@kisomain: 50 cent in what way
ry8k :
the rapper obv
22222222222222222 :
BRO I KEEP MISSING THESE 200K FUCKING PLAYS
22222222222222222 :
duel.com/#bet=1252825318
@22222222222222222: duel.com/#bet=1252825318
kisomain :
faggoty
anal :
lmfao
Mo7amm3d :
Oh my God
FatFuck :
tuff
@22222222222222222: duel.com/#bet=1252825318
Spiritmonster :
oh god
@22222222222222222: duel.com/#bet=1252825318
zoIfi :
Wdymn missing
@22222222222222222: duel.com/#bet=1252825318
Moby :
wtf holy
22222222222222222 :
bottom 3 rows is 200x
Mo7amm3d :
That’s tough
@zoIfi: Wdymn missing
anal :
he cashes out
anal :
before big win
Moby :
tuff shi
zoIfi :
Oh
zoIfi :
Ggs
@22222222222222222: duel.com/#bet=1252825318
letmechin :
Bj king
@22222222222222222: bottom 3 rows is 200x
cufafitonmezemer :
oh sar ooo
@22222222222222222: bottom 3 rows is 200x
Moby :
wait whaat thats 200x?
Gainophobic :
cashout time?
brunomarsgng :
u dont even know him
zoIfi :
Bro said goat what a glazer
brunomarsgng :
its ghislaine u chud
@22222222222222222: duel.com/#bet=1252825318
PABLO5K :
Master cooker
Mod anal muted user mommaROSIEbear3 for 5 hours. Reason: "Glazing"
Mo7amm3d :
Bro imagine 200x
@22222222222222222: duel.com/#bet=1252825318
brunomarsgng :
couldve cleared 1 whole other row
ry8k :
lmao what
anal :
who next sirs
ry8k :
u can get muted for glazing
Eddie12 :
a
zoIfi :
Anal so sexy
@ry8k: u can get muted for glazing
Moby :
yes he can
ry8k :
cool
Moby :
anal
Eddie12 :
Yo
Moby :
glaze my 0.00 ples
@22222222222222222: duel.com/#bet=1252825318
kisomain :
a monkey with some money who wants attention looks like this
Mo7amm3d :
Yo
Nicot1ne :
gm
Tommib :
.
@Nicot1ne: gm
Moby :
NICOOOOOOOOOOOOO
anal :
fuck this nicotine guy
Moby :
MY KING
anal :
he a fag
@kisomain: a monkey with some money who wants attention looks like this
ry8k :
is that how u cope
Moby :
get out anal its nico turn to mod
Moby :
fahh
@ry8k: is that how u cope
kisomain :
?
Mo7amm3d :
Gm nicotine
anal :
ye sure
1,480 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 Blackjack card from a SHA-256 hash (hex string)
// Uses rejection sampling to ensure fair distribution across 52 possible cards
function generateBlackjackCard(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 = generateBlackjackCard(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 Blackjack card from a SHA-256 hash (hex string)
// Uses rejection sampling to ensure fair distribution across 52 possible cards
function generateBlackjackCard(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 = generateBlackjackCard(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
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,480 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.
Wayoftoast :
is 5 gems on high usually give high rewards?
Wayoftoast :
on ekno
Wayoftoast :
keno
Moby :
‎
Wayoftoast :
cuz i got a x8.10
@Wayoftoast: is 5 gems on high usually give high rewards?
cufafitonmezemer :
no
@Wayoftoast: is 5 gems on high usually give high rewards?
ry8k :
go all in on 10x limbo
Wayoftoast :
limbos not good
@Wayoftoast: is 5 gems on high usually give high rewards?
ChristianWins :
Yea
Moby :
yeee limbop gonna cook u
@Wayoftoast: cuz i got a x8.10
ChristianWins :
thats on 10 numbers tho
Moby :
as f
Dodongcharing :
awts
ChristianWins :
Do 9 or 8 numbers the hits on it are better ig you get more
anal :
okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
anal :
and not get scammed.
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
brunomarsgng :
okay gl bro
brunomarsgng :
whod u send it to?
Mo7amm3d :
Does Duel give loss back? I’ve been on losing strike for 3 weeks now
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
ChristianWins :
Yeah ur cooked gg
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
Degenerat :
u got scammed, no pc for you
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
111larp :
u sent that to my uncle he said he sending u a dildo
johnn :
a
SweetLullaby :
Lmaoooo
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
Moby :
ggs ur getting scammed
@anal: okay i just sent the guy $1600 hopefully i get my pc DELIVERED tommorow
ry8k :
3-4 months in dagestan man
d4jonathan :
🚨JEET ALERT🚨
ry8k :
ur gonr
Degenerat :
1600$ pc ? it is probably the worst pc ever, u wont even lunch a counter strike game on that
anal :
yes true
@Degenerat: 1600$ pc ? it is probably the worst pc ever, u wont even lunch a counter strike game on that
ChristianWins :
nigga it aint that horrible
ry8k :
naw u lost it all man
ChristianWins :
Calma
d4jonathan :
SAR CLAIM UR RAKEBACK SAR?
Moby :
fahh
StinkyPinky :
niggas
@Mo7amm3d: Does Duel give loss back? I’ve been on losing strike for 3 weeks now
PABLO5K :
Nah
ry8k :
621
jojokas :
yo
d4jonathan :
sybau
d4jonathan :
pajeet
@Mo7amm3d: Does Duel give loss back? I’ve been on losing strike for 3 weeks now
PABLO5K :
U have just the Rakeback
@Mo7amm3d: Does Duel give loss back? I’ve been on losing strike for 3 weeks now
cufafitonmezemer :
ye and massage
letmechin :
Hi
kisomain :
oi
Mo7amm3d :
That’s unfortunate
kisomain :
50 cent in what way
Mod anal muted user vivititsnotamazing for a day. Reason: "Begging"
FatFuck :
hi bye
ry8k :
will see u in 24 hrs mate
@kisomain: 50 cent in what way
ry8k :
the rapper obv
22222222222222222 :
BRO I KEEP MISSING THESE 200K FUCKING PLAYS
22222222222222222 :
duel.com/#bet=1252825318
@22222222222222222: duel.com/#bet=1252825318
kisomain :
faggoty
anal :
lmfao
Mo7amm3d :
Oh my God
FatFuck :
tuff
@22222222222222222: duel.com/#bet=1252825318
Spiritmonster :
oh god
@22222222222222222: duel.com/#bet=1252825318
zoIfi :
Wdymn missing
@22222222222222222: duel.com/#bet=1252825318
Moby :
wtf holy
22222222222222222 :
bottom 3 rows is 200x
Mo7amm3d :
That’s tough
@zoIfi: Wdymn missing
anal :
he cashes out
anal :
before big win
Moby :
tuff shi
zoIfi :
Oh
zoIfi :
Ggs
@22222222222222222: duel.com/#bet=1252825318
letmechin :
Bj king
@22222222222222222: bottom 3 rows is 200x
cufafitonmezemer :
oh sar ooo
@22222222222222222: bottom 3 rows is 200x
Moby :
wait whaat thats 200x?
Gainophobic :
cashout time?
brunomarsgng :
u dont even know him
zoIfi :
Bro said goat what a glazer
brunomarsgng :
its ghislaine u chud
@22222222222222222: duel.com/#bet=1252825318
PABLO5K :
Master cooker
Mod anal muted user mommaROSIEbear3 for 5 hours. Reason: "Glazing"
Mo7amm3d :
Bro imagine 200x
@22222222222222222: duel.com/#bet=1252825318
brunomarsgng :
couldve cleared 1 whole other row
ry8k :
lmao what
anal :
who next sirs
ry8k :
u can get muted for glazing
Eddie12 :
a
zoIfi :
Anal so sexy
@ry8k: u can get muted for glazing
Moby :
yes he can
ry8k :
cool
Moby :
anal
Eddie12 :
Yo
Moby :
glaze my 0.00 ples
@22222222222222222: duel.com/#bet=1252825318
kisomain :
a monkey with some money who wants attention looks like this
Mo7amm3d :
Yo
Nicot1ne :
gm
Tommib :
.
@Nicot1ne: gm
Moby :
NICOOOOOOOOOOOOO
anal :
fuck this nicotine guy
Moby :
MY KING
anal :
he a fag
@kisomain: a monkey with some money who wants attention looks like this
ry8k :
is that how u cope
Moby :
get out anal its nico turn to mod
Moby :
fahh
@ry8k: is that how u cope
kisomain :
?
Mo7amm3d :
Gm nicotine
anal :
ye sure
1,480 Online

Duel

Casino

Sports

Chat

IconSolana
IconMinesBomb
IconMinesDiamondBlue
IconMinesDiamondGreen
IconMinesExplosion
IconKenoGem

Forgot password?

or continue with

Duel is not available in your current location due to licensing limitations.

or continue with