memset calls used to clear sensitive cryptographic material can be optimized away by the compiler as “dead stores” when the buffer is not used afterward (e.g., before return or in destructors).
Replace with memory_cleanse() which uses memory barriers to prevent this optimization, ensuring secrets are actually cleared from memory.
Affected locations:
- key.cpp: Secret key buffer after failed ec_seckey_import_der validation
- aes.cpp: AES-256 key schedules and IVs in destructors
This prevents potential key material leakage in memory after use.
Fix: #31744