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)
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)
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()