Created
November 22, 2023 17:50
-
-
Save strawstack/76ee40209e8bab2a3b3d3571328a98cf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js" integrity="sha512-a+SUDuwNzXDvz4XrIcXHuCf089/iJAoN4lmrXJg18XnduKK6YlDHNRalv4yd1N40OKI80tFidF+rqTFKGPoWFQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> | |
</head> | |
<body> | |
<script> | |
function rollDice() { | |
return (Math.floor(Math.random() * 6) + 1).toString(); | |
} | |
function getSecret() { | |
const lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; | |
const secret = []; | |
for (let i = 0; i < 30; i++) { | |
secret.push( | |
lookup[Math.floor(Math.random() * lookup.length)] | |
); | |
} | |
return secret.join(""); | |
} | |
function encrypt(number, secret) { | |
return CryptoJS.AES.encrypt(number, secret); | |
} | |
function decrypt(message, secret) { | |
return CryptoJS.AES.decrypt(message, secret); | |
} | |
// Only dm can access dm values | |
const dm = {}; | |
// DM Calculate offset value | |
dm.offset = rollDice(); | |
// DM generate secret | |
dm.secret = getSecret(); | |
// DM encrypt offset value | |
dm.encrypted_offset = encrypt(dm.offset, dm.secret); | |
// Only player can access player values | |
const player = {}; | |
// Player stores copy of dm encyptyed offset | |
player.encrypted_dm_offset = dm.encrypted_offset; | |
// Player rolls dice | |
player.offset = rollDice(); | |
// DM stores copy of player roll | |
dm.player_offset = player.offset; | |
// | |
// Once player receives secret, both parties decrypt and compare answer | |
// | |
// Player stores dm secret | |
player.secret = dm.secret; | |
// Player calculated roll | |
const offset = decrypt(player.encrypted_dm_offset, player.secret); | |
player.roll = ((offset + player.offset) % 6) + 1; | |
// DM calculated roll | |
dm.roll = ((dm.offset + dm.player_offset) % 6) + 1; | |
console.log( | |
`dm: ${dm.roll}\nplayer: ${player.roll}` | |
); | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment