@@ -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 );
@@ -527,14 +530,18 @@ SignBase::Error Verify::VerifyFinal(const ManagedEVPPKey& pkey,
527530 return kSignPublicKey ;
528531
529532 EVPKeyCtxPointer pkctx (EVP_PKEY_CTX_new (pkey.get (), nullptr ));
530- if (pkctx &&
531- EVP_PKEY_verify_init (pkctx.get ()) > 0 &&
532- ApplyRSAOptions (pkey, pkctx.get (), padding, saltlen) &&
533- EVP_PKEY_CTX_set_signature_md (pkctx.get (),
534- EVP_MD_CTX_md (mdctx.get ())) > 0 ) {
535- const unsigned char * s = sig.data <unsigned char >();
536- const int r = EVP_PKEY_verify (pkctx.get (), s, sig.size (), m, m_len);
537- *verify_result = r == 1 ;
533+ if (pkctx) {
534+ const int init_ret = EVP_PKEY_verify_init (pkctx.get ());
535+ if (init_ret == -2 ) {
536+ return kSignPublicKey ;
537+ }
538+ if (init_ret > 0 && ApplyRSAOptions (pkey, pkctx.get (), padding, saltlen) &&
539+ EVP_PKEY_CTX_set_signature_md (pkctx.get (), EVP_MD_CTX_md (mdctx.get ())) >
540+ 0 ) {
541+ const unsigned char * s = sig.data <unsigned char >();
542+ const int r = EVP_PKEY_verify (pkctx.get (), s, sig.size (), m, m_len);
543+ *verify_result = r == 1 ;
544+ }
538545 }
539546
540547 return kSignOk ;
0 commit comments