示例#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))