[viff-devel] [PATCH 01 of 12] importeret rettelse orlandi_implementation.patch
Janus Dam Nielsen
janus.nielsen at alexandra.dk
Fri Jun 19 02:32:13 PDT 2009
# HG changeset patch
# User Janus Dam Nielsen <janus.nielsen at alexandra.dk>
# Date 1245394848 -7200
# Node ID 15c0283f7cb6dad3d7a41e9095bb4fd18a30d909
# Parent 8ec45943c12ab91430d03a8895aabc6f64fe7a37
importeret rettelse orlandi_implementation.patch
diff --git a/viff/orlandi.py b/viff/orlandi.py
new file mode 100644
--- /dev/null
+++ b/viff/orlandi.py
@@ -0,0 +1,69 @@
+# Copyright 2008 VIFF Development Team.
+#
+# This file is part of VIFF, the Virtual Ideal Functionality Framework.
+#
+# VIFF is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License (LGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# VIFF is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
+# Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with VIFF. If not, see <http://www.gnu.org/licenses/>.
+
+from viff.runtime import Runtime, increment_pc, Share, ShareList, gather_shares
+from viff.util import rand, dprint
+
+class OrlandiException(Exception):
+ pass
+
+class OrlandiShare(Share):
+ """A share in the Orlandi runtime.
+
+ A share in the Orlandi runtime is a 3-tuple (x_{i}, rho_{i}, Cr_{i}) of:
+ - A share of a number, x_{i}
+ - A tuple of two random numbers, rho_{i} = (rho_{i}_{1}, rho_{i}_{2})
+ - A commitment to the number and the random numbers, Cr_{i}
+
+ The :class:`Runtime` operates on shares, represented by this class.
+ Shares are asynchronous in the sense that they promise to attain a
+ value at some point in the future.
+
+ Shares overload the arithmetic operations so that ``x = a + b``
+ will create a new share *x*, which will eventually contain the
+ sum of *a* and *b*. Each share is associated with a
+ :class:`Runtime` and the arithmetic operations simply call back to
+ that runtime.
+ """
+
+ def __init__(self, runtime, field, value=None, rho=None, commitment=None):
+ Share.__init__(self, runtime, field, (value, rho, commitment))
+
+
+class OrlandiRuntime(Runtime):
+ """The Orlandi runtime.
+
+ The runtime is used for sharing values (:meth:`secret_share` or
+ :meth:`shift`) into :class:`OrlandiShare` object and opening such
+ shares (:meth:`open`) again. Calculations on shares is normally
+ done through overloaded arithmetic operations, but it is also
+ possible to call :meth:`add`, :meth:`mul`, etc. directly if one
+ prefers.
+
+ Each player in the protocol uses a :class:`Runtime` object. To
+ create an instance and connect it correctly with the other
+ players, please use the :func:`create_runtime` function instead of
+ instantiating a Runtime directly. The :func:`create_runtime`
+ function will take care of setting up network connections and
+ return a :class:`Deferred` which triggers with the
+ :class:`Runtime` object when it is ready.
+ """
+
+ def __init__(self, player, threshold=None, options=None):
+ """Initialize runtime."""
+ Runtime.__init__(self, player, threshold, options)
+ self.threshold = self.num_players - 1
diff --git a/viff/test/test_orlandi_runtime.py b/viff/test/test_orlandi_runtime.py
new file mode 100644
--- /dev/null
+++ b/viff/test/test_orlandi_runtime.py
@@ -0,0 +1,33 @@
+# Copyright 2008 VIFF Development Team.
+#
+# This file is part of VIFF, the Virtual Ideal Functionality Framework.
+#
+# VIFF is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License (LGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# VIFF is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
+# Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with VIFF. If not, see <http://www.gnu.org/licenses/>.
+
+from twisted.internet.defer import gatherResults
+
+from viff.test.util import RuntimeTestCase, protocol, BinaryOperatorTestCase
+from viff.runtime import Share
+from viff.orlandi import OrlandiRuntime
+
+from viff.field import FieldElement
+from viff.passive import PassiveRuntime
+
+class OrlandiBasicCommandsTest(RuntimeTestCase):
+ """Test for basic commands."""
+
+ # Number of players.
+ num_players = 3
+
+ runtime_class = OrlandiRuntime
More information about the viff-devel
mailing list