Skip to content

fix(Crypto): Prevent stdin password prompt when loading protected key (#4627)#5128

Merged
matejk merged 2 commits intomainfrom
fix/4627-evppkey-password-prompt
Dec 18, 2025
Merged

fix(Crypto): Prevent stdin password prompt when loading protected key (#4627)#5128
matejk merged 2 commits intomainfrom
fix/4627-evppkey-password-prompt

Conversation

@matejk
Copy link
Copy Markdown
Contributor

@matejk matejk commented Dec 18, 2025

Summary

Fixes #4627 - When loading a passphrase-protected private key with EVPPKey using an empty password, OpenSSL would prompt stdin for the password. This is unsuitable for library code.

Supersedes #4799 with a more complete fix that works on both macOS and Linux.

Root Cause

The original code set both the password callback (pCB) and password data (pPassword) to NULL when password was empty:

pem_password_cb* pCB = pass.empty() ? nullptr : &passCB;
void* pPassword = pass.empty() ? nullptr : pass.c_str();

On Linux, when the callback is NULL, OpenSSL ignores pPassword entirely and falls back to prompting stdin.

Fix

Always provide the callback, even when password is empty:

pem_password_cb* pCB = &passCB;
void* pPassword = const_cast<char*>(pass.c_str());

The passCB function already handles empty passwords correctly - it returns 0 when password length is 0, which tells OpenSSL "no password provided" and causes a proper error instead of stdin prompt.

Changes

  • EVPPKey.h: Always use password callback in both file-based and stream-based key loading
  • Added test testECEVPLoadKeyWrongPassword to verify empty/wrong password throws exception

@matejk matejk force-pushed the fix/4627-evppkey-password-prompt branch from 9213fae to 051cc84 Compare December 18, 2025 13:23
@matejk matejk merged commit 5bbd542 into main Dec 18, 2025
86 checks passed
@matejk matejk deleted the fix/4627-evppkey-password-prompt branch December 18, 2025 16:25
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.

Attempting to load a passphrase-protected key should not prompt cin

1 participant