# HG changeset patch # User Janus Dam Nielsen <janus.niel...@alexandra.dk> # 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 viff-patches@viff.dk http://lists.viff.dk/listinfo.cgi/viff-patches-viff.dk