mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
esp_hmac_calculate() enabled and reset the Digital Signature (DS) peripheral, but HMAC has no dependency on DS (the dependency runs the other way: a DS operation uses HMAC/SHA). The DS peripheral drives the RSA (MPI) accelerator internally, so pulsing the DS reset also resets the RSA datapath. This coupling exists on every target that has the DS peripheral: the MPI reset routine itself clears the DS reset "otherwise RSA is held in reset". esp_hmac_calculate() holds only the HMAC and SHA/AES locks, not the MPI lock, so it can corrupt a concurrent RSA/MPI operation. On multi-core targets (e.g. ESP32-P4, ESP32-S31, ESP32-S3) an HMAC on one core resets an RSA op running on another core; on single-core targets (e.g. ESP32-C5) the same corruption happens when an HMAC preempts an in-flight RSA op. The result is a wrong RSA result or a crash in the computation. Remove the DS peripheral enable/reset from the HMAC path. SHA, which HMAC depends on, is enabled independently, so the HMAC output is unchanged. This also drops a few redundant register writes.