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)
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'])