@@ -92,12 +92,15 @@ std::unique_ptr<BackingStore> Node_SignFinal(Environment* env,
9292 sig = ArrayBuffer::NewBackingStore (env->isolate (), sig_len);
9393 }
9494 EVPKeyCtxPointer pkctx (EVP_PKEY_CTX_new (pkey.get (), nullptr ));
95- if (pkctx &&
96- EVP_PKEY_sign_init (pkctx.get ()) &&
95+ if (pkctx && EVP_PKEY_sign_init (pkctx.get ()) > 0 &&
9796 ApplyRSAOptions (pkey, pkctx.get (), padding, pss_salt_len) &&
98- EVP_PKEY_CTX_set_signature_md (pkctx.get (), EVP_MD_CTX_md (mdctx.get ())) &&
99- EVP_PKEY_sign (pkctx.get (), static_cast <unsigned char *>(sig->Data ()),
100- &sig_len, m, m_len)) {
97+ EVP_PKEY_CTX_set_signature_md (pkctx.get (), EVP_MD_CTX_md (mdctx.get ())) >
98+ 0 &&
99+ EVP_PKEY_sign (pkctx.get (),
100+ static_cast <unsigned char *>(sig->Data ()),
101+ &sig_len,
102+ m,
103+ m_len) > 0 ) {
101104 CHECK_LE (sig_len, sig->ByteLength ());
102105 if (sig_len == 0 )
103106 sig = ArrayBuffer::NewBackingStore (env->isolate (), 0 );
@@ -526,14 +529,18 @@ SignBase::Error Verify::VerifyFinal(const ManagedEVPPKey& pkey,
526529 return kSignPublicKey ;
527530
528531 EVPKeyCtxPointer pkctx (EVP_PKEY_CTX_new (pkey.get (), nullptr ));
529- if (pkctx &&
530- EVP_PKEY_verify_init (pkctx.get ()) > 0 &&
531- ApplyRSAOptions (pkey, pkctx.get (), padding, saltlen) &&
532- EVP_PKEY_CTX_set_signature_md (pkctx.get (),
533- EVP_MD_CTX_md (mdctx.get ())) > 0 ) {
534- const unsigned char * s = sig.data <unsigned char >();
535- const int r = EVP_PKEY_verify (pkctx.get (), s, sig.size (), m, m_len);
536- *verify_result = r == 1 ;
532+ if (pkctx) {
533+ const int init_ret = EVP_PKEY_verify_init (pkctx.get ());
534+ if (init_ret == -2 ) {
535+ return kSignPublicKey ;
536+ }
537+ if (init_ret > 0 && ApplyRSAOptions (pkey, pkctx.get (), padding, saltlen) &&
538+ EVP_PKEY_CTX_set_signature_md (pkctx.get (), EVP_MD_CTX_md (mdctx.get ())) >
539+ 0 ) {
540+ const unsigned char * s = sig.data <unsigned char >();
541+ const int r = EVP_PKEY_verify (pkctx.get (), s, sig.size (), m, m_len);
542+ *verify_result = r == 1 ;
543+ }
537544 }
538545
539546 return kSignOk ;
0 commit comments