Ejemplo n.º 1
0
    def _prepare_index(self):
        # Add space for file size
        self.index_offset += 8

        # Space for num_signatures & num_additional_sections
        self.index_offset += 4 + 4

        # Write the magic and placeholder for the index
        self.fileobj.write(b"MAR1" + packint(self.index_offset))

        # Write placeholder for file size
        self.fileobj.write(struct.pack(">Q", 0))

        # Write num_signatures
        self.fileobj.write(packint(len(self.signature_versions)))

        # Write placeholder signatures
        for algo_id, keyfile in self.signature_versions:
            sig = MarSignature(algo_id, keyfile)
            sig._offset = self.index_offset
            self.index_offset += sig.size
            self.signatures.append(sig)
            # algoid
            self.fileobj.write(packint(algo_id))
            # numbytes
            self.fileobj.write(packint(sig.sigsize))
            # space for signature
            self.fileobj.write("\0" * sig.sigsize)

        # Write placeholder for number of additional sections
        self.fileobj.write(packint(0))
Ejemplo n.º 2
0
    def _prepare_index(self):
        # Add space for file size
        self.index_offset += 8

        # Space for num_signatures & num_additional_sections
        self.index_offset += 4 + 4

        # Write the magic and placeholder for the index
        self.fileobj.write(b"MAR1" + packint(self.index_offset))

        # Write placeholder for file size
        self.fileobj.write(struct.pack(">Q", 0))

        # Write num_signatures
        self.fileobj.write(packint(len(self.signature_versions)))

        # Write placeholder signatures
        for algo_id, keyfile in self.signature_versions:
            sig = MarSignature(algo_id, keyfile)
            sig._offset = self.index_offset
            self.index_offset += sig.size
            self.signatures.append(sig)
            # algoid
            self.fileobj.write(packint(algo_id))
            # numbytes
            self.fileobj.write(packint(sig.sigsize))
            # space for signature
            self.fileobj.write("\0" * sig.sigsize)

        # Write placeholder for number of additional sections
        self.fileobj.write(packint(0))
Ejemplo n.º 3
0
 def write(self, fp):
     if self.block_id == 1:
         mar_channel = self.info['MARChannelName'].encode('ascii')
         product_version = self.info['ProductVersion'].encode('ascii')
         data = mar_channel + b"\x00" + product_version + b"\x00"
         self.size = len(data) + 8
         fp.write(packint(self.size))
         fp.write(packint(self.block_id))
         fp.write(data)
     else:
         raise ValueError("Unsupported additional info section: %s" %
                          self.block_id)
Ejemplo n.º 4
0
 def write(self, fp):
     if self.block_id == 1:
         mar_channel = self.info['MARChannelName'].encode('ascii')
         product_version = self.info['ProductVersion'].encode('ascii')
         data = mar_channel + b"\x00" + product_version + b"\x00"
         self.size = len(data) + 8
         fp.write(packint(self.size))
         fp.write(packint(self.block_id))
         fp.write(data)
     else:
         raise ValueError("Unsupported additional info section: %s" %
                          self.block_id)
Ejemplo n.º 5
0
    def _write_index(self):
        """Writes the index of all members at the end of the file"""
        log.debug("rewriting index at %i", self.index_offset + 4)
        self.fileobj.seek(self.index_offset + 4)
        index_size = 0
        for m in self.members:
            member_bytes = m.to_bytes()
            index_size += len(member_bytes)

        for m in self.members:
            member_bytes = m.to_bytes()
            self.fileobj.write(member_bytes)
        self.fileobj.seek(self.index_offset)
        self.fileobj.write(packint(index_size))

        # Update the offset to the index
        self.fileobj.seek(4)
        self.fileobj.write(packint(self.index_offset))
Ejemplo n.º 6
0
    def _write_index(self):
        """Writes the index of all members at the end of the file"""
        log.debug("rewriting index at %i", self.index_offset + 4)
        self.fileobj.seek(self.index_offset + 4)
        index_size = 0
        for m in self.members:
            member_bytes = m.to_bytes()
            index_size += len(member_bytes)

        for m in self.members:
            member_bytes = m.to_bytes()
            self.fileobj.write(member_bytes)
        self.fileobj.seek(self.index_offset)
        self.fileobj.write(packint(index_size))

        # Update the offset to the index
        self.fileobj.seek(4)
        self.fileobj.write(packint(self.index_offset))