def test_redeem(self): ## run service checker_service_process = Process( target=tumbler_contract.run_checker_service) checker_service_process.start() time.sleep(0.1) ## create transaction # init init_transaction = tumbler.init() token = init_transaction['transaction']['outputs'][0] # initialise petition create_transaction = tumbler.create_tumbler((token, ), None, None, vvk, auth_sig) old_list = create_transaction['transaction']['outputs'][1] # some crypto # ------------------------------------ hasher = sha256() hasher.update(dumps(ID).encode('utf8')) hasher.update(dumps(merchant_addr).encode('utf8')) m = Bn.from_binary(hasher.digest()) (priv, pub) = elgamal_keygen(bp_params) (cm, c, proof_s) = prepare_blind_sign(bp_params, m, pub) enc_sigs = [ blind_sign(bp_params, ski, cm, c, pub, proof_s) for ski in sk ] (h, enc_epsilon) = zip(*enc_sigs) sigs = [(h[0], elgamal_dec(bp_params, priv, enc)) for enc in enc_epsilon] sig = aggregate_th_sign(bp_params, sigs) sig = randomize(bp_params, sig) # reveal ID and merchant addr #print(verify(bp_params, vvk, m, sig)) # ------------------------------------ # add signature to th petition transaction = tumbler.redeem( (old_list, ), None, (dumps(ID), dumps(merchant_addr)), sig, vvk, ) ## submit transaction response = requests.post('http://127.0.0.1:5000/' + tumbler_contract.contract_name + '/redeem', json=transaction_to_solution(transaction)) self.assertTrue(response.json()['success']) ## stop service checker_service_process.terminate() checker_service_process.join()
def test_sign(self): ## run service checker_service_process = Process( target=petition_contract.run_checker_service) checker_service_process.start() time.sleep(0.1) ## create transaction # init init_transaction = petition.init() token = init_transaction['transaction']['outputs'][0] # initialise petition create_petition_transaction = petition.create_petition( (token, ), None, None, UUID, options, priv_owner, pub_owner, vvk) old_petition = create_petition_transaction['transaction']['outputs'][1] old_list = create_petition_transaction['transaction']['outputs'][2] # some crypto # ------------------------------------ (priv_signer, pub_signer) = elgamal_keygen(bp_params) m = priv_signer (cm, c, proof_s) = prepare_blind_sign(bp_params, m, pub_signer) enc_sigs = [ blind_sign(bp_params, ski, cm, c, pub_signer, proof_s) for ski in sk ] (h, enc_epsilon) = zip(*enc_sigs) sigs = [(h[0], elgamal_dec(bp_params, priv_signer, enc)) for enc in enc_epsilon] sig = aggregate_th_sign(bp_params, sigs) sig = randomize(bp_params, sig) (kappa, nu, proof_v) = show_coconut_petition(bp_params, vvk, m, UUID) #print(coconut_petition_verify(bp_params, vvk, kappa, sig, proof_v, UUID, nu)) # ------------------------------------ # add signature to th petition start = time.time() transaction = petition.sign((old_petition, old_list), None, (dumps([1, 0]), ), priv_signer, sig, vvk) end = time.time() print((end - start) * 1000) ## submit transaction response = requests.post('http://127.0.0.1:5000/' + petition_contract.contract_name + '/sign', json=transaction_to_solution(transaction)) self.assertTrue(response.json()['success']) ## stop service checker_service_process.terminate() checker_service_process.join()
def generate_signature(): (priv_key, pub_key) = elgamal_keygen(bp_params) m = priv_key (cm, c, proof_s) = prepare_blind_sign(bp_params, m, pub_key) enc_sigs = [ blind_sign(bp_params, ski, cm, c, pub_key, proof_s) for ski in sk ] (h, enc_epsilon) = zip(*enc_sigs) sigs = [(h[0], elgamal_dec(bp_params, priv_key, enc)) for enc in enc_epsilon] sig = aggregate_th_sign(bp_params, sigs) sig = randomize(bp_params, sig) return priv_key, sig
def main(): petition.contract._populate_empty_checkers() print "operation\t\tmean (ms)\t\tsd (ms)\t\truns" # == init =============== init_tx = petition.init() # == create_petition =============== # gen times = [] for i in range(RUNS): start_time = time.time() petition.create_petition( (init_tx['transaction']['outputs'][0],), None, None, UUID, options, priv_owner, pub_owner, vvk ) end_time = time.time() times.append((end_time-start_time)*1000) mean = numpy.mean(times) sd = numpy.std(times) print "[g] create_petition tx\t{:.10f}\t\t{:.10f}\t{}".format(mean, sd, RUNS) # check create_petition_tx = petition.create_petition( (init_tx['transaction']['outputs'][0],), None, None, UUID, options, priv_owner, pub_owner, vvk ) solution = transaction_to_solution(create_petition_tx) times = [] for i in range(RUNS): start_time = time.time() petition.contract.checkers['create_petition']( solution['inputs'], solution['referenceInputs'], solution['parameters'], solution['outputs'], solution['returns'], solution['dependencies'], ) end_time = time.time() times.append((end_time-start_time)*1000) mean = numpy.mean(times) sd = numpy.std(times) print "[c] create_petition tx\t{:.10f}\t\t{:.10f}\t{}".format(mean, sd, RUNS) # == sign =============== # gen old_petition = create_petition_tx['transaction']['outputs'][1] old_list = create_petition_tx['transaction']['outputs'][2] # some crypto # ------------------------------------ (priv_signer, pub_signer) = elgamal_keygen(bp_params) m = priv_signer (cm, c, proof_s) = prepare_blind_sign(bp_params, m, pub_signer) enc_sigs = [blind_sign(bp_params, ski, cm, c, pub_signer, proof_s) for ski in sk] (h, enc_epsilon) = zip(*enc_sigs) sigs = [(h[0], elgamal_dec(bp_params, priv_signer, enc)) for enc in enc_epsilon] sig = aggregate_th_sign(bp_params, sigs) sig = randomize(bp_params, sig) (kappa, nu, proof_v) = show_coconut_petition(bp_params, vvk, m, UUID) #print(coconut_petition_verify(bp_params, vvk, kappa, sig, proof_v, UUID, nu)) # ------------------------------------ times = [] for i in range(RUNS): start_time = time.time() petition.sign( (old_petition, old_list), None, (dumps([1, 0]),), priv_signer, sig, vvk ) end_time = time.time() times.append((end_time-start_time)*1000) mean = numpy.mean(times) sd = numpy.std(times) print "[g] sign tx\t\t{:.10f}\t\t{:.10f}\t{}".format(mean, sd, RUNS) # check sign_tx = petition.sign( (old_petition, old_list), None, (dumps([1, 0]),), priv_signer, sig, vvk ) solution = transaction_to_solution(sign_tx) times = [] for i in range(RUNS): start_time = time.time() petition.contract.checkers['sign']( solution['inputs'], solution['referenceInputs'], solution['parameters'], solution['outputs'], solution['returns'], solution['dependencies'], ) end_time = time.time() times.append((end_time-start_time)*1000) mean = numpy.mean(times) sd = numpy.std(times) print "[c] sign tx\t\t{:.10f}\t\t{:.10f}\t{}".format(mean, sd, RUNS) '''
def main(): tumbler.contract._populate_empty_checkers() print "operation\t\tmean (ms)\t\tsd (ms)\t\truns" # == init =============== init_tx = tumbler.init() # == create_tumbler =============== # gen times = [] for i in range(RUNS): start_time = time.time() tumbler.create_tumbler( (init_tx['transaction']['outputs'][0],), None, None, vvk, auth_sig ) end_time = time.time() times.append((end_time-start_time)*1000) mean = numpy.mean(times) sd = numpy.std(times) print "[g] create_tumbler tx\t{:.10f}\t\t{:.10f}\t{}".format(mean, sd, RUNS) # check create_tumbler_tx = tumbler.create_tumbler( (init_tx['transaction']['outputs'][0],), None, None, vvk, auth_sig ) solution = transaction_to_solution(create_tumbler_tx) times = [] for i in range(RUNS): start_time = time.time() tumbler.contract.checkers['create_tumbler']( solution['inputs'], solution['referenceInputs'], solution['parameters'], solution['outputs'], solution['returns'], solution['dependencies'], ) end_time = time.time() times.append((end_time-start_time)*1000) mean = numpy.mean(times) sd = numpy.std(times) print "[c] create_tumbler tx\t{:.10f}\t\t{:.10f}\t{}".format(mean, sd, RUNS) # == redeem =============== # gen # some crypto # ------------------------------------ hasher = sha256() hasher.update(dumps(ID).encode('utf8')) hasher.update(dumps(merchant_addr).encode('utf8')) m = Bn.from_binary(hasher.digest()) (priv, pub) = elgamal_keygen(bp_params) (cm, c, proof_s) = prepare_blind_sign(bp_params, m, pub) enc_sigs = [blind_sign(bp_params, ski, cm, c, pub, proof_s) for ski in sk] (h, enc_epsilon) = zip(*enc_sigs) sigs = [(h[0], elgamal_dec(bp_params, priv, enc)) for enc in enc_epsilon] sig = aggregate_th_sign(bp_params, sigs) sig = randomize(bp_params, sig) # reveal ID and merchant addr #print(verify(bp_params, vvk, m, sig)) # ------------------------------------ times = [] for i in range(RUNS): start_time = time.time() tumbler.redeem( (create_tumbler_tx['transaction']['outputs'][1],), None, (dumps(ID),dumps(merchant_addr)), sig, vvk, ) end_time = time.time() times.append((end_time-start_time)*1000) mean = numpy.mean(times) sd = numpy.std(times) print "[g] redeem tx\t\t{:.10f}\t\t{:.10f}\t{}".format(mean, sd, RUNS) # check redeem_tx = tumbler.redeem( (create_tumbler_tx['transaction']['outputs'][1],), None, (dumps(ID),dumps(merchant_addr)), sig, vvk, ) solution = transaction_to_solution(redeem_tx) times = [] for i in range(RUNS): start_time = time.time() tumbler.contract.checkers['redeem']( solution['inputs'], solution['referenceInputs'], solution['parameters'], solution['outputs'], solution['returns'], solution['dependencies'], ) end_time = time.time() times.append((end_time-start_time)*1000) mean = numpy.mean(times) sd = numpy.std(times) print "[c] redeem tx\t\t{:.10f}\t\t{:.10f}\t{}".format(mean, sd, RUNS) '''