Spaces:
Sleeping
Sleeping
File size: 1,336 Bytes
229a3ba |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#@title Colab setup { run: "auto", display-mode: "form" }
#@markdown This downloads some prereqs. It might take a while! You only have to run this cell once.
# !pip install torch==1.13.1 pytorch-transformers==1.1.0 bitarray==1.0.1
import hashlib
import hmac
import numpy as np
class DRBG(object):
def __init__(self, key, seed):
self.key = key
self.val = b'\x01' * 64
self.reseed(seed)
self.byte_index = 0
self.bit_index = 0
def hmac(self, key, val):
return hmac.new(key, val, hashlib.sha512).digest()
def reseed(self, data=b''):
self.key = self.hmac(self.key, self.val + b'\x00' + data)
self.val = self.hmac(self.key, self.val)
if data:
self.key = self.hmac(self.key, self.val + b'\x01' + data)
self.val = self.hmac(self.key, self.val)
def generate_bits(self, n):
xs = np.zeros(n, dtype=bool)
for i in range(0,n):
xs[i] = (self.val[self.byte_index] >> (7 - self.bit_index)) & 1
self.bit_index += 1
if self.bit_index >= 8:
self.bit_index = 0
self.byte_index += 1
if self.byte_index >= 8:
self.byte_index = 0
self.val = self.hmac(self.key, self.val)
self.reseed()
return xs |