Exemplo n.º 1
0
    def _requestTable(self, message):
        try:
            if message.sender != 'collector':
                return self.factory.fail("Unauthorized request for table by '%s'" % message.sender)
            if not message.signed:
                return self.factory.fail("Table Request message must be signed by collector")
            if not message.validateSignature():
                return self.factory.fail("Invalid signature on Table Request message")

            encKey = message['encrypted-session-key']
            myKey = app.keyManager.getMyKey()

            keyHex = myKey.privateEncrypt(encKey)
            key = SessionKey(int(keyHex, 16))
            logger.debug("Received session key from collector:")
            logger.debug(keyHex, False)

            table = self.factory.authNode.generateTable()
            encTable = key.encrypt(json.dumps(table))

            message = SecureMessage()
            message['encrypted-table'] = encTable
            message.sign()

            logger.split()
            self.sendMessage(message)


        except KeyError as e:
            return self.factory.fail("Get-Session-Key no: '%s' field found in message" % e)
Exemplo n.º 2
0
    def countVotes(self, indexTable):
        logger.split()
        logger.verbose("Counting votes")

        logger.split()
        logger.info("Election Results:", False)
        logger.split()

        voteCount = {}
        for index in indexTable:
            # index = int(ind)
            key = SessionKey(int(indexTable[index], 16))
            vote = key.decrypt(self.votes[index])
            logger.special("%7s: %s" % (index, vote), False)
            if vote in voteCount:
                voteCount[vote] += 1
            else:
                voteCount[vote] = 1


        logger.split().split()

        mVote = None
        for vote in voteCount:
            if not mVote or voteCount[vote] > mVote:
                mVote = voteCount[vote]
        for vote in voteCount:
            if voteCount[vote] == mVote:
                logger.extraspecial("%5s: %s (%d)" % (vote, '#'*voteCount[vote], voteCount[vote]), False)
            else:
                logger.special("%5s: %s (%d)" % (vote, '#'*voteCount[vote], voteCount[vote]), False)

        logger.split()
        # Send results to clients
        for client in self.clients:
            client['connection'].sendResults(voteCount=voteCount, index=client['index'], vote=client['vote'])