Skip to content

Commit f6a4619

Browse files
committed
imgtool: Temporary workaround for entanglement with TF-M.
Once TF-M stops using internal imgtool APIs this commit should be reverted. Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
1 parent 1902783 commit f6a4619

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

scripts/imgtool/image.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ def ecies_hkdf(self, enckey, plainkey, hmac_sha_alg):
512512
format=PublicFormat.Raw)
513513
return cipherkey, ciphermac, pubk
514514

515-
def create(self, key, public_key_format, enckey, dependencies=None,
515+
def create2(self, key, public_key_format, enckey, dependencies=None,
516516
sw_type=None, custom_tlvs=None, compression_tlvs=None,
517517
compression_type=None, aes_key=None, clear=False,
518518
fixed_sig=None, pub_key=None, vector_to_sign=None,
@@ -792,6 +792,34 @@ def create(self, key, public_key_format, enckey, dependencies=None,
792792

793793
self.check_trailer()
794794

795+
def create(self, key, public_key_format, enckey, dependencies=None,
796+
sw_type=None, custom_tlvs=None, compression_tlvs=None,
797+
compression_type=None, encrypt_keylen=128, clear=False,
798+
fixed_sig=None, pub_key=None, vector_to_sign=None,
799+
user_sha='auto', hmac_sha='auto', is_pure=False, keep_comp_size=False,
800+
dont_encrypt=False):
801+
802+
# With enckey None and dont_encrypt false we still get encrypted image generated
803+
# but without TLV for sharing key; if we do not have enckey and dont_encrypt is
804+
# true, we are not going to encrypt image at all, so it is pointless to generate
805+
# AES key.
806+
if not enckey and dont_encrypt:
807+
plainkey = None
808+
else:
809+
if encrypt_keylen == 256:
810+
encrypt_keylen_bytes = 32
811+
else:
812+
encrypt_keylen_bytes = 16
813+
814+
# No AES plain key and there is request to encrypt, generate random AES key
815+
plainkey = os.urandom(encrypt_keylen_bytes)
816+
817+
return self.create2(key, public_key_format, enckey, dependencies, sw_type,
818+
custom_tlvs, compression_tlvs, compression_type,
819+
plainkey, clear, fixed_sig, pub_key, vector_to_sign,
820+
user_sha, hmac_sha, is_pure, keep_comp_size, dont_encrypt)
821+
822+
795823
def get_struct_endian(self):
796824
return STRUCT_ENDIAN_DICT[self.endian]
797825

scripts/imgtool/main.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ def sign(ctx, key, public_key_format, align, version, pad_sig, header_size,
564564
plainkey = os.urandom(encrypt_keylen_bytes)
565565

566566
if compression in ["lzma2", "lzma2armthumb"]:
567-
img.create(key, public_key_format, enckey, dependencies, boot_record,
567+
img.create2(key, public_key_format, enckey, dependencies, boot_record,
568568
custom_tlvs, compression_tlvs, None, None, clear,
569569
baked_signature, pub_key, vector_to_sign, user_sha=user_sha,
570570
hmac_sha=hmac_sha, is_pure=is_pure, keep_comp_size=False, dont_encrypt=True)
@@ -609,14 +609,14 @@ def sign(ctx, key, public_key_format, align, version, pad_sig, header_size,
609609
keep_comp_size = False
610610
if enckey:
611611
keep_comp_size = True
612-
compressed_img.create(key, public_key_format, enckey,
612+
compressed_img.create2(key, public_key_format, enckey,
613613
dependencies, boot_record, custom_tlvs, compression_tlvs,
614614
compression, plainkey, clear, baked_signature,
615615
pub_key, vector_to_sign, user_sha=user_sha, hmac_sha=hmac_sha,
616616
is_pure=is_pure, keep_comp_size=keep_comp_size)
617617
img = compressed_img
618618
else:
619-
img.create(key, public_key_format, enckey, dependencies, boot_record,
619+
img.create2(key, public_key_format, enckey, dependencies, boot_record,
620620
custom_tlvs, compression_tlvs, None, plainkey, clear,
621621
baked_signature, pub_key, vector_to_sign, user_sha=user_sha,
622622
hmac_sha=hmac_sha, is_pure=is_pure)

0 commit comments

Comments
 (0)