blob: 29391c86da3367a082970b168f3ad0dae042fb6a [file]
import hashlib
import os
import shutil
import stat
import sys
BLOCK_SIZE = 256 * 1024
def create_exe_zip(preamble_path, zip_path, output_path):
sha256_hash = hashlib.sha256()
with open(zip_path, "rb", buffering=BLOCK_SIZE) as f:
for byte_block in iter(lambda: f.read(BLOCK_SIZE), b""):
sha256_hash.update(byte_block)
zip_hash = sha256_hash.hexdigest()
with open(preamble_path, "rb") as f:
preamble_content = f.read()
preamble_content = preamble_content.replace(b"%ZIP_HASH%", zip_hash.encode("utf-8"))
with open(output_path, "wb") as out_f:
out_f.write(preamble_content)
with open(zip_path, "rb") as zip_f:
shutil.copyfileobj(zip_f, out_f, length=BLOCK_SIZE)
st = os.stat(output_path)
os.chmod(output_path, st.st_mode | stat.S_IEXEC)
def main():
if len(sys.argv) != 4:
print(f"Usage: {sys.argv[0]} <preamble> <zip> <output>", file=sys.stderr)
sys.exit(1)
create_exe_zip(sys.argv[1], sys.argv[2], sys.argv[3])
if __name__ == "__main__":
sys.exit(main())