@ -204,8 +204,6 @@ static void crypto_lock_cb(int mode, int n, const char* file, int line) {
}
// This callback is used by OpenSSL when it needs to query for the passphrase
// which may be used for encrypted PEM structures.
static int PasswordCallback ( char * buf , int size , int rwflag , void * u ) {
if ( u ) {
size_t buflen = static_cast < size_t > ( size ) ;
@ -219,6 +217,16 @@ static int PasswordCallback(char *buf, int size, int rwflag, void *u) {
}
// This callback is used to avoid the default passphrase callback in OpenSSL
// which will typically prompt for the passphrase. The prompting is designed
// for the OpenSSL CLI, but works poorly for Node.js because it involves
// synchronous interaction with the controlling terminal, something we never
// want, and use this function to avoid it.
static int NoPasswordCallback ( char * buf , int size , int rwflag , void * u ) {
return 0 ;
}
void ThrowCryptoError ( Environment * env ,
unsigned long err , // NOLINT(runtime/int)
const char * default_message = nullptr ) {
@ -588,7 +596,7 @@ int SSL_CTX_use_certificate_chain(SSL_CTX* ctx,
// that we are interested in
ERR_clear_error ( ) ;
x = PEM_read_bio_X509_AUX ( in , nullptr , PasswordCallback , nullptr ) ;
x = PEM_read_bio_X509_AUX ( in , nullptr , No PasswordCallback, nullptr ) ;
if ( x = = nullptr ) {
SSLerr ( SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE , ERR_R_PEM_LIB ) ;
@ -606,7 +614,10 @@ int SSL_CTX_use_certificate_chain(SSL_CTX* ctx,
goto done ;
}
while ( ( extra = PEM_read_bio_X509 ( in , nullptr , PasswordCallback , nullptr ) ) ) {
while ( ( extra = PEM_read_bio_X509 ( in ,
nullptr ,
NoPasswordCallback ,
nullptr ) ) ) {
if ( sk_X509_push ( extra_certs , extra ) )
continue ;
@ -702,7 +713,7 @@ static X509_STORE* NewRootCertStore() {
if ( root_certs_vector . empty ( ) ) {
for ( size_t i = 0 ; i < arraysize ( root_certs ) ; i + + ) {
BIO * bp = NodeBIO : : NewFixed ( root_certs [ i ] , strlen ( root_certs [ i ] ) ) ;
X509 * x509 = PEM_read_bio_X509 ( bp , nullptr , PasswordCallback , nullptr ) ;
X509 * x509 = PEM_read_bio_X509 ( bp , nullptr , No PasswordCallback, nullptr ) ;
BIO_free ( bp ) ;
// Parse errors from the built-in roots are fatal.
@ -745,7 +756,7 @@ void SecureContext::AddCACert(const FunctionCallbackInfo<Value>& args) {
X509_STORE * cert_store = SSL_CTX_get_cert_store ( sc - > ctx_ ) ;
while ( X509 * x509 =
PEM_read_bio_X509 ( bio , nullptr , PasswordCallback , nullptr ) ) {
PEM_read_bio_X509 ( bio , nullptr , No PasswordCallback, nullptr ) ) {
if ( cert_store = = root_cert_store ) {
cert_store = NewRootCertStore ( ) ;
SSL_CTX_set_cert_store ( sc - > ctx_ , cert_store ) ;
@ -777,7 +788,7 @@ void SecureContext::AddCRL(const FunctionCallbackInfo<Value>& args) {
return ;
X509_CRL * crl =
PEM_read_bio_X509_CRL ( bio , nullptr , PasswordCallback , nullptr ) ;
PEM_read_bio_X509_CRL ( bio , nullptr , No PasswordCallback, nullptr ) ;
if ( crl = = nullptr ) {
BIO_free_all ( bio ) ;
@ -816,7 +827,7 @@ static unsigned long AddCertsFromFile( // NOLINT(runtime/int)
}
while ( X509 * x509 =
PEM_read_bio_X509 ( bio , nullptr , PasswordCallback , nullptr ) ) {
PEM_read_bio_X509 ( bio , nullptr , No PasswordCallback, nullptr ) ) {
X509_STORE_add_cert ( store , x509 ) ;
X509_free ( x509 ) ;
}
@ -4295,7 +4306,7 @@ SignBase::Error Verify::VerifyFinal(const char* key_pem,
// Split this out into a separate function once we have more than one
// consumer of public keys.
if ( strncmp ( key_pem , PUBLIC_KEY_PFX , PUBLIC_KEY_PFX_LEN ) = = 0 ) {
pkey = PEM_read_bio_PUBKEY ( bp , nullptr , PasswordCallback , nullptr ) ;
pkey = PEM_read_bio_PUBKEY ( bp , nullptr , No PasswordCallback, nullptr ) ;
if ( pkey = = nullptr )
goto exit ;
} else if ( strncmp ( key_pem , PUBRSA_KEY_PFX , PUBRSA_KEY_PFX_LEN ) = = 0 ) {
@ -4311,7 +4322,7 @@ SignBase::Error Verify::VerifyFinal(const char* key_pem,
goto exit ;
} else {
// X.509 fallback
x509 = PEM_read_bio_X509 ( bp , nullptr , PasswordCallback , nullptr ) ;
x509 = PEM_read_bio_X509 ( bp , nullptr , No PasswordCallback, nullptr ) ;
if ( x509 = = nullptr )
goto exit ;
@ -4429,7 +4440,7 @@ bool PublicKeyCipher::Cipher(const char* key_pem,
goto exit ;
} else if ( operation = = kPublic & &
strncmp ( key_pem , CERTIFICATE_PFX , CERTIFICATE_PFX_LEN ) = = 0 ) {
x509 = PEM_read_bio_X509 ( bp , nullptr , PasswordCallback , nullptr ) ;
x509 = PEM_read_bio_X509 ( bp , nullptr , No PasswordCallback, nullptr ) ;
if ( x509 = = nullptr )
goto exit ;