Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import random
- from ex1 import WeakRNG
- def byte2bin(bval):
- return bin(bval)[2:].zfill(8)
- def monobit(bin_data):
- count = 0
- # If the char is 0 minus 1, else add 1
- for char in bin_data:
- if char == '0':
- count -= 1
- else:
- count += 1
- # Calculate the p value
- sobs = count / math.sqrt(len(bin_data))
- p_val = math.erfc(math.fabs(sobs) / math.sqrt(2))
- return p_val
- def get_random_string(n): #generate random bit string
- bstr = bin(random.getrandbits(n)).lstrip('0b').zfill(n)
- return bstr
- numbits = 128
- wr = WeakRNG()
- wr.init_state()
- gbytes = [666]
- for i in range(numbits/8 - 1):
- gbytes.append(wr.get_prg_byte())
- byteString = ''
- for i in gbytes:
- byteString += byte2bin(i)
- newByteString = ''
- for gbit in byteString:
- if gbit == '0':
- newByteString += str(random.randint(0, 1))
- else:
- newByteString += '1'
- mb_val = monobit(newByteString)
- print newByteString
- print mb_val
- if mb_val >= 0.01:
- print 'ok'
- else:
- print 'not ok'
- print "-------------------------"
- newByteString = get_random_string(numbits)
- print newByteString
- mb_val = monobit(newByteString)
- print mb_val
- if mb_val >= 0.01:
- print 'ok'
- else:
- print 'not ok'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement