@@ -443,14 +443,23 @@ def ecies_hkdf(self, enckey, plainkey, hmac_sha_alg):
443
443
else :
444
444
newpk = X25519PrivateKey .generate ()
445
445
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)
446
451
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 ,
448
453
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 ]),
450
457
modes .CTR (bytes ([0 ] * 16 )),
451
458
backend = default_backend ()).encryptor ()
452
459
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 ,
454
463
backend = default_backend ())
455
464
mac .update (cipherkey )
456
465
ciphermac = mac .finalize ()
0 commit comments