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.
81 lines
1.7 KiB
81 lines
1.7 KiB
8 years ago
|
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_if.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_isSame(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
|