#!/usr/bin/env python3
import sys
import struct

def align(num, alignment):
    if num % alignment != 0:
        num += (alignment - num % alignment)
    return num


def process_file(input, output):
    with open(input, 'rb') as fin:
        content = bytearray(fin.read())

    align_value = 512
    padded_length = align(len(content), align_value)
    # pad file to actual length
    content += b'\x00' * (padded_length - len(content))

    struct_format = '<L8sLL'
    (instruction, magic, checksum, length) = struct.unpack_from(struct_format, content)

    if magic != b'eGON.BT0':
        print("Magic is invalid:", magic)
        return 2

    checksum = 0x5F0A6C39
    length = align(length, align_value)

    struct.pack_into(struct_format, content, 0, instruction, magic, checksum, length)

    checksum = 0
    for i in range(0, length, 4):
        (n, ) = struct.unpack_from('<L', content, i)
        checksum += n
        checksum %= 4294967296

    struct.pack_into(struct_format, content, 0, instruction, magic, checksum, length)

    with open(output, 'wb') as fout:
        fout.write(content)
    return 0

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Usage: mksunxi.py input.bin output.bin")
        exit(1)
    exit(process_file(sys.argv[1], sys.argv[2]))
