def create_tumbler_checker(inputs, reference_inputs, parameters, outputs, returns, dependencies): try: # retrieve ID list spent_list = loads(outputs[1]) # retrieve vvk & sig packed_vvk = spent_list['vvk'] sig = pet_unpack(parameters[0]) # check format if len(inputs) != 1 or len(reference_inputs) != 0 or len(outputs) != 2 or len(returns) != 0: return False # check types if loads(inputs[0])['type'] != 'TToken' or loads(outputs[0])['type'] != 'TToken': return False if spent_list['type'] != 'TList': return False # verify that the spent list is empty if spent_list['list']: return False # verify signature bp_params = bp_setup() hasher = sha256() hasher.update(outputs[1].encode('utf8')) m = Bn.from_binary(hasher.digest()) vvk = (unpackG2(bp_params,packed_vvk[0]), unpackG2(bp_params,packed_vvk[1]), unpackG2(bp_params,packed_vvk[2])) if not verify(bp_params, vvk, m, sig): return False # otherwise return True except (KeyError, Exception): return False
def verify_checker(inputs, reference_inputs, parameters, outputs, returns, dependencies): try: # retrieve data instance = loads(reference_inputs[0]) # check format if len(inputs) != 0 or len(reference_inputs) != 1 or len( outputs) != 0 or len(returns) != 1: return False # verify signature params = setup(instance['q']) packed_sig = parameters[0] sig = (unpackG1(params, packed_sig[0]), unpackG1(params, packed_sig[1])) clear_m = loads(parameters[1]) kappa = unpackG2(params, parameters[2]) proof_v = pet_unpack(parameters[3]) packed_vvk = instance['verifier'] vvk = (unpackG2(params, packed_vvk[0]), unpackG2(params, packed_vvk[1]), [unpackG2(params, y) for y in packed_vvk[2]]) if not mix_verify(params, vvk, kappa, sig, proof_v, clear_m): return False # otherwise return True except (KeyError, Exception): return False
def create_checker(inputs, reference_inputs, parameters, outputs, returns, dependencies): try: # retrieve instance instance = loads(outputs[1]) # retrieve parameters packed_sig = parameters[0] # check format if len(inputs) != 1 or len(reference_inputs) != 0 or len( outputs) != 2 or len(returns) != 0: return False # check types if inputs[0] != outputs[0]: return False if instance['type'] != 'CoCoInstance': return False # check fields q = instance['q'] t = instance['t'] n = instance['n'] instance['callback'] packed_vvk = instance['verifier'] if q < 1 or n < 1 or t > n: return False # verify signature params = setup(q) sig = (unpackG1(params, packed_sig[0]), unpackG1(params, packed_sig[1])) vvk = (unpackG2(params, packed_vvk[0]), unpackG2(params, packed_vvk[1]), [unpackG2(params, y) for y in packed_vvk[2]]) hasher = sha256() hasher.update(outputs[1].encode('utf8')) m = Bn.from_binary(hasher.digest()) if not mix_verify(params, vvk, None, sig, None, [m]): return False # otherwise return True except (KeyError, Exception): return False
def verify(inputs, reference_inputs, parameters, clear_m, hidden_m): #start_time = time.time() # load instance instance = loads(reference_inputs[0]) # build proof params = setup(instance['q']) packed_vvk = instance['verifier'] vvk = (unpackG2(params, packed_vvk[0]), unpackG2(params, packed_vvk[1]), [unpackG2(params, y) for y in packed_vvk[2]]) (kappa, proof_v) = show_mix_sign(params, vvk, hidden_m) tnm = (dumps(clear_m), pack(kappa), pet_pack(proof_v)) #end_time = time.time(); print((end_time-start_time)*1000) # returns return { 'returns': (dumps(True), ), 'extra_parameters': (dumps(clear_m), pack(kappa), pet_pack(proof_v)) }
def redeem_checker(inputs, reference_inputs, parameters, outputs, returns, dependencies): try: # retrieve ID list old_list = loads(inputs[0]) new_list = loads(outputs[0]) # retrieve parameters bp_params = bp_setup() ID = loads(parameters[0]) merchant_addr = loads(parameters[1]) packed_sig = parameters[2] sig = (unpackG1(bp_params, packed_sig[0]), unpackG1(bp_params, packed_sig[1])) # check format if len(inputs) != 1 or len(reference_inputs) != 0 or len(outputs) != 1 or len(returns) != 0: return False # check types if new_list['type'] != 'TList': return False # check format & consistency with old object packed_vvk = new_list['vvk'] if new_list['vvk'] != new_list['vvk']: return False # check spent list if (ID in old_list['list']) or (new_list['list'] != old_list['list'] + [ID]): return False # verify signature and nu's correctness vvk = (unpackG2(bp_params,packed_vvk[0]), unpackG2(bp_params,packed_vvk[1]), unpackG2(bp_params,packed_vvk[2])) hasher = sha256() hasher.update(parameters[0].encode('utf8')) hasher.update(parameters[1].encode('utf8')) m = Bn.from_binary(hasher.digest()) if not verify(bp_params, vvk, m, sig): return False # otherwise return True except (KeyError, Exception): return False
def sign_checker(inputs, reference_inputs, parameters, outputs, returns, dependencies): try: # retrieve petition old_petition = loads(inputs[0]) new_petition = loads(outputs[0]) # retrieve ID list old_list = loads(inputs[1]) new_list = loads(outputs[1]) # retrieve parameters bp_params = bp_setup() new_values = loads(parameters[0]) packed_sig = parameters[1] sig = (unpackG1(bp_params, packed_sig[0]), unpackG1(bp_params, packed_sig[1])) kappa = unpackG2(bp_params, parameters[2]) nu = unpackG1(bp_params, parameters[3]) proof_v = pet_unpack(parameters[4]) # check format if len(inputs) != 2 or len(reference_inputs) != 0 or len( outputs) != 2 or len(returns) != 0: return False # check types if new_petition['type'] != 'PObject' or new_list['type'] != 'PList': return False # check format & consistency with old object UUID = pet_unpack(new_petition['UUID']) options = new_petition['options'] packed_vvk = new_petition['verifier'] scores = new_petition['scores'] if old_petition['UUID'] != new_petition['UUID']: return False if len(old_petition['owner']) != len(new_petition['owner']): return False if len(old_petition['options']) != len(new_petition['options']): return False if old_petition['verifier'] != new_petition['verifier']: return False # check new values if sum(new_values) != 1: return False for i in range(len(scores)): if scores[i] != old_petition['scores'][i] + new_values[i]: return False if new_values[i] != 0 and new_values[i] != 1: return False # check spent list packed_nu = parameters[3] if (packed_nu in old_list['list']) or (new_list['list'] != old_list['list'] + [packed_nu]): return False # verify signature and nu's correctness vvk = (unpackG2(bp_params, packed_vvk[0]), unpackG2(bp_params, packed_vvk[1]), unpackG2(bp_params, packed_vvk[2])) if not coconut_petition_verify(bp_params, vvk, kappa, sig, proof_v, UUID, nu): return False # otherwise return True except (KeyError, Exception): return False