Example #1
0
    def send_browse_request(self, search_criteria, key, challenge):
        stream = StreamOut(self.settings)
        stream.add(search_criteria)
        buffer = stream.get()

        stream = StreamOut(self.settings)
        stream.u8(0)  #Packet type
        stream.u32(len(buffer))
        stream.write(buffer)

        if self.settings.get("pia.lan_version") != 0:
            self.nonce_counter += 1

            stream.u8(self.settings.get("pia.lan_version"))
            stream.bool(self.settings.get("pia.crypto_enabled"))
            stream.u64(self.nonce_counter)
            stream.write(key)

            if self.settings.get("pia.crypto_enabled"):
                challenge = self.generate_challenge(key, challenge)
            else:
                challenge = secrets.token_bytes(16 + 256)
            stream.write(challenge)

        self.s.send(stream.get(), self.broadcast)
Example #2
0
    def send_connection_request(self, station, inverse_id=None):
        logger.debug("Sending connection request")

        is_inverse = inverse_id is not None

        local = self.session.local_station()
        local_info = local.connection_info
        target_info = station.connection_info

        stream = StreamOut(self.settings)
        stream.u8(self.MESSAGE_CONNECTION_REQUEST)
        stream.u8(station.connection_id_out_temp)
        stream.u8(self.version)
        stream.bool(is_inverse)

        if self.version >= 7:
            stream.pid(target_info.local.pid)
        if self.version >= 8:
            stream.u32(target_info.local.cid)
            if is_inverse:
                stream.u8(inverse_id)
            else:
                stream.u8(0)

        if self.version == 8:
            stream.add(local_info)
        else:
            stream.add(local_info.local)

        message = PIAMessage()
        message.protocol_id = self.get_protocol_type()
        message.payload = stream.get()

        self.resender.send(station, message)
Example #3
0
    def generate_browse_reply(self, challenge):
        stream = StreamOut(self.settings)
        stream.add(self.session_info)
        buffer = stream.get()

        stream = StreamOut(self.settings)
        stream.u8(1)  #Packet type
        stream.u32(len(buffer))
        stream.write(buffer)

        if self.settings.get("pia.lan_version") != 0:
            stream.u8(self.settings.get("pia.lan_version"))
            stream.bool(self.settings.get("pia.crypto_enabled"))
            stream.write(challenge)

        return stream.get()