def test_create_tumbler(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 transaction = tumbler.create_tumbler((token, ), None, None, vvk, auth_sig) ## submit transaction response = requests.post('http://127.0.0.1:5000/' + tumbler_contract.contract_name + '/create_tumbler', json=transaction_to_solution(transaction)) self.assertTrue(response.json()['success']) ## stop service checker_service_process.terminate() checker_service_process.join()
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_create_tumbler(self): with tumbler_contract.test_service(): ## create transaction # init init_transaction = tumbler.init() token = init_transaction['transaction']['outputs'][0] # initialise petition transaction = tumbler.create_tumbler( (token, ), None, None, aggr_vk, ) ## submit transaction response = requests.post('http://127.0.0.1:5000/' + tumbler_contract.contract_name + '/create_tumbler', json=transaction_to_solution(transaction)) self.assertTrue(response.json()['success'])
def test_redeem(self): with tumbler_contract.test_service(): ## create transaction # init init_transaction = tumbler.init() token = init_transaction['transaction']['outputs'][0] # initialise petition create_transaction = tumbler.create_tumbler((token, ), None, None, aggr_vk) old_list = create_transaction['transaction']['outputs'][1] # some crypto # ------------------------------------ ID = 10 # sequence number embedded in the credentials addr = 100 # merchant address (d, gamma) = elgamal_keygen(bp_params) private_m = [ID, addr] Lambda = prepare_blind_sign(bp_params, gamma, private_m) sigs_tilde = [ blind_sign(bp_params, ski, gamma, Lambda) for ski in sk ] sigs = [ unblind(bp_params, sigma_tilde, d) for sigma_tilde in sigs_tilde ] sigma = agg_cred(bp_params, sigs) # ------------------------------------ # add signature to th petition transaction = tumbler.redeem((old_list, ), None, (dumps(addr), ), sigma, aggr_vk, ID) ## 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'])
#################################################################### ## coconut parameters t, n, q = 4, 5, 3 # threshold parameters bp_params = setup(q) # bp system's parameters (sk, vk) = ttp_keygen(bp_params, t, n) # signers keys aggr_vk = agg_key(bp_params, vk, threshold=True) #################################################################### # create all transactions #################################################################### # init init_tx = tumbler.init() token = init_tx['transaction']['outputs'][0] # initialise petition create_tx = tumbler.create_tumbler((token, ), None, None, aggr_vk) old_list = create_tx['transaction']['outputs'][1] # some crypto # ------------------------------------ ID = 10 # sequence number embedded in the credentials addr = 100 # merchant address (d, gamma) = elgamal_keygen(bp_params) private_m = [ID, addr] Lambda = prepare_blind_sign(bp_params, gamma, private_m) sigs_tilde = [blind_sign(bp_params, ski, gamma, Lambda) for ski in sk] sigs = [unblind(bp_params, sigma_tilde, d) for sigma_tilde in sigs_tilde] sigma = agg_cred(bp_params, sigs) # ------------------------------------ # add signature to th petition
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) '''