def vcrun(f, fp=True, cb1=None, cb2=None): """ Verifiable computation entry point. Adding this to the end of the verifiable computation will load configurations, set up communication, and run the given function f. The qap_wrapper decorator should be applied to f, and f is assumed to give as public output the computation result. """ parser = OptionParser() Runtime.add_options(parser) if cb1: cb1(parser) # callback to add custom options to parser options, args = parser.parse_args() if len(args) < 1: parser.error("you must specify a config file") myid, players = load_config(args[0]) if cb2: cb2(options, args[1:]) # handle parsing results if fp: from viff.comparison import Toft07Runtime from viff.division import DivisionSH12Mixin runtime_class = make_runtime_class(mixins=[ DivisionSH12Mixin, ProbabilisticEqualityMixin, Toft07Runtime ]) pre_runtime = create_runtime(myid, players, options.threshold, options, runtime_class) pre_runtime.addCallback(vc_init) else: pre_runtime = create_runtime(myid, players, options.threshold, options) pre_runtime.addCallback(vc_init) def callf(runtime): ret = f(runtime) retsh = [] for_each_in(Share, lambda x: retsh.append(x), ret) def printAndExit(runtime, vals): valsrev = list(reversed(vals)) retc = for_each_in(Share, lambda x: valsrev.pop(), ret) print "[ Verifiable computation result", retc, "]" if runtime.__class__.__name__ != "LocalRuntime": time.sleep(1) runtime.shutdown() return runtime if retsh != []: # print all returned values and then shut down gather_shares(retsh).addCallback( lambda x: printAndExit(runtime, x)) else: if runtime.__class__.__name__ != "LocalRuntime": time.sleep(1) runtime.shutdown() return runtime pre_runtime.addCallback(callf) reactor.run()
def __init__(self, input_map, config_file, options=None): self.config_file = config_file self.options = options self.id, self.parties = load_config(self.config_file) self.parties_list = [p for p in self.parties] self.input_map = input_map self.map_inputs_to_parties() runtime_class = make_runtime_class(mixins=[ComparisonToft07Mixin]) self.pre_runtime = create_runtime(self.id, self.parties, 1, self.options, runtime_class)
def main(): # Parse command line arguments. parser = OptionParser(usage=__doc__) parser.add_option("--modulus", help="lower limit for modulus (can be an expression)") parser.set_defaults(modulus=2**65) Runtime.add_options(parser) options, args = parser.parse_args() if len(args)==2: number = int(args[1]) else: number = None if len(args) == 0: parser.error("you must specify a config file") Zp = GF(find_prime(options.modulus, blum=True)) # Load configuration file. id, players = load_config(args[0]) runtime_class = make_runtime_class(mixins=[ComparisonToft07Mixin]) pre_runtime = create_runtime(id, players, 1, options, runtime_class) def run(runtime): print "Connected." # Players 1 and 2 are doing a sharing over the field Zp. # Our input is number (None for other players). if runtime.id == 3: print "I have no number" else: print "My number: %d." % number (x, y) = runtime.shamir_share([1, 2], Zp, number) # Do the secret computation. result = divide(x, y, 10) # 10 bits for the result. # Now open the result so we can see it. dprint("The two numbers divided are: %s", runtime.open(result)) result.addCallback(lambda _: runtime.shutdown()) pre_runtime.addCallback(run) # Start the Twisted event loop. reactor.run()
def main(): # Parse command line arguments. parser = OptionParser(usage=__doc__) parser.add_option("--modulus", help="lower limit for modulus (can be an expression)") parser.set_defaults(modulus=2**65) Runtime.add_options(parser) options, args = parser.parse_args() if len(args) == 2: number = int(args[1]) else: number = None if len(args) == 0: parser.error("you must specify a config file") Zp = GF(find_prime(options.modulus, blum=True)) # Load configuration file. id, players = load_config(args[0]) runtime_class = make_runtime_class(mixins=[ComparisonToft07Mixin]) pre_runtime = create_runtime(id, players, 1, options, runtime_class) def run(runtime): print "Connected." # Players 1 and 2 are doing a sharing over the field Zp. # Our input is number (None for other players). if runtime.id == 3: print "I have no number" else: print "My number: %d." % number (x, y) = runtime.shamir_share([1, 2], Zp, number) # Do the secret computation. result = divide(x, y, 10) # 10 bits for the result. # Now open the result so we can see it. dprint("The two numbers divided are: %s", runtime.open(result)) result.addCallback(lambda _: runtime.shutdown()) pre_runtime.addCallback(run) # Start the Twisted event loop. reactor.run()
actual_mixins = [] if options.mixins: actual_mixins = [mixins[mixin] for mixin in options.mixins.split(',')] # Identify the operation and it mixin dependencies. operation = operations[options.operation][0] actual_mixins += operations[options.operation][1] operation_arity = operations[options.operation][2] print "Using the base runtime: %s." % base_runtime_class if actual_mixins: print "With the following mixins:" for mixin in actual_mixins: print "- %s" % mixin.__name__ runtime_class = make_runtime_class(base_runtime_class, actual_mixins) pre_runtime = create_runtime(id, players, options.threshold, options, runtime_class) def update_args(runtime, options): args = {} if options.args: for arg in options.args.split(','): id, value = arg.split('=') args[id] = long(value) runtime.set_args(args) return runtime
output = runtime.open(output) dprint("output %s", output) actual = runtime.open(arr[9 * 3 + 2]) dprint("actual %s", actual) print "Time taken: %.2f sec" % (time() - start_time) runtime.wait_for(output) # runtime.schedule_callback(results, lambda _: runtime.synchronize()) # runtime.schedule_callback(results, lambda _: runtime.shutdown()) def errorHandler(failure): print "Error: %s" % failure # Create a runtime runtime_class = make_runtime_class(runtime_class=Toft05Runtime, mixins=[ProbabilisticEqualityMixin]) pre_runtime = create_runtime(id, players, 1, None, runtime_class) pre_runtime.addCallback(protocol) # This error handler will enable debugging by capturing # any exceptions and print them on Standard Out. pre_runtime.addErrback(errorHandler) print "#### Starting reactor ###" reactor.run()
if options.mixins: actual_mixins = [mixins[mixin] for mixin in options.mixins.split(',')] # Identify the operation and it mixin dependencies. operation = operations[options.operation][0] actual_mixins += operations[options.operation][1] operation_arity = operations[options.operation][2] print "Using the base runtime: %s." % base_runtime_class if actual_mixins: print "With the following mixins:" for mixin in actual_mixins: print "- %s" % mixin.__name__ runtime_class = make_runtime_class(base_runtime_class, actual_mixins) pre_runtime = create_runtime(id, players, options.threshold, options, runtime_class) def update_args(runtime, options): args = {} if options.args: for arg in options.args.split(','): id, value = arg.split('=') args[id] = long(value) runtime.set_args(args) return runtime pre_runtime.addCallback(update_args, options)
def results_ready(opened_results): print "Results Ready" for i in range(len(opened_results)): node_name = results[i] value_map[node_name] = opened_results[ i] if opened_results[i] < INFINITY else float("inf") gathered = gather_shares(gathered) gathered.addCallback(results_ready) runtime.schedule_callback(gathered, lambda _: runtime.shutdown()) print "Opening" except: import traceback traceback.print_exc() # Intialize Runtime runtime_class = make_runtime_class(mixins=[ComparisonToft07Mixin]) pre_runtime = create_runtime(id, parties, 1, options, runtime_class) pre_runtime.addCallback(begin_MPC) # Start the Twisted event loop. reactor.run() print "Evaluated!!" time2 = time() print "MPC TIME: " + str(time2 - time1) print "TOTAL TIME: " + str(time2 - time_)
def errorHandler(failure): print("Error: %s" % failure) # Parse command line arguments. parser = OptionParser() Toft05Runtime.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]) k = int(sys.argv[3]) # Create a deferred Runtime and ask it to run our protocol when ready. runtime_class = make_runtime_class( runtime_class=BasicActiveRuntime, mixins=[TriplesHyperinvertibleMatricesMixin]) pre_runtime = create_runtime(id, players, 1, options, runtime_class=runtime_class) pre_runtime.addCallback(OnlineProtocol, k) pre_runtime.addErrback(errorHandler) # Start the Twisted event loop. reactor.run()
# Parse command line arguments. parser = OptionParser(usage=__doc__) parser.add_option("--modulus", help="lower limit for modulus (can be an expression)") parser.add_option("-n", "--number", type="int", help="number to compare") parser.set_defaults(modulus=2**65, number=None) Runtime.add_options(parser) options, args = parser.parse_args() if len(args) == 0: parser.error("you must specify a config file") Zp = GF(find_prime(options.modulus, blum=True)) # Load configuration file. id, players = load_config(args[0]) runtime_class = make_runtime_class(mixins=[ProbabilisticEqualityMixin]) pre_runtime = create_runtime(id, players, 1, options, runtime_class) pre_runtime.addCallback(Protocol) # Start the Twisted event loop. reactor.run()
result.addCallback(lambda _: runtime.shutdown()) # Parse command line arguments. parser = OptionParser(usage=__doc__) parser.add_option("--modulus", help="lower limit for modulus (can be an expression)") parser.add_option("-n", "--number", type="int", help="number to compare") parser.set_defaults(modulus=2**65, number=None) Runtime.add_options(parser) options, args = parser.parse_args() if len(args) == 0: parser.error("you must specify a config file") Zp = GF(find_prime(options.modulus, blum=True)) # Load configuration file. id, players = load_config(args[0]) runtime_class = make_runtime_class(mixins=[ProbabilisticEqualityMixin]) pre_runtime = create_runtime(id, players, 1, options, runtime_class) pre_runtime.addCallback(Protocol) # Start the Twisted event loop. reactor.run()