mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-08 22:28:12 -05:00
[research/mpc] upgrade mpc, for ipp compatibility
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
load('share.sage')
|
||||
load('../mpc/share.sage')
|
||||
|
||||
import random
|
||||
class Source(object):
|
||||
@@ -16,4 +16,3 @@ class Source(object):
|
||||
def triplet(self, party_id):
|
||||
triplet = [self.left_a, self.left_b, self.left_c] if party_id==0 else [self.right_a, self.right_b, self.right_c]
|
||||
return [AuthenticatedShare(share) for share in triplet]
|
||||
|
||||
|
||||
@@ -4,11 +4,13 @@ p = 3618502788666131213697322783095070105623107215331596699973092056135872020481
|
||||
alpha = 1
|
||||
# $$y^2 = x^3 + \alpha \dot x + \beta$$ (mod p)
|
||||
beta = 3141592653589793238462643383279502884197169399375105820974944592307816406665
|
||||
K = GF(p)
|
||||
E = EllipticCurve(K, (alpha,beta))
|
||||
F = GF(p)
|
||||
E = EllipticCurve(F, [alpha,beta])
|
||||
ec_order = E.order()
|
||||
# ECDSA scheme generator
|
||||
G = E(874739451078007766457464989774322083649278607533249481151382481072868806602, 152666792071518830868575557812948353041420400780739481342941381225525861407)
|
||||
# ECDSA scheme generator
|
||||
G_generator = E(874739451078007766457464989774322083649278607533249481151382481072868806602, 152666792071518830868575557812948353041420400780739481342941381225525861407)
|
||||
p_scalar = 3618502788666131213697322783095070105526743751716087489154079457884512865583
|
||||
K = GF(p_scalar)
|
||||
|
||||
import random
|
||||
class CurvePoint():
|
||||
@@ -20,11 +22,17 @@ class CurvePoint():
|
||||
self.x = self.point[0]
|
||||
self.y = self.point[1]
|
||||
|
||||
def zero():
|
||||
return G_generator * 0
|
||||
|
||||
def __repr__(self):
|
||||
return "[ x: %s, y: %s, z: 1]"%(self.x, self.y)
|
||||
return bytes("[ x: {}, y: {}, z: 1]".format(self.x, self.y), encoding='utf-8')
|
||||
|
||||
def __str__(self):
|
||||
return self.__repr__()
|
||||
|
||||
def random(max=p):
|
||||
return G * random.randint(0, max)
|
||||
return G_generator * random.randint(0, max)
|
||||
|
||||
def __add__(self, rhs):
|
||||
return self.point + rhs.point
|
||||
@@ -34,10 +42,13 @@ class CurvePoint():
|
||||
|
||||
def __neg__(self):
|
||||
return -1 * self.point
|
||||
|
||||
|
||||
def generator():
|
||||
return G
|
||||
return G_generator
|
||||
|
||||
def __mul__(self, factor):
|
||||
return factor * self.point
|
||||
|
||||
def msm(points, scalars):
|
||||
assert len(points) == len(scalars), 'len(p): {}, len(s): {}'.format(len(points), len(scalars))
|
||||
return sum([s*p for (s, p) in zip(points, scalars)])
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
load('pedersen.sage')
|
||||
|
||||
def open_2pc(party0_share, party1_share):
|
||||
return party0_share + party1_share
|
||||
|
||||
@@ -90,3 +88,6 @@ class MSM(object):
|
||||
for point, scalar in zip(self.points, self.scalars):
|
||||
point_scalars += [ScalingECAuthenticatedShares(point, scalar, beaver.triplet(self.party_id), self.party_id)]
|
||||
return point_scalars
|
||||
|
||||
def sum(self):
|
||||
return sum(self.msm())
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
load('pedersen.sage')
|
||||
load('ec_share.sage')
|
||||
load('../mpc/ec_share.sage')
|
||||
|
||||
def open_2pc(party0_share, party1_share):
|
||||
return party0_share + party1_share
|
||||
@@ -35,7 +34,7 @@ class AuthenticatedShare(object):
|
||||
|
||||
def sub_scalar(self, scalar, party_id):
|
||||
return AuthenticatedShare(self.share - scalar, self.mac, self.public_modifier + scalar) if party_id == 0 else AuthenticatedShare(self.share , self.mac, self.public_modifier + scalar)
|
||||
|
||||
|
||||
def add_scalar(self, scalar, party_id):
|
||||
return AuthenticatedShare(self.share + scalar, self.mac , self.public_modifier - scalar) if party_id ==0 else AuthenticatedShare(self.share, self.mac, self.public_modifier - scalar)
|
||||
|
||||
@@ -69,7 +68,7 @@ class MultiplicationAuthenticatedShares(object):
|
||||
self.party_id = party_id
|
||||
|
||||
def __mul__(self, peer_share):
|
||||
masked_d_share = self.alpha_as - self.a_as
|
||||
masked_d_share = self.alpha_as - self.a_as
|
||||
peer_masked_d_share = peer_share.alpha_as - peer_share.a_as
|
||||
d = open_2pc(masked_d_share.share, peer_masked_d_share.share)
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
load('beaver.sage')
|
||||
from random import randint
|
||||
|
||||
p = 10
|
||||
|
||||
party0_val = 3
|
||||
@@ -6,12 +8,12 @@ party1_val = 22
|
||||
public_scalar = 2
|
||||
|
||||
# additive share distribution, and communication of private values
|
||||
party0_random = random.randint(0,p)
|
||||
party0_random = randint(0,p)
|
||||
alpha1 = AuthenticatedShare(party0_random)
|
||||
alpha2 = AuthenticatedShare(party0_val - party0_random)
|
||||
assert (alpha1.authenticated_open(alpha2) == party0_val)
|
||||
|
||||
party1_random = random.randint(0,p)
|
||||
party1_random = randint(0,p)
|
||||
beta1 = AuthenticatedShare(party1_random)
|
||||
beta2 = AuthenticatedShare(party1_val - party1_random)
|
||||
assert (beta1.authenticated_open(beta2) == party1_val)
|
||||
|
||||
12
script/research/mpc/test_curve.sage
Normal file
12
script/research/mpc/test_curve.sage
Normal file
@@ -0,0 +1,12 @@
|
||||
load('curve.sage')
|
||||
import random
|
||||
|
||||
pt = CurvePoint.random()
|
||||
rnd = random.randint(0, p)
|
||||
s_ff = K(rnd)
|
||||
s = int(s_ff)
|
||||
assert s == rnd
|
||||
s_inv_ff = 1/s_ff
|
||||
s_inv = int(s_inv_ff)
|
||||
assert K(s*s_inv) == K(1)
|
||||
assert (pt * int(K(s * s_inv))) == pt
|
||||
Reference in New Issue
Block a user