Skip to content

PS-11106 [9.7] Component Percona keyring encrypted file#6027

Open
catalinbp wants to merge 2 commits into
percona:9.7from
catalinbp:PS-11106-9.7
Open

PS-11106 [9.7] Component Percona keyring encrypted file#6027
catalinbp wants to merge 2 commits into
percona:9.7from
catalinbp:PS-11106-9.7

Conversation

@catalinbp

@catalinbp catalinbp commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

PS-11106 [9.7] Component Percona keyring encrypted file [1, plugin]

  • New PBKDF2-based encrypt/decrypt API (aes.cc): Added
    aes_encrypt_pbkdf2 and aes_decrypt_pbkdf2 functions that derive a
    256-bit AES key from a password using PKCS5_PBKDF2_HMAC (SHA-256).
    Refactored the internal EVP encrypt/decrypt logic into private helpers
    to avoid code duplication.
  • Encrypted backend (backend.cc): Renamed Keyring_file_backend to
    Keyring_encrypted_file_backend and wired in password-based encryption.
    On write, generates a random salt, IV, and iteration count; on read,
    parses v1 on-disk header ([version:1][salt:32][iterations:4
    BE][iv:16][ciphertext]) and decrypts before JSON parsing.
  • Password config options (config.cc): The component configuration now
    requires exactly one of password (inline) or password_file (path to a
    file containing the password). Validation errors are emitted for
    missing, empty, or conflicting combinations. The
    keyring_component_status table reports or for the password
    field.

- created component_percona_keyring_encrypted_file based on
component_keyring_file
- cmake flag: WITH_COMPONENT_PERCONA_KEYRING_ENCRYPTED_FILE
@catalinbp catalinbp changed the title Ps 11106 9.7 PS-11106 [9.7] Component Percona keyring encrypted file Jun 23, 2026
@catalinbp catalinbp requested a review from jankowsk June 23, 2026 05:48
- New PBKDF2-based encrypt/decrypt API (aes.cc): Added
aes_encrypt_pbkdf2 and aes_decrypt_pbkdf2 functions that derive a
256-bit AES key from a password using PKCS5_PBKDF2_HMAC (SHA-256).
Refactored the internal EVP encrypt/decrypt logic into private helpers
to avoid code duplication.
- Encrypted backend (backend.cc): Renamed Keyring_file_backend to
Keyring_encrypted_file_backend and wired in password-based encryption.
On write, generates a random salt, IV, and iteration count; on read,
parses v1 on-disk header ([version:1][salt:32][iterations:4
BE][iv:16][ciphertext]) and decrypts before JSON parsing.
- Password config options (config.cc): The component configuration now
requires exactly one of password (inline) or password_file (path to a
file containing the password). Validation errors are emitted for
missing, empty, or conflicting combinations. The
keyring_component_status table reports <SET> or <NONE> for the password
field.

@jankowsk jankowsk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM providing the code is the same as for 8.4.
If possible, after squashing for 8.4 please use the same commit cherry-picked.

@catalinbp

Copy link
Copy Markdown
Contributor Author

@jankowsk 9.7 is not identical to 8.4 as the base plugin had been slightly modified (mostly namespace was changed and they introduced option_usage.{cc,h‎} in keyring_file so I've included it here as well

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants