# HG changeset patch
# User Janus Dam Nielsen <janus.niel...@alexandra.dk>
# Date 1245395107 -7200
# Node ID 57f6d76d82e375b77293bcc6d54eeb6242686079
# Parent  4c46e8eeb719682da1a91b7ad96e7e902363e204
importeret rettelse triple_test.patch

diff --git a/viff/orlandi.py b/viff/orlandi.py
--- a/viff/orlandi.py
+++ b/viff/orlandi.py
@@ -932,7 +932,39 @@
         self.schedule_callback(result, step2ab, ai, (r1, r2))
         result.addErrback(self.error_handler)
         return result
-                
+    
+    def triple_test(self, field):
+        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):
+            if v is 0:
+                return None
+            return (a, b, c)
+        
+        def compute_value(((a, b, c), (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))
+            return r
+
+        result = gatherResults([triple1, triple2, r])
+        result.addCallbacks(compute_value, 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
@@ -494,4 +494,21 @@
         d = gatherResults([t1, t2])
         d.addCallbacks(open, runtime.error_handler)
         return d
-        
+    
+    @protocol
+    def test_tripleTest(self, runtime):
+        """Test the triple_test command."""
+
+        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-devel mailing list (http://viff.dk/)
viff-devel@viff.dk
http://lists.viff.dk/listinfo.cgi/viff-devel-viff.dk

Reply via email to