-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbbs.py
More file actions
executable file
·58 lines (51 loc) · 5.73 KB
/
Copy pathbbs.py
File metadata and controls
executable file
·58 lines (51 loc) · 5.73 KB
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
57
58
#!/usr/bin/python3
from random import Random
from math import pow
__all__ = ["BBS", "BBS4096", "BBS1024", "BBS512", "BBS256"]
class _Random(Random):
"""Random is only for a base class."""
def __init__(self, p, q, x):
self.__p = p
self.__q = q
self.__x = x
self.__n = self.__p * self.__q
def random(self):
return self.getrandbits(64) / ((1 << 64) - 1)
def seed(self, s):
self.__x = int(s)
def getstate(self):
return self.__x
def setstate(self, state):
self.__x = int(state)
def getrandbits(self, k):
ret = 0
for i in range(k):
self.__x = (self.__x ** 2) % self.__n
ret <<= 1
ret |= self.__x & 0x01
return ret
class BBS4096(_Random):
def __init__(self):
self.__p = 0x43d7937abba8a9d52c913769643fda2d077b7011308f0070e258856ba655852ea6b4fd718739303f49c45af54a2c3e1ff31d5870c1cb33adf4b99a0959c2617a8b130ea12e41de9c778583ad1701592c4c9b8093acec19322af3254006ea29d73db09d9e8e669bf31b49cbe9781dfe96e7a52067cdf2df96433438d73bb90b11f997c318986ce8d9a5a1895e32070932ffd88952d2ec605ecc602d2f58cbe4d117b2cc5a11a28ce55c062fb3b4a6b73197dd6e2ccd05327881c3a15a9477ad5711d8a593e1c3ca0002e5239e357fb88a848d61af3621eb422ae51955b2408c6e797f46c01950316e26254a214ab6c8ad3ca3e14c1fe2267cdd5b88ea966041ba98830aea6ddd2305cb4f7235327c6e889ea13730a37f7bb2ad613822117e0400a6b739ae256cda2e79d9988d46d13803725dbad9f54b448bbc568cd5072dc630195a388f092a0dc70f3a070eb229939d85321c3123b70a51bfa42ca939a32523181e96161eb5329f254b3b2f836d0441fb12d82ebfd0a3ef590e717c53c658bdebb021fc4e3db4656cf0a62d24083a1e296eb9b3878a7de2c34e062e9bf1fa50d3dd17be31972866bb5ce2dc7040965733f136a411648378f925a9241e1c623da0dc33e1fe1cc39ac3cdbc34c0c4fcc4809a23968e13695a38a60811de0f0d057d79d76367fe79b646db74c120e1db61bb888ebded0f1b820e41868921b50b13
self.__q = 0xc5e2eef58ae05577b5b46f697c6a1c3f81a130f6f7207210ce920c054d6e28348a833b5fb6732f2de2c719b237dfd934e7b45181113e3a97a5c6d1dd847659ddd1fa1db30411e5151d658ee892a88a9b364c668f928fd81ab507b2a2343a9040e7f8fd0c9a990ddad90bbf3abc661863a4fb48341c2b61be8c0581164c8cb633674299025ef6fe051259839f4ff373759b671b2d8c0079443949d4c2869c848d391d8b672b0e7c2da0a866b40c2ec586e20fde8ae646ae577b8d3f53b060bc985f09786ecda95e2d929c2f575b618ba46fb1d02b73f660e4ab97aa4bf21e3911baeb244406bd8743ce96d0152ecb8367294bc1d428a7b1582ff596cd03236dbe9d329dd60b9a6ba0f3ae85807f345cb11b0c4001eff9cc92d04dbf5d1a5df6968f7abd1f5611ce865b7c69c44eb0b6b5e16a44a82124f59ef6154c69e227054f0b805dee79c511e976ee47a40c284af99c5fe3d9c2318b17b150c8ebf8628ca2be3ffbab946740a833fba50eeca1a24a93bc42e9b6d3d9721d69b1da299fe3dd73e087263c787726e6ac62a40863e6e6dc73a4657a850e531bcea826535d652c436752c3be0f4c706c3111e6a1837abf4b88f91955e6835bab6f4eebf02176d3000c24841583b602d799246aa77fc0b3943255256d7c06770e856368f625af68a404bff04939fd1eec568267d3ec4ebd63e790677259f4b5422f62750f74667b
self.__x = 0x31077fe331fc3fdebda627ccbde4e4bc5a3a8c3cc5804bc47f01eec1e2ebc7fe94184e65e57d759d847f416cac72c35cb3b74a6a3ffac59a7dced4b2979f8aa7de6933469efb40dab2b92a116554bdf1e4127c8d2f4ee7803939484bc0adfb2d942d286b8794691eedf0af9904e4ea3ee8133e4cd356eb8c9099db795e8e4389ec5e7c72573a69bd25a79071777dec3e83253d7927252e732d8498919b6337d7b923510418f105ce01d6488b5b5ce7c843638455cc8572fb0f3f2b3783fa91d8e2ed6448e12c9dd965b10a791f3c63dc46bef858a7cabc8360a035e46ff126cc6edcdf54e0503591a1c34b27769d9d28965a521b857c98746e67a0353e4e4ebfc5b4bd1d501f38de9c8e24926042c5fcb5e25eb062652ec0276669eb369bd18a36dfb9c0991577578018b2e12ecf6051c43e6380a281e5f49e9daf69509351fa5cdfd6842fae3482fbced7ac86ab5350584332e5c0c471a2ceba2d09e9b237480a6346eb8b7cd7c17b0ae83fc416799039c2a0413c72c1da7aeac537e6ef4cf5d4990e96fee42dc088ac4bbb4e219ecb8bfb1576ff08823f29eda06805247ddf9e36c9dafbcdea2d780d45a02bd0ccb729f5cc92a016f3f0422beecd8f2f605ba0d5118416b34d1c59a709c9f840744ec66839255be8c66330124d1e310f244fa5fbe5b68f4f092af919b7bc78ef8f0b62731bb2dae7da45215464774144355f
super().__init__(self.__p, self.__q, self.__x)
class BBS1024(_Random):
def __init__(self):
self.__p = 0x9ddada3b10f88043e3168cd33daf7f2961172c87a2a75306241f2e3bda38923dc9767bff96d8b6033afc199551f8293d0da4ffc06087a8f9aca1b13237abb43ebb992cb26c7de388edfd268dae01bdd20e76c4c14d52ea0b0cfe3c1f9e40bbb1d00da18448bd8ea72513337230e435790229b7f6cd1b06434711b2fb18321863
self.__q = 0x4be7ceb39f86a5617285735d58efb8f9a3749edba80ea39843a40ffad33708b5eff8d207af202b3a634c517beca0b369c871814e94811b3bada40ca573f6d6b22f24f338899744fd733ea13b656577f869789193cd7e729c94facac67a4169d15523632f95f1e50ad82dd9273a8d4e76048d7c71c1b62919f986f997a3a230b
self.__x = 0x73cd8a7bbb0bd4cfcecff60b0047243c6b7d7ad96f517b2e3122a52ad37c722d78c90c0c7359aada0dad2554baf57290ffa83eaf3242a5dcd29d5ba8895db9cd57f958c6a49450d5b35d4a769d829f1674dce414d0cb12a330b924cb051f385916e2b4e68fcbe3da5b258909452ccf6c24c7b0bcef84bdc74ba8f3fcab1b62ff
super().__init__(self.__p, self.__q, self.__x)
class BBS512(_Random):
def __init__(self):
self.__p = 0x80e03759b9d5a2916b90a189b734df2c717867f803faf0f7b5857c2a41a2bc3990865d53142c083fa3705b1fd4e2c593c72ad1f14b6526dabdadacc46fd637c7
self.__q = 0xc7f6cbf04dd9ec8ca7525b61a7f90347bdcf68a32f8a9c65fed7b9de776291dc952a044d0b8e1470f802eb80bc1b3607c3abe6efc5c574e0b62d40268b4a1fab
self.__x = 0x9f765f55c8a6d8f931ffa041db8261fe418d111072215e34f6550578260c795b12563b00cf0f876cda96847f25a6a86d59acac6f2c569b146277caf82dbde1c3
super().__init__(self.__p, self.__q, self.__x)
class BBS256(_Random):
def __init__(self):
self.__p = 0xb497b1d55f7a19bc43e0c977f079987a7711e8108d5e80b30690d67af2d9b7c3
self.__q = 0x23d3662499457c7f62894bd44c55a81629b1c73c32f1b8ced65c42fa2bbe4af
self.__x = 0xf0f686fa31dba080761d6928c85350f47db2d91550ede2648d78e171b31b73c7
super().__init__(self.__p, self.__q, self.__x)
BBS = BBS1024