-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbb_interface.py
158 lines (120 loc) · 4.33 KB
/
bb_interface.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
"""
Contains request and response objects for Bulletin Board (BB)
"""
class ReqCastVote:
"""
request to cast vote
"""
def __init__(self, enc_vote, signed_enc_vote):
self.enc_vote = enc_vote
self.signed_enc_vote = signed_enc_vote
def __repr__(self):
return "<ReqCastVote: enc_vote: {}, signed_enc_vote: {}>".format(self.enc_vote, self.signed_enc_vote)
@classmethod
def from_dictionary(cls, params):
enc_vote = int(params['enc_vote'], base=16)
signed_enc_vote = int(params['signed_enc_vote'], base=16)
return cls(enc_vote, signed_enc_vote)
def to_dictionary(self):
return {'enc_vote': hex(self.enc_vote),
'signed_enc_vote': hex(self.signed_enc_vote)}
class RespZKPProvideCommitment:
"""
response, requesting voter to provide ZKP commitment
"""
def __repr__(self):
return "<RespZKPProvideCommitment: Verifier requests the Prover to provide ZKP commitment.>"
@classmethod
def from_dictionary(cls, params):
return cls()
def to_dictionary(self):
return {}
class ReqZKPChallenge:
"""
request, requesting BB to provide ZKP challenge.
this request contains the ZKP commitment
"""
def __init__(self, a_params):
self.a_params = a_params
def __repr__(self):
return "<ReqZKPChallenge: a_params: {}>".format(self.a_params)
@classmethod
def from_dictionary(cls, params):
a_params_string = params['a_params']
a_params = [int(a_params_string[i], base=16) for i in range(len(a_params_string))]
return cls(a_params)
def to_dictionary(self):
a_params_strings = [hex(self.a_params[i]) for i in range(len(self.a_params))]
return {'a_params': a_params_strings}
class RespZKPChallenge:
"""
response, contains ZKP challenge
"""
def __init__(self, e_s):
self.e_s = e_s
def __repr__(self):
return "<RespZKPChallenge: e_s: {}>".format(self.e_s)
@classmethod
def from_dictionary(cls, params):
e_s = int(params['e_s'], base=16)
return cls(e_s)
def to_dictionary(self):
return {'e_s': hex(self.e_s)}
class ReqZKPVerify:
"""
request containing ZKP that BB can verify
"""
def __init__(self, e_params, z_params):
self.e_params = e_params
self.z_params = z_params
def __repr__(self):
return "<ReqZKPVerify: e_params: {}, z_params: {}>".format(self.e_params, self.z_params)
@classmethod
def from_dictionary(cls, params):
e_params_string = params['e_params']
z_params_string = params['z_params']
e_params = [int(e_params_string[i], base=16) for i in range(len(e_params_string))]
z_params = [int(z_params_string[i], base=16) for i in range(len(z_params_string))]
return cls(e_params, z_params)
def to_dictionary(self):
e_params_strings = [hex(self.e_params[i]) for i in range(len(self.e_params))]
z_params_strings = [hex(self.z_params[i]) for i in range(len(self.z_params))]
return {'e_params': e_params_strings,
'z_params': z_params_strings}
class RespCastVoteSuccess:
"""
response indicating vote has been cast
"""
def __init__(self, is_voting_complete = False):
self.is_voting_complete = is_voting_complete
def __repr__(self):
return "<RespCastVoteSuccess: Vote has been casted successfully>"
@classmethod
def from_dictionary(cls, params):
is_voting_complete = params['is_voting_complete']
return cls(is_voting_complete)
def to_dictionary(self):
return {'is_voting_complete': self.is_voting_complete}
class RespVotingClosed:
"""
response indicating voting session is closed
"""
def __repr__(self):
return "<RespVotingClosed: Voting process is now complete.>"
@classmethod
def from_dictionary(cls, params):
return cls()
def to_dictionary(self):
return {}
class ReqCloseVoting:
"""
request to closing voting session. It immediately closes voting session (if open) and
sends the encrypted results to EM for decryption
"""
def __repr__(self):
return "<ReqCloseVoting: Request to close the voting process.>"
@classmethod
def from_dictionary(cls, params):
return cls()
def to_dictionary(self):
return {}