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()
示例#3
0
    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'])
示例#4
0
    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'])
示例#5
0
####################################################################
## 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
示例#6
0
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)

    '''