File tree Expand file tree Collapse file tree 1 file changed +74
-0
lines changed Expand file tree Collapse file tree 1 file changed +74
-0
lines changed Original file line number Diff line number Diff line change
1
+ import random
2
+
3
+
4
+ class Network :
5
+ def __init__ (self ) -> None :
6
+ self .users = []
7
+ self .base = 13
8
+ self .mod = random .getrandbits (4000 )
9
+
10
+ def _rotate_users (self ):
11
+ self .users = self .users [1 :] + [self .users [0 ]]
12
+
13
+ def key_exchange (self ) -> None :
14
+ for _ in range (len (self .users )):
15
+ curr_base = self .base
16
+
17
+ for user in self .users :
18
+ store_key = user is self .users [- 1 ]
19
+
20
+ key = user .sign_key (curr_base , store_key )
21
+ curr_base = key
22
+
23
+ self ._rotate_users ()
24
+
25
+
26
+ class User :
27
+ def __init__ (self , network : Network ) -> None :
28
+ self .network = network
29
+ self .network .users .append (self )
30
+
31
+ self .network_key = None
32
+ self .private_key = random .randint (self .network .mod // 2 , self .network .mod - 1 )
33
+
34
+ def sign_key (self , key : int , store_key : bool ) -> int :
35
+ network_key = pow (key , self .private_key , self .network .mod )
36
+
37
+ if store_key :
38
+ self .network_key = network_key
39
+
40
+ return network_key
41
+
42
+
43
+
44
+
45
+ if __name__ == "__main__" :
46
+ # TEST
47
+ network1 = Network ()
48
+
49
+ user1 = User (network1 )
50
+ user2 = User (network1 )
51
+ user3 = User (network1 )
52
+ user4 = User (network1 )
53
+ user5 = User (network1 )
54
+ user6 = User (network1 )
55
+ user7 = User (network1 )
56
+
57
+ network1 .key_exchange ()
58
+
59
+ check_key = pow (
60
+ network1 .base ,
61
+ user1 .private_key *
62
+ user2 .private_key *
63
+ user3 .private_key *
64
+ user4 .private_key *
65
+ user5 .private_key *
66
+ user6 .private_key *
67
+ user7 .private_key ,
68
+ network1 .mod
69
+ )
70
+
71
+ for user in network1 .users :
72
+ assert user .network_key == check_key
73
+
74
+ print (check_key )
You can’t perform that action at this time.
0 commit comments