-
Notifications
You must be signed in to change notification settings - Fork 1
/
pairing.py
94 lines (64 loc) · 1.85 KB
/
pairing.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
# Naive pairing
from fieldp import FieldP
class G1:
GENERATOR = FieldP(2)
def __init__(self, val=None):
self.value = val if val else G1.GENERATOR
def __add__(self, other):
ret = G1(self.value)
ret.value += other.value
return ret
def __mul__(self, other):
ret = G1(self.value)
ret.value *= other
return ret
def __eq__(self, other):
return type(self) == type(other) and self.value == other.value
def __str__(self):
return "G1({})".format(self.value)
def __repr__(self):
return str(self)
class G2:
GENERATOR = FieldP(3)
def __init__(self, val=None):
self.value = val if val else G2.GENERATOR
def __add__(self, other):
ret = G2(self.value)
ret.value += other.value
return ret
def __mul__(self, other):
ret = G2(self.value)
ret.value *= other
return ret
def __eq__(self, other):
return type(self) == type(other) and self.value == other.value
def __str__(self):
return "G2({})".format(self.value)
def __repr__(self):
return str(self)
class GT:
GENERATOR = FieldP(5)
def __init__(self, val=None):
self.value = val if val else GT.GENERATOR
def __add__(self, other):
ret = GT(self.value)
ret.value += other.value
return ret
def __mul__(self, other):
ret = GT(self.value)
ret.value *= other
return ret
def __eq__(self, other):
return type(self) == type(other) and self.value == other.value
def __str__(self):
return "GT({})".format(self.value)
def __repr__(self):
return str(self)
def e(a, b):
ret = GT()
ret *= a.value * b.value
return ret
if __name__ == '__main__':
g1 = G1() * FieldP(4)
g2 = G2() * FieldP(8)
print(e(g1, g2))