Advertisement
Guest User

Untitled

a guest
Oct 17th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. import math
  2. import random
  3. from ex1 import WeakRNG
  4.  
  5. def byte2bin(bval):
  6. return bin(bval)[2:].zfill(8)
  7.  
  8. def monobit(bin_data):
  9. count = 0
  10. # If the char is 0 minus 1, else add 1
  11. for char in bin_data:
  12. if char == '0':
  13. count -= 1
  14. else:
  15. count += 1
  16. # Calculate the p value
  17. sobs = count / math.sqrt(len(bin_data))
  18. p_val = math.erfc(math.fabs(sobs) / math.sqrt(2))
  19. return p_val
  20.  
  21. def get_random_string(n): #generate random bit string
  22. bstr = bin(random.getrandbits(n)).lstrip('0b').zfill(n)
  23. return bstr
  24.  
  25. numbits = 128
  26.  
  27. wr = WeakRNG()
  28. wr.init_state()
  29.  
  30. gbytes = [666]
  31. for i in range(numbits/8 - 1):
  32. gbytes.append(wr.get_prg_byte())
  33.  
  34. byteString = ''
  35. for i in gbytes:
  36. byteString += byte2bin(i)
  37.  
  38. newByteString = ''
  39. for gbit in byteString:
  40. if gbit == '0':
  41. newByteString += str(random.randint(0, 1))
  42. else:
  43. newByteString += '1'
  44.  
  45. mb_val = monobit(newByteString)
  46.  
  47. print newByteString
  48. print mb_val
  49. if mb_val >= 0.01:
  50. print 'ok'
  51. else:
  52. print 'not ok'
  53.  
  54. print "-------------------------"
  55.  
  56. newByteString = get_random_string(numbits)
  57. print newByteString
  58. mb_val = monobit(newByteString)
  59.  
  60. print mb_val
  61. if mb_val >= 0.01:
  62. print 'ok'
  63. else:
  64. print 'not ok'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement