示例#1
0
def create_petition_checker(inputs, reference_inputs, parameters, outputs,
                            returns, dependencies):
    try:

        # retrieve petition
        petition = loads(outputs[1])
        num_options = len(petition['options'])

        print "CHECKING (create) - check format"
        if len(inputs) != 1 or len(reference_inputs) != 0 or len(
                outputs) != 2 or len(returns) != 0:
            return False
        if num_options < 1 or num_options != len(petition['scores']):
            return False

        print "CHECKING (create) - check tokens"
        if loads(inputs[0])['type'] != 'PetitionEncToken' or loads(
                outputs[0])['type'] != 'PetitionEncToken':
            return False
        if petition['type'] != 'PetitionEncObject':
            return False

        print "CHECKING (create) - check proof"
        params = setup()
        proof_init = unpack(parameters[0])
        tally_pub = unpack(petition['tally_pub'])
        for value in petition['scores']:
            if not verifyzero(params, tally_pub, unpack(value), proof_init):
                return False

        # otherwise
        return True

    except (KeyError, Exception):
        return False
示例#2
0
文件: vote.py 项目: alxd112/byzcuit
def tally_checker(inputs, reference_inputs, parameters, outputs, returns,
                  dependencies):
    try:

        # retrieve vote
        vote = loads(inputs[0])
        result = loads(outputs[0])

        # check format
        if len(inputs) != 1 or len(reference_inputs) != 0 or len(
                outputs) != 1 or len(returns) != 0:
            return False
        if len(vote['options']) != len(result['outcome']):
            return False

        # check tokens
        if result['type'] != 'VoteResult':
            return False

        # generate params, retrieve tally's public key and the parameters
        params = setup()
        (G, _, (h0, _, _, _), _) = params
        tally_pub = unpack(vote['tally_pub'])
        sig = unpack(parameters['signature'])
        proof_dec = loads(parameters['proof_dec'])
        outcome = result['outcome']

        # verify proof of correct decryption
        for i in range(0, len(vote['scores'])):
            a, b = unpack(vote['scores'][i])
            ciphertext = (a, b - outcome[i] * h0)
            if not verifyzero(params, tally_pub, ciphertext,
                              unpack(proof_dec[i])):
                return False

        # verify signature
        hasher = sha256()
        hasher.update(dumps(vote).encode('utf8'))
        hasher.update(dumps(result['outcome']).encode('utf8'))
        if not do_ecdsa_verify(G, tally_pub, sig, hasher.digest()):
            return False

        # otherwise
        return True

    except (KeyError, Exception):
        return False
示例#3
0
文件: vote.py 项目: alxd112/byzcuit
def create_vote_checker(inputs, reference_inputs, parameters, outputs, returns,
                        dependencies):
    try:

        # retrieve vote
        vote = loads(outputs[1])
        num_votes = len(vote['options'])

        # check format
        if len(inputs) != 1 or len(reference_inputs) != 0 or len(
                outputs) != 2 or len(returns) != 0:
            return False
        if num_votes < 1 or num_votes != len(vote['scores']):
            return False
        if vote['participants'] == None:
            return False

        # check tokens
        if loads(inputs[0])['type'] != 'VoteToken' or loads(
                outputs[0])['type'] != 'VoteToken':
            return False
        if vote['type'] != 'VoteObject':
            return False

        # check proof
        params = setup()
        proof_init = unpack(parameters['proof_init'])
        tally_pub = unpack(vote['tally_pub'])
        for value in vote['scores']:
            if not verifyzero(params, tally_pub, unpack(value), proof_init):
                return False

        # otherwise
        return True

    except (KeyError, Exception):
        return False