def packet_content_to_packet_bytes(version, type_, data): data_length = len(data) packet_type = type_ tag = 0x80 result = bytearray() if version >= 4: # "An implementation MAY use Partial Body Lengths for data packets, be # they literal, compressed, or encrypted." remaining = data_length offset = 0 while remaining: allow_partial = type_ in (8, 9, 11, 18) tag += 0x40 + packet_type result = bytearray([tag]) packet_length_bytes, remaining = utils.new_packet_length_to_bytes( data_length, allow_partial) result.extend(packet_length_bytes) result.extend(data[offset:-remaining]) offset = data_length - remaining else: tag += (packet_type << 2) result = bytearray([tag]) result.extend(utils.old_packet_length_to_bytes(data_length)) result.extend(data) return result
def __bytes__(self): data = self.content result = bytearray() # +1 for sub type result.extend(utils.new_packet_length_to_bytes( len(data) + 1, False)[0]) result.append(self.sub_type) result.extend(data) return bytes(result)
def subpacket_to_bytes(subpacket): data_len = len(subpacket['data']) + 1 # For the type result = bytearray() packet_length_bytes, _ = utils.new_packet_length_to_bytes(data_len, False) result.extend(packet_length_bytes) raw = subpacket['type'] + (0x80 if subpacket['critical'] else 0x00) result.append(raw) result.extend(subpacket['data']) return result
def __bytes__(self): data = self.content result = bytearray() # +1 for sub type result.extend( utils.new_packet_length_to_bytes(len(data) + 1, False)[0]) result.append(self.sub_type) result.extend(data) return bytes(result)
def __bytes__(self): data = self.content data_len = len(data) + 1 # For the type result = bytearray() packet_length_bytes, _ = utils.new_packet_length_to_bytes(data_len, False) result.extend(packet_length_bytes) raw = self.type + (0x80 if self.critical else 0x00) result.append(raw) result.extend(data) return bytes(result)
def user_attribute_to_bytes(packet): result = bytearray() for subpacket in packet['subpackets']: sub_data = user_attribute_subpacket_to_bytes(subpacket) packet_length_bytes, _ = utils.new_packet_length_to_bytes( len(sub_data), allow_partial=False) result.extend(packet_length_bytes) result.append(subpacket['subtype']) result.extend(sub_data) return result
def __bytes__(self): data = self.content data_len = len(data) + 1 # For the type result = bytearray() packet_length_bytes, _ = \ utils.new_packet_length_to_bytes(data_len, False) result.extend(packet_length_bytes) raw = self.type + (0x80 if self.critical else 0x00) result.append(raw) result.extend(data) return bytes(result)