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