Hello, I am trying to modify the equality protocol to make it work for primes congruent to 5 mod 8 (exists for Blum primes). The problem is that I have an error with the original protocol. It works perfectly with p = 211 for example. But for p = 367, it doesn't. Here is the code I'm using to test it :
from optparse import OptionParser import viff.reactor viff.reactor.install() from twisted.internet import reactor from viff.field import GF from viff.runtime import create_runtime, gather_shares from viff.passive import PassiveRuntime from viff.equality_ohta import ProbabilisticEqualityMixin2 from viff.equality import ProbabilisticEqualityMixin from viff.comparison import Toft05Runtime from viff.config import load_config from viff.util import rand, find_prime class EqualityRuntime(PassiveRuntime, ProbabilisticEqualityMixin): """Default mix of :class:`~viff.equality.ProbabilisticEqualityMixin` and :class:`~viff.passive.PassiveRuntime`. """ pass class Protocol: def __init__(self, runtime): # Save the Runtime for later use self.runtime = runtime k = runtime.options.security_parameter print "security parameter = ", k Zp = GF(367) # We must secret share our input with the other parties. They # will do the same and we end up with three variables # input is equal to the player id rand = runtime.prss_share_random(Zp) #rand1 = runtime.prss_share_random(Zp) rand1 = rand print "rand = ", rand, "rand1 = ", rand1 #open rand and rand1 to print their value open_rand = runtime.open(rand) open_rand1 = runtime.open(rand1) temp = gather_shares([open_rand, open_rand1]) temp.addCallback(self.results_ready) # we test if rand == rand1 by using equality protocol test = (rand == rand1) test_open = runtime.open(test) results = gather_shares([test_open]) results.addCallback(self.results_ready) runtime.schedule_callback(results, lambda _: runtime.synchronize()) runtime.schedule_callback(results, lambda _: runtime.shutdown()) def results_ready(self, results): print "ALGO_QUAD temp results =", results def mtemp(self, temp): print "local part of shares after callback =" print temp # Parse command line arguments. parser = OptionParser() EqualityRuntime.add_options(parser) options, args = parser.parse_args() if len(args) == 0: parser.error("you must specify a config file") else: id, players = load_config(args[0]) # Create a deferred Runtime and ask it to run our protocol when ready. pre_runtime = create_runtime(id, players, 1, options, EqualityRuntime) pre_runtime.addCallback(Protocol) # Start the Twisted event loop. reactor.run() as you can see, I simply generate 2 random numbers, then I test if they have the same value, and I print the result of the test. This will work if rand != rand1, but if I set rand1 = rand => ERROR. This error will only happen if p = 367 (and maybe with others primes, but I couldn't test them all) Here is the error : Unhandled error in Deferred: Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/twisted/internet/defer.py", line 328, in _runCallbacks self.result = callback(self.result, *args, **kw) File "/Users/jonathanvds/opt/lib/python/viff/runtime.py", line 239, in _callback_fired self.callback(self.results) File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/twisted/internet/defer.py", line 243, in callback self._startRunCallbacks(result) File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/twisted/internet/defer.py", line 312, in _startRunCallbacks self._runCallbacks() --- <exception caught here> --- File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/twisted/internet/defer.py", line 328, in _runCallbacks self.result = callback(self.result, *args, **kw) File "/Users/jonathanvds/opt/lib/python/viff/passive.py", line 211, in <lambda> result.addCallback(lambda (a, b): a * b) exceptions.TypeError: unsupported operand type(s) for *: 'instance' and 'GFElement' I can't find where the problem comes from since I only have the error with p = 367 (and I have the same error with my new protocol for p = 5 mod 8, but I'm guessing that if I can solve the problem in the existing protocol, I'll be able to do the same with my implementation). Thank you for your help, Jonathan Van den Schrieck
_______________________________________________ viff-devel mailing list (http://viff.dk/) viff-devel@viff.dk http://lists.viff.dk/listinfo.cgi/viff-devel-viff.dk