@@ -369,11 +369,11 @@ int php_openssl_parse_config(struct php_x509_request * req, zval * optional_args
369369 if (strcmp (req -> digest_name , "null" ) == 0 ) {
370370 req -> digest = req -> md_alg = EVP_md_null ();
371371 } else {
372- req -> digest = req -> md_alg = EVP_get_digestbyname (req -> digest_name );
372+ req -> digest = req -> md_alg = php_openssl_get_evp_md_by_name (req -> digest_name );
373373 }
374374 }
375375 if (req -> md_alg == NULL ) {
376- req -> md_alg = req -> digest = EVP_sha1 ( );
376+ req -> md_alg = req -> digest = php_openssl_get_evp_md_by_name ( "sha1" );
377377 php_openssl_store_errors ();
378378 }
379379
@@ -417,6 +417,10 @@ void php_openssl_dispose_config(struct php_x509_request * req)
417417 NCONF_free (req -> req_config );
418418 req -> req_config = NULL ;
419419 }
420+ if (req -> md_alg != NULL && req -> md_alg != EVP_md_null ()) {
421+ php_openssl_release_evp_md (req -> md_alg );
422+ }
423+ php_openssl_release_evp_cipher (req -> priv_key_encrypt_cipher );
420424}
421425
422426zend_result php_openssl_load_rand_file (const char * file , int * egdsocket , int * seeded )
@@ -469,92 +473,6 @@ zend_result php_openssl_write_rand_file(const char * file, int egdsocket, int se
469473 return SUCCESS ;
470474}
471475
472- EVP_MD * php_openssl_get_evp_md_from_algo (zend_long algo ) {
473- EVP_MD * mdtype ;
474-
475- switch (algo ) {
476- case OPENSSL_ALGO_SHA1 :
477- mdtype = (EVP_MD * ) EVP_sha1 ();
478- break ;
479- case OPENSSL_ALGO_MD5 :
480- mdtype = (EVP_MD * ) EVP_md5 ();
481- break ;
482- #ifndef OPENSSL_NO_MD4
483- case OPENSSL_ALGO_MD4 :
484- mdtype = (EVP_MD * ) EVP_md4 ();
485- break ;
486- #endif
487- #ifndef OPENSSL_NO_MD2
488- case OPENSSL_ALGO_MD2 :
489- mdtype = (EVP_MD * ) EVP_md2 ();
490- break ;
491- #endif
492- case OPENSSL_ALGO_SHA224 :
493- mdtype = (EVP_MD * ) EVP_sha224 ();
494- break ;
495- case OPENSSL_ALGO_SHA256 :
496- mdtype = (EVP_MD * ) EVP_sha256 ();
497- break ;
498- case OPENSSL_ALGO_SHA384 :
499- mdtype = (EVP_MD * ) EVP_sha384 ();
500- break ;
501- case OPENSSL_ALGO_SHA512 :
502- mdtype = (EVP_MD * ) EVP_sha512 ();
503- break ;
504- #ifndef OPENSSL_NO_RMD160
505- case OPENSSL_ALGO_RMD160 :
506- mdtype = (EVP_MD * ) EVP_ripemd160 ();
507- break ;
508- #endif
509- default :
510- return NULL ;
511- break ;
512- }
513- return mdtype ;
514- }
515-
516- const EVP_CIPHER * php_openssl_get_evp_cipher_from_algo (zend_long algo ) {
517- switch (algo ) {
518- #ifndef OPENSSL_NO_RC2
519- case PHP_OPENSSL_CIPHER_RC2_40 :
520- return EVP_rc2_40_cbc ();
521- break ;
522- case PHP_OPENSSL_CIPHER_RC2_64 :
523- return EVP_rc2_64_cbc ();
524- break ;
525- case PHP_OPENSSL_CIPHER_RC2_128 :
526- return EVP_rc2_cbc ();
527- break ;
528- #endif
529-
530- #ifndef OPENSSL_NO_DES
531- case PHP_OPENSSL_CIPHER_DES :
532- return EVP_des_cbc ();
533- break ;
534- case PHP_OPENSSL_CIPHER_3DES :
535- return EVP_des_ede3_cbc ();
536- break ;
537- #endif
538-
539- #ifndef OPENSSL_NO_AES
540- case PHP_OPENSSL_CIPHER_AES_128_CBC :
541- return EVP_aes_128_cbc ();
542- break ;
543- case PHP_OPENSSL_CIPHER_AES_192_CBC :
544- return EVP_aes_192_cbc ();
545- break ;
546- case PHP_OPENSSL_CIPHER_AES_256_CBC :
547- return EVP_aes_256_cbc ();
548- break ;
549- #endif
550-
551-
552- default :
553- return NULL ;
554- break ;
555- }
556- }
557-
558476void php_openssl_backend_init (void )
559477{
560478#ifdef LIBRESSL_VERSION_NUMBER
@@ -1932,14 +1850,15 @@ PHP_OPENSSL_API zend_string* php_openssl_encrypt(
19321850 PHP_OPENSSL_CHECK_LONG_TO_INT_NULL_RETURN (tag_len , tag_len );
19331851
19341852
1935- cipher_type = EVP_get_cipherbyname (method );
1853+ cipher_type = php_openssl_get_evp_cipher_by_name (method );
19361854 if (!cipher_type ) {
19371855 php_error_docref (NULL , E_WARNING , "Unknown cipher algorithm" );
19381856 return NULL ;
19391857 }
19401858
19411859 cipher_ctx = EVP_CIPHER_CTX_new ();
19421860 if (!cipher_ctx ) {
1861+ php_openssl_release_evp_cipher (cipher_type );
19431862 php_error_docref (NULL , E_WARNING , "Failed to create cipher context" );
19441863 return NULL ;
19451864 }
@@ -1998,6 +1917,7 @@ PHP_OPENSSL_API zend_string* php_openssl_encrypt(
19981917 }
19991918 EVP_CIPHER_CTX_reset (cipher_ctx );
20001919 EVP_CIPHER_CTX_free (cipher_ctx );
1920+ php_openssl_release_evp_cipher (cipher_type );
20011921 return outbuf ;
20021922}
20031923
@@ -2024,14 +1944,15 @@ PHP_OPENSSL_API zend_string* php_openssl_decrypt(
20241944 PHP_OPENSSL_CHECK_SIZE_T_TO_INT_NULL_RETURN (tag_len , tag );
20251945
20261946
2027- cipher_type = EVP_get_cipherbyname (method );
1947+ cipher_type = php_openssl_get_evp_cipher_by_name (method );
20281948 if (!cipher_type ) {
20291949 php_error_docref (NULL , E_WARNING , "Unknown cipher algorithm" );
20301950 return NULL ;
20311951 }
20321952
20331953 cipher_ctx = EVP_CIPHER_CTX_new ();
20341954 if (!cipher_ctx ) {
1955+ php_openssl_release_evp_cipher (cipher_type );
20351956 php_error_docref (NULL , E_WARNING , "Failed to create cipher context" );
20361957 return NULL ;
20371958 }
@@ -2077,14 +1998,15 @@ PHP_OPENSSL_API zend_string* php_openssl_decrypt(
20771998 }
20781999 EVP_CIPHER_CTX_reset (cipher_ctx );
20792000 EVP_CIPHER_CTX_free (cipher_ctx );
2001+ php_openssl_release_evp_cipher (cipher_type );
20802002 return outbuf ;
20812003}
20822004
2083- const EVP_CIPHER * php_openssl_get_evp_cipher_by_name (const char * method )
2005+ const EVP_CIPHER * php_openssl_get_evp_cipher_by_name_with_warning (const char * method )
20842006{
20852007 const EVP_CIPHER * cipher_type ;
20862008
2087- cipher_type = EVP_get_cipherbyname (method );
2009+ cipher_type = php_openssl_get_evp_cipher_by_name (method );
20882010 if (!cipher_type ) {
20892011 php_error_docref (NULL , E_WARNING , "Unknown cipher algorithm" );
20902012 return NULL ;
@@ -2096,16 +2018,26 @@ const EVP_CIPHER *php_openssl_get_evp_cipher_by_name(const char *method)
20962018
20972019PHP_OPENSSL_API zend_long php_openssl_cipher_iv_length (const char * method )
20982020{
2099- const EVP_CIPHER * cipher_type = php_openssl_get_evp_cipher_by_name (method );
2021+ const EVP_CIPHER * cipher_type = php_openssl_get_evp_cipher_by_name_with_warning (method );
2022+ if (cipher_type == NULL ) {
2023+ return -1 ;
2024+ }
2025+ int iv_length = EVP_CIPHER_iv_length (cipher_type );
2026+ php_openssl_release_evp_cipher (cipher_type );
21002027
2101- return cipher_type == NULL ? -1 : EVP_CIPHER_iv_length ( cipher_type ) ;
2028+ return iv_length ;
21022029}
21032030
21042031PHP_OPENSSL_API zend_long php_openssl_cipher_key_length (const char * method )
21052032{
2106- const EVP_CIPHER * cipher_type = php_openssl_get_evp_cipher_by_name (method );
2033+ const EVP_CIPHER * cipher_type = php_openssl_get_evp_cipher_by_name_with_warning (method );
2034+ if (cipher_type == NULL ) {
2035+ return -1 ;
2036+ }
2037+ int key_length = EVP_CIPHER_key_length (cipher_type );
2038+ php_openssl_release_evp_cipher (cipher_type );
21072039
2108- return cipher_type == NULL ? -1 : EVP_CIPHER_key_length ( cipher_type ) ;
2040+ return key_length ;
21092041}
21102042
21112043PHP_OPENSSL_API zend_string * php_openssl_random_pseudo_bytes (zend_long buffer_length )
0 commit comments