Beispiel #1
0
class protocolThread(threading.Thread):
    def __init__(self, host, port, vk, sk):
        threading.Thread.__init__(self)
        self.messages = Messages()
        self.mailbox = Mailbox(host, port, timeout=None)
        self.vk = vk
        self.sk = sk
        self.session = None
        self.number = None
        self.number_of_players = None
        self.players = {}

    def run(self):
        crypto = Crypto()
        crypto.generate_key_pair()
        enc_key = crypto.export_public_key()
        self.mailbox.connect()
        self.messages.make_greeting(self.vk)
        msg = self.messages.packets.SerializeToString()
        self.mailbox.send(msg)
        req = self.mailbox.recv()
        self.messages.packets.ParseFromString(req)
        self.session = self.messages.packets.packet[-1].packet.session
        self.number = self.messages.packets.packet[-1].packet.number
        if self.session != '':
            print("Player #" + str(self.number) + " get session number.\n")
        # Here is when announcment should begin
        req = self.mailbox.recv()
        self.messages.packets.ParseFromString(req)
        phase = self.messages.get_phase()
        number = self.messages.get_number()
        time.sleep(1)
        if phase == 1 and number > 0:
            print("player #" + str(self.number) +
                  " is about to share verification key with " + str(number) +
                  " players.\n")
            self.number_of_players = number
            #Share the keys
            self.messages.clear_packets()
            self.messages.packets.packet.add()
            self.messages.packets.packet[-1].packet.from_key.key = self.vk
            self.messages.packets.packet[-1].packet.session = self.session
            self.messages.packets.packet[-1].packet.number = self.number
            shared_key_message = self.messages.packets.SerializeToString()
            messages = self.mailbox.share(shared_key_message, self.number,
                                          self.number_of_players)
            self.messages.packets.ParseFromString(messages)
            self.players = {
                packet.packet.number: str(packet.packet.from_key.key)
                for packet in self.messages.packets.packet
            }
        print("Player #" + str(self.number) + " got players " +
              str(self.players) + '\n')
        # crypto = Crypto()
        # crypto.generate_key_pair()
        # enc_key = crypto.export_public_key()
        # clear old messages
        self.messages.clear_packets()
        # add encrytion key
        self.messages.add_encryption_key(enc_key, None)
        # self.messages.add_str('x')
        self.messages.packets.packet[-1].packet.from_key.key = self.players[
            self.number]
        self.messages.packets.packet[-1].packet.session = self.session
        self.messages.packets.packet[-1].packet.number = self.number
        # self.messages.packets.packet[-1].signature.signature = '1234'
        # for the packet
        # self.messages.form_last_packet(self.sk, self.session, self.number, self.vk, None)
        # # share the keys
        outcome_message = self.messages.packets.SerializeToString()
        print("Player " + str(self.number) +
              " is about to share encrytion key.\n")
        msgs = self.mailbox.share(outcome_message, self.number,
                                  self.number_of_players)
        # self.mailbox.send(outcome_message)
        # print(self.mailbox.send(outcome_message))
        # # parse the result
        # try:
        #     self.messages.packets.ParseFromString(msgs)
        # except DecodeError:
        #     print('Decoding Error!')
        # # get encryption keys
        # if (self.messages.encryption_keys_count() == self.number_of_players):
        #     self.encryption_keys = self.messages.get_encryption_keys()
        #     print('Player '+ str(self.number) + ' recieved all keys for test\n')
        # else:
        #     raise Exception('Not get encryption keys!')
        #
        time.sleep(10)
        self.mailbox.close()
Beispiel #2
0
def cli(ctx, host, user, password, debug):
    ctx.ensure_object(dict)
    ctx.obj["DEBUG"] = debug
    mailbox = Mailbox(debug)
    mailbox.connect(host, user, password)
    ctx.obj["mailbox"] = mailbox