parent
4c8d3e4a35
commit
2d7c6b0c34
@ -0,0 +1,26 @@
|
||||
#include STM32_HAL_H
|
||||
|
||||
// ### from main.c
|
||||
|
||||
void __attribute__((noreturn)) __fatal_error(const char *msg) {
|
||||
for (volatile uint32_t delay = 0; delay < 10000000; delay++) {
|
||||
}
|
||||
// TODO: printf("FATAL ERROR: %s\n", msg);
|
||||
for (;;) {
|
||||
__WFI();
|
||||
}
|
||||
}
|
||||
|
||||
void nlr_jump_fail(void *val) {
|
||||
__fatal_error("FATAL: uncaught exception");
|
||||
}
|
||||
|
||||
// ### from stm32_it.c
|
||||
|
||||
void SysTick_Handler(void) {
|
||||
extern uint32_t uwTick;
|
||||
uwTick += 1;
|
||||
SysTick->CTRL;
|
||||
}
|
||||
|
||||
// ###
|
@ -0,0 +1,38 @@
|
||||
#!/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()
|
@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
|
||||
|
||||
def process_firmware(filename):
|
||||
data = open(filename, 'rb').read()
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print('Usage: check_firmware firmware.bin')
|
||||
return 1
|
||||
fn = sys.argv[1]
|
||||
process_firmware(fn)
|
||||
|
||||
|
||||
main()
|
Loading…
Reference in new issue