[viff-devel] Error when coding with callbacks and reveals
Martin Geisler
mg at daimi.au.dk
Mon Mar 9 06:21:49 PDT 2009
Tord Ingolf Reistad <tordr at stud.ntnu.no> writes:
> Hello,
>
> Continuing on my previous email about how to code things in VIFF. I
> hereby present the complete test code.
>
> It seems my calculations are done at the same time that the reactor
> is closing down so sometimes my code does not return any printed
> values. This is a mistake, either in my understanding of VIFF or in
> the framework itself.
Yeah, I know what you mean... it takes a bit of time to wrap your head
around how to structure things in VIFF. The solution is often very
simple when someone else points it out, though :-)
But don't worry, after the initial head-ache, you'll be fine...
> See the two runs below.
>
>
> class Protocol:
>
> def __init__(self, runtime):
> # Save the Runtime for later use
> self.runtime = runtime
> own_id = self.runtime.id
>
> Zp = GF(43)
> test_vector = [0, 1, 6, 0]
> self.value = test_vector[own_id - 1]
> m1, m2, m3 = runtime.shamir_share([1, 2, 3], Zp, self.value)
> shares = [m1, m2, m3]
> r_as_bits = [m1, m2, m1]
> r = m3
> mask = m3
> x = m3
> result = self.protocol_part_1(r_as_bits, r, mask, x)
> callback_result = result.addCallback(self.print_answer)
> #results.addCallback(lambda _: runtime.synchronize())
> m1.addCallback(lambda _: runtime.shutdown())
This is a problem -- just as soon as m1 arrives from the Shamir
sharing above, runtime.shutdown will be called.
You will want to call runtime.shutdown at a later point when you know
that the protocol is done.
> #Create_random_bits
> #Convert_to_test_values
> #Test_values if useable use random bits otherwise find new bits
> #c = r + x
> #Compare (c,r)
>
> def protocol_part_1(self, r_as_bits, r, mask, x):
> test = self.test_not_all_zero(r_as_bits, mask)
> self.r = r
> self.x = x
> return test.addCallback(self.protocol_part_2)
>
> def protocol_part_2(self, test):
> if test:
> c = self.r + self.x
> c_open = self.runtime.open(c)
> result = gather_shares([c_open])
> callback_result = result.addCallback(self.print_answer)
> return callback_result
> else:
> print "No value, False"
> return False
>
> def print_answer(self, value):
> print "Result ", value
I think you want to call self.runtime.shutdown() here since this is
when your result is there.
--
Martin Geisler
VIFF (Virtual Ideal Functionality Framework) brings easy and efficient
SMPC (Secure Multiparty Computation) to Python. See: http://viff.dk/.
More information about the viff-devel
mailing list