You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.7 KiB
80 lines
1.7 KiB
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
|
|
|