forked from VSpike/BBS
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathblum.py
56 lines (43 loc) · 1.28 KB
/
blum.py
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
44
45
46
47
48
49
50
51
52
53
54
55
56
import sys
import random
import primes
class BlumBlumShub(object):
def getPrime(self, bits):
while True:
p = primes.bigppr(bits)
if p & 3 == 3:
return p
def generateN(self, bits):
p = self.getPrime(bits/2)
while 1:
q = self.getPrime(bits/2)
if p != q:
return p * q
def __init__(self, bits):
self.n = self.generateN(bits)
print "n = " + repr(self.n)
length = self.bitLen(self.n)
seed = random.getrandbits(length)
self.setSeed(seed)
def setSeed(self, seed):
self.state = seed % self.n
def bitLen(self, x):
assert x > 0
q = 0
while x:
q += 1
x >>= 1
return q
def next(self, numBits):
result = 0
for i in xrange(numBits):
self.state = (self.state**2) % self.n
result = (result << 1) | (self.state&1)
return result
if __name__ == "__main__":
number_blum = int(raw_input('Blum number: '))
number_bit = int(raw_input('Numbers of bits: '))
number_amount = int(raw_input('Numbers to generate: '))
bbs = BlumBlumShub(number_blum)
for i in xrange (number_amount):
print(bin(bbs.next(number_bit)))