aboutsummaryrefslogblamecommitdiffstats
path: root/vendor/github.com/byzantine-lab/mcl/ffi/python/pairing.py
blob: 88b72917669b28e679d91275a607827f57f38420 (plain) (tree)















































































                                                                 
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