Properly initialize AEAD cipher flags in OpenSSL backend#20853
Properly initialize AEAD cipher flags in OpenSSL backend#20853jordikroon wants to merge 6 commits intophp:masterfrom
Conversation
2cff66b to
7de1357
Compare
|
Please review commits 1 by 1 since I am not sure if the change from The second commit allows AAD to be null since it behaves differently than when only an empty string is given. The matches other implementations like |
bukka
left a comment
There was a problem hiding this comment.
This looks reasonable. Just some minor things really.
bukka
left a comment
There was a problem hiding this comment.
It looks good now. It would be just nice to convert the test so it's consistent with other AEAD tests.
|
Note that openssl supports aes-gcm-siv since v3.2 which is improved version of aes-siv. Is it possible to add support for aes-gcm-siv here in advance? |
|
The code looks good but it needs rebase... |
|
@bukka This has been rebased |
Extends the AEAD switch in php_openssl_load_cipher_mode() to also recognize EVP_CIPH_GCM_SIV_MODE alongside the SIV/OCB cases added by phpGH-20853. GCM-SIV (OpenSSL >= 3.2, RFC 8452) uses the standard EVP_CTRL_AEAD_*_TAG controls and falls into the same arm. The existing aad_supports_vector = (cipher_mode == EVP_CIPH_SIV_MODE) check keeps that flag false for GCM-SIV, since RFC 8452 takes a single AAD input rather than vector AAD like RFC 5297 SIV. LibreSSL does not currently define EVP_CIPH_GCM_SIV_MODE, hence the #ifdef guard. Tests: - cipher_tests.inc gains aes-256-gcm-siv vectors from RFC 8452 Appendix C.2 (empty plaintext, 8-byte plaintext with and without AAD). - openssl_encrypt_gcm_siv.phpt and openssl_decrypt_gcm_siv.phpt consume those vectors, mirroring the SIV equivalents, and cover the missing-tag and tampering failure paths.
Fixes #20851
Add support for AEAD ciphers like AES-SIV by detecting and initializing AEAD flags during cipher mode loading.
Includes test case for AES-256-SIV encryption/decryption roundtrip.