Fixed delta manifest header alignment

pull/171/head
Daniele Lacamera 2022-01-17 13:34:54 +01:00
parent c059eba452
commit 5be0b42c8d
2 changed files with 14 additions and 7 deletions

View File

@ -10,7 +10,7 @@ endif
ifeq ($(SIGN),NONE)
SIGN_OPTIONS+=--no-sign
PRIVATE_KEY=
STACK_USAGE=1024
STACK_USAGE=1180
CFLAGS+=-DWOLFBOOT_NO_SIGN
endif
@ -57,7 +57,7 @@ ifeq ($(SIGN),ED25519)
./lib/wolfssl/wolfcrypt/src/fe_low_mem.o
PUBLIC_KEY_OBJS=./src/ed25519_pub_key.o
CFLAGS+=-D"WOLFBOOT_SIGN_ED25519"
STACK_USAGE?=1024
STACK_USAGE?=1180
endif
ifeq ($(SIGN),ED448)

View File

@ -90,8 +90,8 @@ def make_header(image_file, fw_version, extra_fields=[]):
header += struct.pack('<L', fw_version)
# Four pad bytes, so timestamp is aligned
header += struct.pack('BB', 0xFF, 0xFF)
header += struct.pack('BB', 0xFF, 0xFF)
header += struct.pack('BB', HDR_PADDING, HDR_PADDING)
header += struct.pack('BB', HDR_PADDING, HDR_PADDING)
# Timestamp field
header += struct.pack('<HH', HDR_TIMESTAMP, HDR_TIMESTAMP_LEN)
@ -123,13 +123,20 @@ def make_header(image_file, fw_version, extra_fields=[]):
for t in extra_fields:
tag = t[0]
sz = t[1]
if sz == 4:
while (len(header) % 4) != 0:
header += struct.pack('B', HDR_PADDING)
elif sz == 8:
while (len(header) % 8) != 4:
header += struct.pack('B', HDR_PADDING)
payload = t[2]
header += struct.pack('<HH', tag, sz)
header += payload
# Pad bytes. Sha-3 field requires 8-byte alignment
while (len(header) % 8) != 4:
header += struct.pack('B', 0xFF)
header += struct.pack('B', HDR_PADDING)
print("Calculating %s digest..." % hash_algo)
@ -462,7 +469,7 @@ outfile = open(output_image_file, 'wb')
outfile.write(header)
sz = len(header)
while sz < WOLFBOOT_HEADER_SIZE:
outfile.write(struct.pack('B',0xFF))
outfile.write(struct.pack('B',HDR_PADDING))
sz += 1
infile = open(image_file, 'rb')
while True:
@ -505,7 +512,7 @@ if (delta):
outfile.write(header)
sz = len(header)
while sz < WOLFBOOT_HEADER_SIZE:
outfile.write(struct.pack('B', 0xFF))
outfile.write(struct.pack('B', HDR_PADDING))
sz += 1
infile = open(tmp_outfile, 'rb')
while True: