# HG changeset patch # User Janus Dam Nielsen <janus.niel...@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 _______________________________________________ viff-devel mailing list (http://viff.dk/) viff-devel@viff.dk http://lists.viff.dk/listinfo.cgi/viff-devel-viff.dk