# HG changeset patch
# User Janus Dam Nielsen <[email protected]>
# Date 1254816324 -7200
# Node ID 04d228359cee302716040a5eebee38c46980a1b3
# Parent db2d970885f44d2cf18608c81f8422e87d97af8c
importeret rettelse triple_test.patch
diff --git a/viff/orlandi.py b/viff/orlandi.py
--- a/viff/orlandi.py
+++ b/viff/orlandi.py
@@ -964,7 +964,46 @@
self.schedule_callback(result, step2ab, ai, (r1, r2), alpha_randomness)
result.addErrback(self.error_handler)
return result
-
+
+ def triple_test(self, field):
+ """Generate a triple ``(a, b, c)`` where ``c = a * b``.
+
+ The triple ``(a, b, c)`` is checked against the
+ triple ``(x, y, z)`` and a random value ``r``.
+
+ """
+ triple1 = self.triple_gen(field)
+ triple2 = self.triple_gen(field)
+ r = self.open(self.random_share(field))
+
+ def check((v, oa, ob, oc, ox, oy, oz), a, b, c, ec):
+ if v is 0:
+ return None
+ return (a, b, c, ec)
+
+ def compute_value(((a, b, c, ec), (x, y, z, _), r)):
+ oa = self.open(a)
+ ob = self.open(b)
+ oc = self.open(c)
+ ox = self.open(x)
+ oy = self.open(y)
+ oz = self.open(z)
+ l = self._cmul(r, x, field)
+ m = self._cmul(r, y, field)
+ n = self._cmul(r*r, z, field)
+ d = c - self._basic_multiplication(a, b, l, m, n)
+ r = gather_shares([d, oa, ob, oc, ox, oy, oz])
+ r.addCallbacks(check, self.error_handler, callbackArgs=(a, b, c,
ec))
+ return r
+
+ result = gatherResults([triple1, triple2, r])
+ self.schedule_callback(result, compute_value)
+ result.addErrback(self.error_handler)
+
+ # do actual communication
+ self.activate_reactor()
+
+ return result
def error_handler(self, ex):
print "Error: ", ex
diff --git a/viff/test/test_orlandi_runtime.py
b/viff/test/test_orlandi_runtime.py
--- a/viff/test/test_orlandi_runtime.py
+++ b/viff/test/test_orlandi_runtime.py
@@ -624,3 +624,24 @@
d = gatherResults([t1, t2])
d.addCallbacks(open, runtime.error_handler)
return d
+
+
+ @protocol
+ def test_tripleTest(self, runtime):
+ """Test the triple_test command."""
+
+ self.Zp =
GF(6277101735386680763835789423176059013767194773182842284081)
+
+ def check((a, b, c)):
+ self.assertEquals(c, a * b)
+
+ def open((a, b, c, _)):
+ d1 = runtime.open(a)
+ d2 = runtime.open(b)
+ d3 = runtime.open(c)
+ d = gatherResults([d1, d2, d3])
+ d.addCallback(check)
+ return d
+ d = runtime.triple_test(self.Zp)
+ d.addCallbacks(open, runtime.error_handler)
+ return d
_______________________________________________
viff-patches mailing list
[email protected]
http://lists.viff.dk/listinfo.cgi/viff-patches-viff.dk