Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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))
    }
Beispiel #5
0
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
Beispiel #6
0
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