You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-firmware/tools/check_bootloader

39 lines
1.1 KiB

#!/usr/bin/env python3
import sys
import struct
# bootloader header specification: https://github.com/trezor/trezor-core/blob/master/docs/bootloader.md#bootloader-header
def check_bootloader(filename):
data = open(filename, 'rb').read()
hdr = struct.unpack('<4sIIIBBBBB64s171s', data[:256])
code = data[256:]
magic, hdrlen, expiry, codelen, vmajor, vminor, vpatch, vbuild, sigidx, sig, reserved = hdr
sigidx = tuple([ i + 1 for i in range(8) if sigidx & (1 << i) ])
print('magic :', magic)
assert magic == b'TRZB'
print('hdrlen :', hdrlen)
assert hdrlen == 256
print('expiry :', expiry)
print('codelen :', codelen)
print('vmajor :', vmajor)
print('vminor :', vminor)
print('vpatch :', vpatch)
print('vbuild :', vbuild)
print('sigidx :', sigidx)
print('sig :', sig)
assert reserved == 171 * b'\x00'
assert codelen == 64*1024
assert codelen == len(code)
def main():
if len(sys.argv) < 2:
print('Usage: check_bootloader bootloader.bin')
return 1
fn = sys.argv[1]
check_bootloader(fn)
main()