@@ -443,14 +443,23 @@ def ecies_hkdf(self, enckey, plainkey, hmac_sha_alg):
443443 else :
444444 newpk = X25519PrivateKey .generate ()
445445 shared = newpk .exchange (enckey ._get_public ())
446+
447+ # Detect AES key length from plainkey size
448+ key_len = len (plainkey ) # 16 for AES-128, 32 for AES-256
449+
450+ # Generate derived key with appropriate length (key_len + 32 bytes for HMAC)
446451 derived_key = HKDF (
447- algorithm = hmac_sha_alg , length = 16 + hmac_sha_alg .digest_size , salt = None ,
452+ algorithm = hmac_sha_alg , length = key_len + hmac_sha_alg .digest_size , salt = None ,
448453 info = b'MCUBoot_ECIES_v1' , backend = default_backend ()).derive (shared )
449- encryptor = Cipher (algorithms .AES (derived_key [:16 ]),
454+
455+ # Use appropriate key length for AES encryption
456+ encryptor = Cipher (algorithms .AES (derived_key [:key_len ]),
450457 modes .CTR (bytes ([0 ] * 16 )),
451458 backend = default_backend ()).encryptor ()
452459 cipherkey = encryptor .update (plainkey ) + encryptor .finalize ()
453- mac = hmac .HMAC (derived_key [16 :], hmac_sha_alg ,
460+
461+ # Use remaining bytes for HMAC (after the AES key)
462+ mac = hmac .HMAC (derived_key [key_len :], hmac_sha_alg ,
454463 backend = default_backend ())
455464 mac .update (cipherkey )
456465 ciphermac = mac .finalize ()
0 commit comments