aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/byzantine-lab/mcl/ffi/python/pairing.py
blob: 88b72917669b28e679d91275a607827f57f38420 (plain) (blame)
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
from ctypes import *
from ctypes.wintypes import LPWSTR, LPCSTR, LPVOID

g_lib = None

def BN256_init():
    global g_lib
    g_lib = cdll.LoadLibrary("../../bin/bn256.dll")
    ret = g_lib.BN256_init()
    if ret:
        print "ERR BN256_init"

class Fr(Structure):
    _fields_ = [("v", c_ulonglong * 4)]
    def setInt(self, v):
        g_lib.BN256_Fr_setInt(self.v, v)
    def setStr(self, s):
        ret = g_lib.BN256_Fr_setStr(self.v, c_char_p(s))
        if ret:
            print("ERR Fr:setStr")
    def __str__(self):
        svLen = 1024
        sv = create_string_buffer('\0' * svLen)
        ret = g_lib.BN256_Fr_getStr(sv, svLen, self.v)
        if ret:
            print("ERR Fr:getStr")
        return sv.value
    def isZero(self, rhs):
        return g_lib.BN256_Fr_isZero(self.v) != 0
    def isOne(self, rhs):
        return g_lib.BN256_Fr_isOne(self.v) != 0
    def __eq__(self, rhs):
        return g_lib.BN256_Fr_isEqual(self.v, rhs.v) != 0
    def __ne__(self, rhs):
        return not(P == Q)
    def __add__(self, rhs):
        ret = Fr()
        g_lib.BN256_Fr_add(ret.v, self.v, rhs.v)
        return ret
    def __sub__(self, rhs):
        ret = Fr()
        g_lib.BN256_Fr_sub(ret.v, self.v, rhs.v)
        return ret
    def __mul__(self, rhs):
        ret = Fr()
        g_lib.BN256_Fr_mul(ret.v, self.v, rhs.v)
        return ret
    def __div__(self, rhs):
        ret = Fr()
        g_lib.BN256_Fr_div(ret.v, self.v, rhs.v)
        return ret
    def __neg__(self):
        ret = Fr()
        g_lib.BN256_Fr_neg(ret.v, self.v)
        return ret

def Fr_add(z, x, y):
    g_lib.BN256_Fr_add(z.v, x.v, y.v)

def Fr_sub(z, x, y):
    g_lib.BN256_Fr_sub(z.v, x.v, y.v)

def Fr_mul(z, x, y):
    g_lib.BN256_Fr_mul(z.v, x.v, y.v)

def Fr_div(z, x, y):
    g_lib.BN256_Fr_div(z.v, x.v, y.v)

BN256_init()

P = Fr()
Q = Fr()
print P == Q
print P != Q
P.setInt(5)
Q.setStr("34982034824")
print Q
R = Fr()
Fr_add(R, P, Q)
print R