From bf47b71b787657eca1d489f92517aa60c9a38008 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 4 Aug 2016 00:21:05 +0300 Subject: [PATCH] esp8266/makeimg.py: Append md5 hash to the generated binary. md5 is calculated over the entire file, except first 4 bytes, which contain flash parameters and may be changed by flashing tool or MicroPython flash auto-config. --- esp8266/makeimg.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/esp8266/makeimg.py b/esp8266/makeimg.py index 834f778c84..091854fa4d 100644 --- a/esp8266/makeimg.py +++ b/esp8266/makeimg.py @@ -1,15 +1,21 @@ import sys import struct +import hashlib SEGS_MAX_SIZE = 0x9000 assert len(sys.argv) == 4 +md5 = hashlib.md5() + with open(sys.argv[3], 'wb') as fout: with open(sys.argv[1], 'rb') as f: data_flash = f.read() fout.write(data_flash) + # First 4 bytes include flash size, etc. which may be changed + # by esptool.py, etc. + md5.update(data_flash[4:]) print('flash ', len(data_flash)) with open(sys.argv[2], 'rb') as f: @@ -18,10 +24,17 @@ with open(sys.argv[3], 'wb') as fout: pad = b'\xff' * (SEGS_MAX_SIZE - len(data_flash)) assert len(pad) >= 4 fout.write(pad[:-4]) - fout.write(struct.pack("I", SEGS_MAX_SIZE + len(data_rom))) + md5.update(pad[:-4]) + len_data = struct.pack("I", SEGS_MAX_SIZE + len(data_rom)) + fout.write(len_data) + md5.update(len_data) print('padding ', len(pad)) fout.write(data_rom) + md5.update(data_rom) print('irom0text', len(data_rom)) + fout.write(md5.digest()) + print('total ', SEGS_MAX_SIZE + len(data_rom)) + print('md5 ', md5.hexdigest())