Skip to content

Instantly share code, notes, and snippets.

@antonpaquin
Created January 22, 2023 08:49
Show Gist options
  • Save antonpaquin/1fe712b62d8dbc87563a6703726d5b00 to your computer and use it in GitHub Desktop.
Save antonpaquin/1fe712b62d8dbc87563a6703726d5b00 to your computer and use it in GitHub Desktop.
import argparse
import hashlib
def cli_args():
parser = argparse.ArgumentParser()
parser.add_argument('randomness')
parser.add_argument('salt')
parser.add_argument('min')
parser.add_argument('max')
return parser.parse_args()
def fairly_random(randomness, salt, min_num, max_num):
num_retries = 0
delta = max_num - min_num + 1
evenly_divisible = ((2**64)//delta)*delta
m = hashlib.sha256()
m.update(randomness.encode('ascii'))
m.update(('-'+salt).encode('ascii'))
while True:
m_int = int.from_bytes(m.digest()[:8], byteorder='big')
if m_int < evenly_divisible:
return (m_int % delta) + min_num
m.update('-RETRY'.encode('ascii'))
num_retries += 1
if __name__ == '__main__':
_args = cli_args()
print(fairly_random(_args.randomness, _args.salt, int(_args.min), int(_args.max)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment