@@ -593,15 +593,31 @@ ecdsa_do_finish(EC_KEY *ec)
593593#ifdef WINDOWS
594594
595595static void
596- wrap_key (struct sshkey * k )
596+ wrap_key (struct sshkey * k )
597597{
598- if (k -> type == KEY_RSA )
599- RSA_set_method (k -> pkey , helper_rsa );
598+ RSA * rsa = NULL ;
599+ EC_KEY * ecdsa = NULL ;
600+
601+ if (k -> type == KEY_RSA ) {
602+ if ((rsa = EVP_PKEY_get1_RSA (k -> pkey )) == NULL )
603+ fatal_f ("no RSA key" );
604+ if (RSA_set_method (rsa , helper_rsa ) != 1 )
605+ fatal_f ("RSA_set_method failed" );
606+ if (EVP_PKEY_set1_RSA (k -> pkey , rsa ) != 1 )
607+ fatal_f ("EVP_PKEY_set1_RSA failed" );
608+ RSA_free (rsa );
600609#if defined(OPENSSL_HAS_ECC ) && defined(HAVE_EC_KEY_METHOD_NEW )
601- else if (k -> type == KEY_ECDSA )
602- EC_KEY_set_method (k - > pkey , helper_ecdsa );
610+ }
611+ else if (k -> type == KEY_ECDSA ) {
612+ if ((ecdsa = EVP_PKEY_get1_EC_KEY (k -> pkey )) == NULL )
613+ fatal_f ("no ECDSA key" );
614+ if (EC_KEY_set_method (ecdsa , helper_ecdsa ) != 1 )
615+ fatal_f ("EC_KEY_set_method failed" );
616+ if (EVP_PKEY_set1_EC_KEY (k -> pkey , ecdsa ) != 1 )
617+ fatal_f ("EVP_PKEY_set1_EC_KEY failed" );
618+ EC_KEY_free (ecdsa );
603619#endif /* OPENSSL_HAS_ECC && HAVE_EC_KEY_METHOD_NEW */
604- else
620+ } else
605621 fatal_f ("unknown key type" );
606622}
607623
0 commit comments