summaryrefslogtreecommitdiffstats
path: root/php-7.0.17-openssl11.patch
diff options
context:
space:
mode:
Diffstat (limited to 'php-7.0.17-openssl11.patch')
-rw-r--r--php-7.0.17-openssl11.patch1167
1 files changed, 0 insertions, 1167 deletions
diff --git a/php-7.0.17-openssl11.patch b/php-7.0.17-openssl11.patch
deleted file mode 100644
index 0c0e691..0000000
--- a/php-7.0.17-openssl11.patch
+++ /dev/null
@@ -1,1167 +0,0 @@
-From d983347232dbf90cb6f5c187dc54686809fb04a0 Mon Sep 17 00:00:00 2001
-From: Remi Collet <fedora@famillecollet.com>
-Date: Mon, 20 Mar 2017 11:41:46 +0100
-Subject: [PATCH] backport needed change for OpenSSL 1.1
-
----
- acinclude.m4 | 4 +-
- ext/openssl/openssl.c | 522 ++++++++++++++--------
- ext/openssl/tests/001.phpt | 7 +-
- ext/openssl/tests/bug41033.phpt | 4 +-
- ext/openssl/tests/bug66501.phpt | 2 +-
- ext/openssl/tests/openssl_error_string_basic.phpt | 6 +-
- ext/openssl/tests/openssl_free_key.phpt | 5 +-
- ext/openssl/tests/sni_server.phpt | 2 +
- ext/phar/util.c | 13 +-
- 9 files changed, 364 insertions(+), 201 deletions(-)
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index 25c3c7d..ecbbe80 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -2337,9 +2337,7 @@ AC_DEFUN([PHP_SETUP_OPENSSL],[
-
- dnl If pkg-config is found try using it
- if test "$PHP_OPENSSL_DIR" = "yes" && test -x "$PKG_CONFIG" && $PKG_CONFIG --exists openssl; then
-- if $PKG_CONFIG --atleast-version=1.1 openssl; then
-- AC_MSG_ERROR([OpenSSL version >= 1.1 is not supported.])
-- elif $PKG_CONFIG --atleast-version=0.9.8 openssl; then
-+ if $PKG_CONFIG --atleast-version=0.9.8 openssl; then
- found_openssl=yes
- OPENSSL_LIBS=`$PKG_CONFIG --libs openssl`
- OPENSSL_INCS=`$PKG_CONFIG --cflags-only-I openssl`
-diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
-index da60bb9..4a26781 100644
---- a/ext/openssl/openssl.c
-+++ b/ext/openssl/openssl.c
-@@ -72,7 +72,6 @@
- #ifdef HAVE_OPENSSL_MD2_H
- #define OPENSSL_ALGO_MD2 4
- #endif
--#define OPENSSL_ALGO_DSS1 5
- #if OPENSSL_VERSION_NUMBER >= 0x0090708fL
- #define OPENSSL_ALGO_SHA224 6
- #define OPENSSL_ALGO_SHA256 7
-@@ -1100,9 +1099,11 @@ static EVP_MD * php_openssl_get_evp_md_from_algo(zend_long algo) { /* {{{ */
- mdtype = (EVP_MD *) EVP_md2();
- break;
- #endif
-+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER)
- case OPENSSL_ALGO_DSS1:
- mdtype = (EVP_MD *) EVP_dss1();
- break;
-+#endif
- #if OPENSSL_VERSION_NUMBER >= 0x0090708fL
- case OPENSSL_ALGO_SHA224:
- mdtype = (EVP_MD *) EVP_sha224();
-@@ -1220,7 +1221,6 @@ PHP_MINIT_FUNCTION(openssl)
- #ifdef HAVE_OPENSSL_MD2_H
- REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD2", OPENSSL_ALGO_MD2, CONST_CS|CONST_PERSISTENT);
- #endif
-- REGISTER_LONG_CONSTANT("OPENSSL_ALGO_DSS1", OPENSSL_ALGO_DSS1, CONST_CS|CONST_PERSISTENT);
- #if OPENSSL_VERSION_NUMBER >= 0x0090708fL
- REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA224", OPENSSL_ALGO_SHA224, CONST_CS|CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("OPENSSL_ALGO_SHA256", OPENSSL_ALGO_SHA256, CONST_CS|CONST_PERSISTENT);
-@@ -1938,6 +1938,7 @@ static int openssl_x509v3_subjectAltName(BIO *bio, X509_EXTENSION *extension)
- {
- GENERAL_NAMES *names;
- const X509V3_EXT_METHOD *method = NULL;
-+ ASN1_OCTET_STRING *extension_data;
- long i, length, num;
- const unsigned char *p;
-
-@@ -1946,8 +1947,9 @@ static int openssl_x509v3_subjectAltName(BIO *bio, X509_EXTENSION *extension)
- return -1;
- }
-
-- p = extension->value->data;
-- length = extension->value->length;
-+ extension_data = X509_EXTENSION_get_data(extension);
-+ p = extension_data->data;
-+ length = extension_data->length;
- if (method->it) {
- names = (GENERAL_NAMES*) (ASN1_item_d2i(NULL, &p, length,
- ASN1_ITEM_ptr(method->it)));
-@@ -2010,6 +2012,8 @@ PHP_FUNCTION(openssl_x509_parse)
- char * tmpstr;
- zval subitem;
- X509_EXTENSION *extension;
-+ X509_NAME *subject_name;
-+ char *cert_name;
- char *extname;
- BIO *bio_out;
- BUF_MEM *bio_buf;
-@@ -2028,12 +2032,14 @@ PHP_FUNCTION(openssl_x509_parse)
- }
- array_init(return_value);
-
-- if (cert->name) {
-- add_assoc_string(return_value, "name", cert->name);
-- }
-+ subject_name = X509_get_subject_name(cert);
-+ cert_name = X509_NAME_oneline(subject_name, NULL, 0);
-+ add_assoc_string(return_value, "name", cert_name);
-+ OPENSSL_free(cert_name);
-+
- /* add_assoc_bool(return_value, "valid", cert->valid); */
-
-- add_assoc_name_entry(return_value, "subject", X509_get_subject_name(cert), useshortnames);
-+ add_assoc_name_entry(return_value, "subject", subject_name, useshortnames);
- /* hash as used in CA directories to lookup cert by subject name */
- {
- char buf[32];
-@@ -2078,7 +2084,7 @@ PHP_FUNCTION(openssl_x509_parse)
- add_assoc_string(return_value, "alias", tmpstr);
- }
-
-- sig_nid = OBJ_obj2nid((cert)->sig_alg->algorithm);
-+ sig_nid = X509_get_signature_nid(cert);
- add_assoc_string(return_value, "signatureTypeSN", (char*)OBJ_nid2sn(sig_nid));
- add_assoc_string(return_value, "signatureTypeLN", (char*)OBJ_nid2ln(sig_nid));
- add_assoc_long(return_value, "signatureTypeNID", sig_nid);
-@@ -3560,44 +3566,68 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey)
- {
- assert(pkey != NULL);
-
-- switch (pkey->type) {
--#ifndef NO_RSA
-+ switch (EVP_PKEY_id(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
-- assert(pkey->pkey.rsa != NULL);
-- if (pkey->pkey.rsa != NULL && (NULL == pkey->pkey.rsa->p || NULL == pkey->pkey.rsa->q)) {
-- return 0;
-+ {
-+ RSA *rsa = EVP_PKEY_get0_RSA(pkey);
-+ if (rsa != NULL) {
-+ const BIGNUM *p, *q;
-+
-+ RSA_get0_factors(rsa, &p, &q);
-+ if (p == NULL || q == NULL) {
-+ return 0;
-+ }
-+ }
- }
- break;
--#endif
--#ifndef NO_DSA
- case EVP_PKEY_DSA:
- case EVP_PKEY_DSA1:
- case EVP_PKEY_DSA2:
- case EVP_PKEY_DSA3:
- case EVP_PKEY_DSA4:
-- assert(pkey->pkey.dsa != NULL);
-+ {
-+ DSA *dsa = EVP_PKEY_get0_DSA(pkey);
-+ if (dsa != NULL) {
-+ const BIGNUM *p, *q, *g, *pub_key, *priv_key;
-+
-+ DSA_get0_pqg(dsa, &p, &q, &g);
-+ if (p == NULL || q == NULL) {
-+ return 0;
-+ }
-
-- if (NULL == pkey->pkey.dsa->p || NULL == pkey->pkey.dsa->q || NULL == pkey->pkey.dsa->priv_key){
-- return 0;
-+ DSA_get0_key(dsa, &pub_key, &priv_key);
-+ if (priv_key == NULL) {
-+ return 0;
-+ }
-+ }
- }
- break;
--#endif
--#ifndef NO_DH
- case EVP_PKEY_DH:
-- assert(pkey->pkey.dh != NULL);
-+ {
-+ DH *dh = EVP_PKEY_get0_DH(pkey);
-+ if (dh != NULL) {
-+ const BIGNUM *p, *q, *g, *pub_key, *priv_key;
-+
-+ DH_get0_pqg(dh, &p, &q, &g);
-+ if (p == NULL) {
-+ return 0;
-+ }
-
-- if (NULL == pkey->pkey.dh->p || NULL == pkey->pkey.dh->priv_key) {
-- return 0;
-+ DH_get0_key(dh, &pub_key, &priv_key);
-+ if (priv_key == NULL) {
-+ return 0;
-+ }
-+ }
- }
- break;
--#endif
- #ifdef HAVE_EVP_PKEY_EC
- case EVP_PKEY_EC:
-- assert(pkey->pkey.ec != NULL);
--
-- if ( NULL == EC_KEY_get0_private_key(pkey->pkey.ec)) {
-- return 0;
-+ {
-+ EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
-+ if (ec != NULL && NULL == EC_KEY_get0_private_key(ec)) {
-+ return 0;
-+ }
- }
- break;
- #endif
-@@ -3609,42 +3639,91 @@ static int php_openssl_is_private_key(EVP_PKEY* pkey)
- }
- /* }}} */
-
--#define OPENSSL_PKEY_GET_BN(_type, _name) do { \
-- if (pkey->pkey._type->_name != NULL) { \
-- int len = BN_num_bytes(pkey->pkey._type->_name); \
-- zend_string *str = zend_string_alloc(len, 0); \
-- BN_bn2bin(pkey->pkey._type->_name, (unsigned char*)ZSTR_VAL(str)); \
-- ZSTR_VAL(str)[len] = 0; \
-- add_assoc_str(&_type, #_name, str); \
-- } \
-- } while (0)
--
--#define OPENSSL_PKEY_SET_BN(_ht, _type, _name) do { \
-- zval *bn; \
-- if ((bn = zend_hash_str_find(_ht, #_name, sizeof(#_name)-1)) != NULL && \
-- Z_TYPE_P(bn) == IS_STRING) { \
-- _type->_name = BN_bin2bn( \
-- (unsigned char*)Z_STRVAL_P(bn), \
-- (int)Z_STRLEN_P(bn), NULL); \
-- } \
-+#define OPENSSL_GET_BN(_array, _bn, _name) do { \
-+ if (_bn != NULL) { \
-+ int len = BN_num_bytes(_bn); \
-+ zend_string *str = zend_string_alloc(len, 0); \
-+ BN_bn2bin(_bn, (unsigned char*)ZSTR_VAL(str)); \
-+ ZSTR_VAL(str)[len] = 0; \
-+ add_assoc_str(&_array, #_name, str); \
-+ } \
- } while (0);
-
-+#define OPENSSL_PKEY_GET_BN(_type, _name) OPENSSL_GET_BN(_type, _name, _name)
-+
-+#define OPENSSL_PKEY_SET_BN(_data, _name) do { \
-+ zval *bn; \
-+ if ((bn = zend_hash_str_find(Z_ARRVAL_P(_data), #_name, sizeof(#_name)-1)) != NULL && \
-+ Z_TYPE_P(bn) == IS_STRING) { \
-+ _name = BN_bin2bn( \
-+ (unsigned char*)Z_STRVAL_P(bn), \
-+ (int)Z_STRLEN_P(bn), NULL); \
-+ } else { \
-+ _name = NULL; \
-+ } \
-+ } while (0);
-+
-+/* {{{ php_openssl_pkey_init_rsa */
-+zend_bool php_openssl_pkey_init_and_assign_rsa(EVP_PKEY *pkey, RSA *rsa, zval *data)
-+{
-+ BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp;
-+
-+ OPENSSL_PKEY_SET_BN(data, n);
-+ OPENSSL_PKEY_SET_BN(data, e);
-+ OPENSSL_PKEY_SET_BN(data, d);
-+ if (!n || !d || !RSA_set0_key(rsa, n, e, d)) {
-+ return 0;
-+ }
-+
-+ OPENSSL_PKEY_SET_BN(data, p);
-+ OPENSSL_PKEY_SET_BN(data, q);
-+ if ((p || q) && !RSA_set0_factors(rsa, p, q)) {
-+ return 0;
-+ }
-+
-+ OPENSSL_PKEY_SET_BN(data, dmp1);
-+ OPENSSL_PKEY_SET_BN(data, dmq1);
-+ OPENSSL_PKEY_SET_BN(data, iqmp);
-+ if ((dmp1 || dmq1 || iqmp) && !RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp)) {
-+ return 0;
-+ }
-+
-+ if (!EVP_PKEY_assign_RSA(pkey, rsa)) {
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
- /* {{{ php_openssl_pkey_init_dsa */
--zend_bool php_openssl_pkey_init_dsa(DSA *dsa)
-+zend_bool php_openssl_pkey_init_dsa(DSA *dsa, zval *data)
- {
-- if (!dsa->p || !dsa->q || !dsa->g) {
-+ BIGNUM *p, *q, *g, *priv_key, *pub_key;
-+ const BIGNUM *priv_key_const, *pub_key_const;
-+
-+ OPENSSL_PKEY_SET_BN(data, p);
-+ OPENSSL_PKEY_SET_BN(data, q);
-+ OPENSSL_PKEY_SET_BN(data, g);
-+ if (!p || !q || !g || !DSA_set0_pqg(dsa, p, q, g)) {
- return 0;
- }
-- if (dsa->priv_key || dsa->pub_key) {
-- return 1;
-+
-+ OPENSSL_PKEY_SET_BN(data, pub_key);
-+ OPENSSL_PKEY_SET_BN(data, priv_key);
-+ if (pub_key) {
-+ return DSA_set0_key(dsa, pub_key, priv_key);
- }
-+
-+ /* generate key */
- PHP_OPENSSL_RAND_ADD_TIME();
- if (!DSA_generate_key(dsa)) {
- return 0;
- }
-+
- /* if BN_mod_exp return -1, then DSA_generate_key succeed for failed key
- * so we need to double check that public key is created */
-- if (!dsa->pub_key || BN_is_zero(dsa->pub_key)) {
-+ DSA_get0_key(dsa, &pub_key_const, &priv_key_const);
-+ if (!pub_key_const || BN_is_zero(pub_key_const)) {
- return 0;
- }
- /* all good */
-@@ -3652,15 +3731,69 @@ zend_bool php_openssl_pkey_init_dsa(DSA *dsa)
- }
- /* }}} */
-
-+/* {{{ php_openssl_dh_pub_from_priv */
-+static BIGNUM *php_openssl_dh_pub_from_priv(BIGNUM *priv_key, BIGNUM *g, BIGNUM *p)
-+{
-+ BIGNUM *pub_key, *priv_key_const_time;
-+ BN_CTX *ctx;
-+
-+ pub_key = BN_new();
-+ if (pub_key == NULL) {
-+ return NULL;
-+ }
-+
-+ priv_key_const_time = BN_new();
-+ if (priv_key_const_time == NULL) {
-+ BN_free(pub_key);
-+ return NULL;
-+ }
-+ ctx = BN_CTX_new();
-+ if (ctx == NULL) {
-+ BN_free(pub_key);
-+ BN_free(priv_key_const_time);
-+ return NULL;
-+ }
-+
-+ BN_with_flags(priv_key_const_time, priv_key, BN_FLG_CONSTTIME);
-+
-+ if (!BN_mod_exp_mont(pub_key, g, priv_key_const_time, p, ctx, NULL)) {
-+ BN_free(pub_key);
-+ pub_key = NULL;
-+ }
-+
-+ BN_free(priv_key_const_time);
-+ BN_CTX_free(ctx);
-+
-+ return pub_key;
-+}
-+/* }}} */
-+
- /* {{{ php_openssl_pkey_init_dh */
--zend_bool php_openssl_pkey_init_dh(DH *dh)
-+zend_bool php_openssl_pkey_init_dh(DH *dh, zval *data)
- {
-- if (!dh->p || !dh->g) {
-+ BIGNUM *p, *q, *g, *priv_key, *pub_key;
-+
-+ OPENSSL_PKEY_SET_BN(data, p);
-+ OPENSSL_PKEY_SET_BN(data, q);
-+ OPENSSL_PKEY_SET_BN(data, g);
-+ if (!p || !g || !DH_set0_pqg(dh, p, q, g)) {
- return 0;
- }
-- if (dh->pub_key) {
-- return 1;
-+
-+ OPENSSL_PKEY_SET_BN(data, priv_key);
-+ OPENSSL_PKEY_SET_BN(data, pub_key);
-+ if (pub_key) {
-+ return DH_set0_key(dh, pub_key, priv_key);
-+ }
-+ if (priv_key) {
-+ pub_key = php_openssl_dh_pub_from_priv(priv_key, g, p);
-+ if (pub_key == NULL) {
-+ return 0;
-+ }
-+ return DH_set0_key(dh, pub_key, priv_key);
- }
-+
-+ /* generate key */
- PHP_OPENSSL_RAND_ADD_TIME();
- if (!DH_generate_key(dh)) {
- return 0;
-@@ -3692,18 +3825,8 @@ PHP_FUNCTION(openssl_pkey_new)
- if (pkey) {
- RSA *rsa = RSA_new();
- if (rsa) {
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), rsa, n);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), rsa, e);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), rsa, d);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), rsa, p);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), rsa, q);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), rsa, dmp1);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), rsa, dmq1);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), rsa, iqmp);
-- if (rsa->n && rsa->d) {
-- if (EVP_PKEY_assign_RSA(pkey, rsa)) {
-- RETURN_RES(zend_register_resource(pkey, le_key));
-- }
-+ if (php_openssl_pkey_init_and_assign_rsa(pkey, rsa, data)) {
-+ RETURN_RES(zend_register_resource(pkey, le_key));
- }
- RSA_free(rsa);
- }
-@@ -3716,12 +3839,7 @@ PHP_FUNCTION(openssl_pkey_new)
- if (pkey) {
- DSA *dsa = DSA_new();
- if (dsa) {
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dsa, p);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dsa, q);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dsa, g);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dsa, priv_key);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dsa, pub_key);
-- if (php_openssl_pkey_init_dsa(dsa)) {
-+ if (php_openssl_pkey_init_dsa(dsa, data)) {
- if (EVP_PKEY_assign_DSA(pkey, dsa)) {
- RETURN_RES(zend_register_resource(pkey, le_key));
- }
-@@ -3737,11 +3855,7 @@ PHP_FUNCTION(openssl_pkey_new)
- if (pkey) {
- DH *dh = DH_new();
- if (dh) {
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dh, p);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dh, g);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dh, priv_key);
-- OPENSSL_PKEY_SET_BN(Z_ARRVAL_P(data), dh, pub_key);
-- if (php_openssl_pkey_init_dh(dh)) {
-+ if (php_openssl_pkey_init_dh(dh, data)) {
- if (EVP_PKEY_assign_DH(pkey, dh)) {
- ZVAL_COPY_VALUE(return_value, zend_list_insert(pkey, le_key));
- return;
-@@ -3819,7 +3933,7 @@ PHP_FUNCTION(openssl_pkey_export_to_file)
- cipher = NULL;
- }
-
-- switch (EVP_PKEY_type(key->type)) {
-+ switch (EVP_PKEY_base_id(key)) {
- #ifdef HAVE_EVP_PKEY_EC
- case EVP_PKEY_EC:
- pem_write = PEM_write_bio_ECPrivateKey(bio_out, EVP_PKEY_get1_EC_KEY(key), cipher, (unsigned char *)passphrase, (int)passphrase_len, NULL, NULL);
-@@ -3889,7 +4003,7 @@ PHP_FUNCTION(openssl_pkey_export)
- cipher = NULL;
- }
-
-- switch (EVP_PKEY_type(key->type)) {
-+ switch (EVP_PKEY_base_id(key)) {
- #ifdef HAVE_EVP_PKEY_EC
- case EVP_PKEY_EC:
- pem_write = PEM_write_bio_ECPrivateKey(bio_out, EVP_PKEY_get1_EC_KEY(key), cipher, (unsigned char *)passphrase, (int)passphrase_len, NULL, NULL);
-@@ -4012,65 +4126,84 @@ PHP_FUNCTION(openssl_pkey_get_details)
- /*TODO: Use the real values once the openssl constants are used
- * See the enum at the top of this file
- */
-- switch (EVP_PKEY_type(pkey->type)) {
-+ switch (EVP_PKEY_base_id(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
-- ktype = OPENSSL_KEYTYPE_RSA;
--
-- if (pkey->pkey.rsa != NULL) {
-- zval rsa;
--
-- array_init(&rsa);
-- OPENSSL_PKEY_GET_BN(rsa, n);
-- OPENSSL_PKEY_GET_BN(rsa, e);
-- OPENSSL_PKEY_GET_BN(rsa, d);
-- OPENSSL_PKEY_GET_BN(rsa, p);
-- OPENSSL_PKEY_GET_BN(rsa, q);
-- OPENSSL_PKEY_GET_BN(rsa, dmp1);
-- OPENSSL_PKEY_GET_BN(rsa, dmq1);
-- OPENSSL_PKEY_GET_BN(rsa, iqmp);
-- add_assoc_zval(return_value, "rsa", &rsa);
-+ {
-+ RSA *rsa = EVP_PKEY_get0_RSA(pkey);
-+ ktype = OPENSSL_KEYTYPE_RSA;
-+
-+ if (rsa != NULL) {
-+ zval z_rsa;
-+ const BIGNUM *n, *e, *d, *p, *q, *dmp1, *dmq1, *iqmp;
-+
-+ RSA_get0_key(rsa, &n, &e, &d);
-+ RSA_get0_factors(rsa, &p, &q);
-+ RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp);
-+
-+ array_init(&z_rsa);
-+ OPENSSL_PKEY_GET_BN(z_rsa, n);
-+ OPENSSL_PKEY_GET_BN(z_rsa, e);
-+ OPENSSL_PKEY_GET_BN(z_rsa, d);
-+ OPENSSL_PKEY_GET_BN(z_rsa, p);
-+ OPENSSL_PKEY_GET_BN(z_rsa, q);
-+ OPENSSL_PKEY_GET_BN(z_rsa, dmp1);
-+ OPENSSL_PKEY_GET_BN(z_rsa, dmq1);
-+ OPENSSL_PKEY_GET_BN(z_rsa, iqmp);
-+ add_assoc_zval(return_value, "rsa", &z_rsa);
-+ }
- }
--
- break;
- case EVP_PKEY_DSA:
- case EVP_PKEY_DSA2:
- case EVP_PKEY_DSA3:
- case EVP_PKEY_DSA4:
-- ktype = OPENSSL_KEYTYPE_DSA;
--
-- if (pkey->pkey.dsa != NULL) {
-- zval dsa;
--
-- array_init(&dsa);
-- OPENSSL_PKEY_GET_BN(dsa, p);
-- OPENSSL_PKEY_GET_BN(dsa, q);
-- OPENSSL_PKEY_GET_BN(dsa, g);
-- OPENSSL_PKEY_GET_BN(dsa, priv_key);
-- OPENSSL_PKEY_GET_BN(dsa, pub_key);
-- add_assoc_zval(return_value, "dsa", &dsa);
-+ {
-+ DSA *dsa = EVP_PKEY_get0_DSA(pkey);
-+ ktype = OPENSSL_KEYTYPE_DSA;
-+
-+ if (dsa != NULL) {
-+ zval z_dsa;
-+ const BIGNUM *p, *q, *g, *priv_key, *pub_key;
-+
-+ DSA_get0_pqg(dsa, &p, &q, &g);
-+ DSA_get0_key(dsa, &pub_key, &priv_key);
-+
-+ array_init(&z_dsa);
-+ OPENSSL_PKEY_GET_BN(z_dsa, p);
-+ OPENSSL_PKEY_GET_BN(z_dsa, q);
-+ OPENSSL_PKEY_GET_BN(z_dsa, g);
-+ OPENSSL_PKEY_GET_BN(z_dsa, priv_key);
-+ OPENSSL_PKEY_GET_BN(z_dsa, pub_key);
-+ add_assoc_zval(return_value, "dsa", &z_dsa);
-+ }
- }
- break;
- case EVP_PKEY_DH:
--
-- ktype = OPENSSL_KEYTYPE_DH;
--
-- if (pkey->pkey.dh != NULL) {
-- zval dh;
--
-- array_init(&dh);
-- OPENSSL_PKEY_GET_BN(dh, p);
-- OPENSSL_PKEY_GET_BN(dh, g);
-- OPENSSL_PKEY_GET_BN(dh, priv_key);
-- OPENSSL_PKEY_GET_BN(dh, pub_key);
-- add_assoc_zval(return_value, "dh", &dh);
-+ {
-+ DH *dh = EVP_PKEY_get0_DH(pkey);
-+ ktype = OPENSSL_KEYTYPE_DH;
-+
-+ if (dh != NULL) {
-+ zval z_dh;
-+ const BIGNUM *p, *q, *g, *priv_key, *pub_key;
-+
-+ DH_get0_pqg(dh, &p, &q, &g);
-+ DH_get0_key(dh, &pub_key, &priv_key);
-+
-+ array_init(&z_dh);
-+ OPENSSL_PKEY_GET_BN(z_dh, p);
-+ OPENSSL_PKEY_GET_BN(z_dh, g);
-+ OPENSSL_PKEY_GET_BN(z_dh, priv_key);
-+ OPENSSL_PKEY_GET_BN(z_dh, pub_key);
-+ add_assoc_zval(return_value, "dh", &z_dh);
-+ }
- }
--
- break;
- #ifdef HAVE_EVP_PKEY_EC
- case EVP_PKEY_EC:
- ktype = OPENSSL_KEYTYPE_EC;
-- if (pkey->pkey.ec != NULL) {
-+ if (EVP_PKEY_get0_EC_KEY(pkey) != NULL) {
- zval ec;
- const EC_GROUP *ec_group;
- int nid;
-@@ -4627,13 +4760,13 @@ PHP_FUNCTION(openssl_private_encrypt)
- cryptedlen = EVP_PKEY_size(pkey);
- cryptedbuf = zend_string_alloc(cryptedlen, 0);
-
-- switch (pkey->type) {
-+ switch (EVP_PKEY_id(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- successful = (RSA_private_encrypt((int)data_len,
- (unsigned char *)data,
- (unsigned char *)ZSTR_VAL(cryptedbuf),
-- pkey->pkey.rsa,
-+ EVP_PKEY_get0_RSA(pkey),
- (int)padding) == cryptedlen);
- break;
- default:
-@@ -4687,13 +4820,13 @@ PHP_FUNCTION(openssl_private_decrypt)
- cryptedlen = EVP_PKEY_size(pkey);
- crypttemp = emalloc(cryptedlen + 1);
-
-- switch (pkey->type) {
-+ switch (EVP_PKEY_id(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- cryptedlen = RSA_private_decrypt((int)data_len,
- (unsigned char *)data,
- crypttemp,
-- pkey->pkey.rsa,
-+ EVP_PKEY_get0_RSA(pkey),
- (int)padding);
- if (cryptedlen != -1) {
- cryptedbuf = zend_string_alloc(cryptedlen, 0);
-@@ -4753,13 +4886,13 @@ PHP_FUNCTION(openssl_public_encrypt)
- cryptedlen = EVP_PKEY_size(pkey);
- cryptedbuf = zend_string_alloc(cryptedlen, 0);
-
-- switch (pkey->type) {
-+ switch (EVP_PKEY_id(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- successful = (RSA_public_encrypt((int)data_len,
- (unsigned char *)data,
- (unsigned char *)ZSTR_VAL(cryptedbuf),
-- pkey->pkey.rsa,
-+ EVP_PKEY_get0_RSA(pkey),
- (int)padding) == cryptedlen);
- break;
- default:
-@@ -4814,13 +4947,13 @@ PHP_FUNCTION(openssl_public_decrypt)
- cryptedlen = EVP_PKEY_size(pkey);
- crypttemp = emalloc(cryptedlen + 1);
-
-- switch (pkey->type) {
-+ switch (EVP_PKEY_id(pkey)) {
- case EVP_PKEY_RSA:
- case EVP_PKEY_RSA2:
- cryptedlen = RSA_public_decrypt((int)data_len,
- (unsigned char *)data,
- crypttemp,
-- pkey->pkey.rsa,
-+ EVP_PKEY_get0_RSA(pkey),
- (int)padding);
- if (cryptedlen != -1) {
- cryptedbuf = zend_string_alloc(cryptedlen, 0);
-@@ -4884,7 +5017,7 @@ PHP_FUNCTION(openssl_sign)
- zend_resource *keyresource = NULL;
- char * data;
- size_t data_len;
-- EVP_MD_CTX md_ctx;
-+ EVP_MD_CTX *md_ctx;
- zval *method = NULL;
- zend_long signature_algo = OPENSSL_ALGO_SHA1;
- const EVP_MD *mdtype;
-@@ -4917,9 +5050,11 @@ PHP_FUNCTION(openssl_sign)
- siglen = EVP_PKEY_size(pkey);
- sigbuf = zend_string_alloc(siglen, 0);
-
-- EVP_SignInit(&md_ctx, mdtype);
-- EVP_SignUpdate(&md_ctx, data, data_len);
-- if (EVP_SignFinal (&md_ctx, (unsigned char*)ZSTR_VAL(sigbuf), &siglen, pkey)) {
-+ md_ctx = EVP_MD_CTX_create();
-+ if (md_ctx != NULL &&
-+ EVP_SignInit(md_ctx, mdtype) &&
-+ EVP_SignUpdate(md_ctx, data, data_len) &&
-+ EVP_SignFinal(md_ctx, (unsigned char*)ZSTR_VAL(sigbuf), &siglen, pkey)) {
- zval_dtor(signature);
- ZSTR_VAL(sigbuf)[siglen] = '\0';
- ZSTR_LEN(sigbuf) = siglen;
-@@ -4929,7 +5064,7 @@ PHP_FUNCTION(openssl_sign)
- efree(sigbuf);
- RETVAL_FALSE;
- }
-- EVP_MD_CTX_cleanup(&md_ctx);
-+ EVP_MD_CTX_destroy(md_ctx);
- if (keyresource == NULL) {
- EVP_PKEY_free(pkey);
- }
-@@ -4942,8 +5077,8 @@ PHP_FUNCTION(openssl_verify)
- {
- zval *key;
- EVP_PKEY *pkey;
-- int err;
-- EVP_MD_CTX md_ctx;
-+ int err = 0;
-+ EVP_MD_CTX *md_ctx;
- const EVP_MD *mdtype;
- zend_resource *keyresource = NULL;
- char * data;
-@@ -4981,10 +5116,13 @@ PHP_FUNCTION(openssl_verify)
- RETURN_FALSE;
- }
-
-- EVP_VerifyInit (&md_ctx, mdtype);
-- EVP_VerifyUpdate (&md_ctx, data, data_len);
-- err = EVP_VerifyFinal(&md_ctx, (unsigned char *)signature, (unsigned int)signature_len, pkey);
-- EVP_MD_CTX_cleanup(&md_ctx);
-+ md_ctx = EVP_MD_CTX_create();
-+ if (md_ctx) {
-+ EVP_VerifyInit(md_ctx, mdtype);
-+ EVP_VerifyUpdate(md_ctx, data, data_len);
-+ err = EVP_VerifyFinal(md_ctx, (unsigned char *)signature, (unsigned int)signature_len, pkey);
-+ }
-+ EVP_MD_CTX_destroy(md_ctx);
-
- if (keyresource == NULL) {
- EVP_PKEY_free(pkey);
-@@ -5008,7 +5146,7 @@ PHP_FUNCTION(openssl_seal)
- char *method =NULL;
- size_t method_len = 0;
- const EVP_CIPHER *cipher;
-- EVP_CIPHER_CTX ctx;
-+ EVP_CIPHER_CTX *ctx;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "sz/z/a/|sz/", &data, &data_len,
- &sealdata, &ekeys, &pubkeys, &method, &method_len, &iv) == FAILURE) {
-@@ -5061,22 +5199,23 @@ PHP_FUNCTION(openssl_seal)
- i++;
- } ZEND_HASH_FOREACH_END();
-
-- if (!EVP_EncryptInit(&ctx,cipher,NULL,NULL)) {
-+ ctx = EVP_CIPHER_CTX_new();
-+ if (ctx == NULL || !EVP_EncryptInit(ctx,cipher,NULL,NULL)) {
- RETVAL_FALSE;
-- EVP_CIPHER_CTX_cleanup(&ctx);
-+ EVP_CIPHER_CTX_free(ctx);
- goto clean_exit;
- }
-
- /* allocate one byte extra to make room for \0 */
-- buf = emalloc(data_len + EVP_CIPHER_CTX_block_size(&ctx));
-- EVP_CIPHER_CTX_cleanup(&ctx);
-+ buf = emalloc(data_len + EVP_CIPHER_CTX_block_size(ctx));
-+ EVP_CIPHER_CTX_cleanup(ctx);
-
-- if (!EVP_SealInit(&ctx, cipher, eks, eksl, &iv_buf[0], pkeys, nkeys) ||
-- !EVP_SealUpdate(&ctx, buf, &len1, (unsigned char *)data, (int)data_len) ||
-- !EVP_SealFinal(&ctx, buf + len1, &len2)) {
-+ if (!EVP_SealInit(ctx, cipher, eks, eksl, &iv_buf[0], pkeys, nkeys) ||
-+ !EVP_SealUpdate(ctx, buf, &len1, (unsigned char *)data, (int)data_len) ||
-+ !EVP_SealFinal(ctx, buf + len1, &len2)) {
- RETVAL_FALSE;
- efree(buf);
-- EVP_CIPHER_CTX_cleanup(&ctx);
-+ EVP_CIPHER_CTX_free(ctx);
- goto clean_exit;
- }
-
-@@ -5104,7 +5243,7 @@ PHP_FUNCTION(openssl_seal)
- efree(buf);
- }
- RETVAL_LONG(len1 + len2);
-- EVP_CIPHER_CTX_cleanup(&ctx);
-+ EVP_CIPHER_CTX_free(ctx);
-
- clean_exit:
- for (i=0; i<nkeys; i++) {
-@@ -5131,7 +5270,7 @@ PHP_FUNCTION(openssl_open)
- int len1, len2, cipher_iv_len;
- unsigned char *buf, *iv_buf;
- zend_resource *keyresource = NULL;
-- EVP_CIPHER_CTX ctx;
-+ EVP_CIPHER_CTX *ctx;
- char * data;
- size_t data_len;
- char * ekey;
-@@ -5182,9 +5321,10 @@ PHP_FUNCTION(openssl_open)
-
- buf = emalloc(data_len + 1);
-
-- if (EVP_OpenInit(&ctx, cipher, (unsigned char *)ekey, (int)ekey_len, iv_buf, pkey) &&
-- EVP_OpenUpdate(&ctx, buf, &len1, (unsigned char *)data, (int)data_len)) {
-- if (!EVP_OpenFinal(&ctx, buf + len1, &len2) || (len1 + len2 == 0)) {
-+ ctx = EVP_CIPHER_CTX_new();
-+ if (ctx != NULL && EVP_OpenInit(ctx, cipher, (unsigned char *)ekey, (int)ekey_len, iv_buf, pkey) &&
-+ EVP_OpenUpdate(ctx, buf, &len1, (unsigned char *)data, (int)data_len)) {
-+ if (!EVP_OpenFinal(ctx, buf + len1, &len2) || (len1 + len2 == 0)) {
- efree(buf);
- RETVAL_FALSE;
- } else {
-@@ -5201,7 +5341,7 @@ PHP_FUNCTION(openssl_open)
- if (keyresource == NULL) {
- EVP_PKEY_free(pkey);
- }
-- EVP_CIPHER_CTX_cleanup(&ctx);
-+ EVP_CIPHER_CTX_free(ctx);
- }
- /* }}} */
-
-@@ -5259,7 +5399,7 @@ PHP_FUNCTION(openssl_digest)
- char *data, *method;
- size_t data_len, method_len;
- const EVP_MD *mdtype;
-- EVP_MD_CTX md_ctx;
-+ EVP_MD_CTX *md_ctx;
- unsigned int siglen;
- zend_string *sigbuf;
-
-@@ -5275,9 +5415,10 @@ PHP_FUNCTION(openssl_digest)
- siglen = EVP_MD_size(mdtype);
- sigbuf = zend_string_alloc(siglen, 0);
-
-- EVP_DigestInit(&md_ctx, mdtype);
-- EVP_DigestUpdate(&md_ctx, (unsigned char *)data, data_len);
-- if (EVP_DigestFinal (&md_ctx, (unsigned char *)ZSTR_VAL(sigbuf), &siglen)) {
-+ md_ctx = EVP_MD_CTX_create();
-+ if (EVP_DigestInit(md_ctx, mdtype) &&
-+ EVP_DigestUpdate(md_ctx, (unsigned char *)data, data_len) &&
-+ EVP_DigestFinal(md_ctx, (unsigned char *)ZSTR_VAL(sigbuf), &siglen)) {
- if (raw_output) {
- ZSTR_VAL(sigbuf)[siglen] = '\0';
- ZSTR_LEN(sigbuf) = siglen;
-@@ -5295,6 +5436,8 @@ PHP_FUNCTION(openssl_digest)
- zend_string_release(sigbuf);
- RETVAL_FALSE;
- }
-+
-+ EVP_MD_CTX_destroy(md_ctx);
- }
- /* }}} */
-
-@@ -5340,7 +5483,7 @@ PHP_FUNCTION(openssl_encrypt)
- char *data, *method, *password, *iv = "";
- size_t data_len, method_len, password_len, iv_len = 0, max_iv_len;
- const EVP_CIPHER *cipher_type;
-- EVP_CIPHER_CTX cipher_ctx;
-+ EVP_CIPHER_CTX *cipher_ctx;
- int i=0, keylen;
- size_t outlen;
- zend_string *outbuf;
-@@ -5356,6 +5499,12 @@ PHP_FUNCTION(openssl_encrypt)
- RETURN_FALSE;
- }
-
-+ cipher_ctx = EVP_CIPHER_CTX_new();
-+ if (!cipher_ctx) {
-+ php_error_docref(NULL, E_WARNING, "Failed to create cipher context");
-+ RETURN_FALSE;
-+ }
-+
- PHP_OPENSSL_CHECK_SIZE_T_TO_INT(data_len, data);
-
- keylen = EVP_CIPHER_key_length(cipher_type);
-@@ -5376,20 +5525,20 @@ PHP_FUNCTION(openssl_encrypt)
- outlen = data_len + EVP_CIPHER_block_size(cipher_type);
- outbuf = zend_string_alloc(outlen, 0);
-
-- EVP_EncryptInit(&cipher_ctx, cipher_type, NULL, NULL);
-+ EVP_EncryptInit(cipher_ctx, cipher_type, NULL, NULL);
- if (password_len > keylen) {
- PHP_OPENSSL_CHECK_SIZE_T_TO_INT(password_len, password);
-- EVP_CIPHER_CTX_set_key_length(&cipher_ctx, (int)password_len);
-+ EVP_CIPHER_CTX_set_key_length(cipher_ctx, (int)password_len);
- }
-- EVP_EncryptInit_ex(&cipher_ctx, NULL, NULL, key, (unsigned char *)iv);
-+ EVP_EncryptInit_ex(cipher_ctx, NULL, NULL, key, (unsigned char *)iv);
- if (options & OPENSSL_ZERO_PADDING) {
-- EVP_CIPHER_CTX_set_padding(&cipher_ctx, 0);
-+ EVP_CIPHER_CTX_set_padding(cipher_ctx, 0);
- }
- if (data_len > 0) {
-- EVP_EncryptUpdate(&cipher_ctx, (unsigned char*)ZSTR_VAL(outbuf), &i, (unsigned char *)data, (int)data_len);
-+ EVP_EncryptUpdate(cipher_ctx, (unsigned char*)ZSTR_VAL(outbuf), &i, (unsigned char *)data, (int)data_len);
- }
- outlen = i;
-- if (EVP_EncryptFinal(&cipher_ctx, (unsigned char *)ZSTR_VAL(outbuf) + i, &i)) {
-+ if (EVP_EncryptFinal(cipher_ctx, (unsigned char *)ZSTR_VAL(outbuf) + i, &i)) {
- outlen += i;
- if (options & OPENSSL_RAW_DATA) {
- ZSTR_VAL(outbuf)[outlen] = '\0';
-@@ -5412,7 +5561,7 @@ PHP_FUNCTION(openssl_encrypt)
- if (free_iv) {
- efree(iv);
- }
-- EVP_CIPHER_CTX_cleanup(&cipher_ctx);
-+ EVP_CIPHER_CTX_free(cipher_ctx);
- }
- /* }}} */
-
-@@ -5424,7 +5573,7 @@ PHP_FUNCTION(openssl_decrypt)
- char *data, *method, *password, *iv = "";
- size_t data_len, method_len, password_len, iv_len = 0;
- const EVP_CIPHER *cipher_type;
-- EVP_CIPHER_CTX cipher_ctx;
-+ EVP_CIPHER_CTX *cipher_ctx;
- int i, keylen;
- size_t outlen;
- zend_string *outbuf;
-@@ -5440,6 +5589,11 @@ PHP_FUNCTION(openssl_decrypt)
- php_error_docref(NULL, E_WARNING, "Unknown cipher algorithm");
- RETURN_FALSE;
- }
-+ cipher_ctx = EVP_CIPHER_CTX_new();
-+ if (!cipher_ctx) {
-+ php_error_docref(NULL, E_WARNING, "Failed to create cipher context");
-+ RETURN_FALSE;
-+ }
-
- PHP_OPENSSL_CHECK_SIZE_T_TO_INT(data_len, data);
-
-@@ -5453,6 +5607,7 @@ PHP_FUNCTION(openssl_decrypt)
- base64_str = php_base64_decode((unsigned char*)data, data_len);
- if (!base64_str) {
- php_error_docref(NULL, E_WARNING, "Failed to base64 decode the input");
-+ EVP_CIPHER_CTX_free(cipher_ctx);
- RETURN_FALSE;
- }
- data_len = ZSTR_LEN(base64_str);
-@@ -5473,18 +5628,18 @@ PHP_FUNCTION(openssl_decrypt)
- outlen = data_len + EVP_CIPHER_block_size(cipher_type);
- outbuf = zend_string_alloc(outlen, 0);
-
-- EVP_DecryptInit(&cipher_ctx, cipher_type, NULL, NULL);
-+ EVP_DecryptInit(cipher_ctx, cipher_type, NULL, NULL);
- if (password_len > keylen) {
- PHP_OPENSSL_CHECK_SIZE_T_TO_INT(password_len, password);
-- EVP_CIPHER_CTX_set_key_length(&cipher_ctx, (int)password_len);
-+ EVP_CIPHER_CTX_set_key_length(cipher_ctx, (int)password_len);
- }
-- EVP_DecryptInit_ex(&cipher_ctx, NULL, NULL, key, (unsigned char *)iv);
-+ EVP_DecryptInit_ex(cipher_ctx, NULL, NULL, key, (unsigned char *)iv);
- if (options & OPENSSL_ZERO_PADDING) {
-- EVP_CIPHER_CTX_set_padding(&cipher_ctx, 0);
-+ EVP_CIPHER_CTX_set_padding(cipher_ctx, 0);
- }
-- EVP_DecryptUpdate(&cipher_ctx, (unsigned char*)ZSTR_VAL(outbuf), &i, (unsigned char *)data, (int)data_len);
-+ EVP_DecryptUpdate(cipher_ctx, (unsigned char*)ZSTR_VAL(outbuf), &i, (unsigned char *)data, (int)data_len);
- outlen = i;
-- if (EVP_DecryptFinal(&cipher_ctx, (unsigned char *)ZSTR_VAL(outbuf) + i, &i)) {
-+ if (EVP_DecryptFinal(cipher_ctx, (unsigned char *)ZSTR_VAL(outbuf) + i, &i)) {
- outlen += i;
- ZSTR_VAL(outbuf)[outlen] = '\0';
- ZSTR_LEN(outbuf) = outlen;
-@@ -5502,7 +5657,7 @@ PHP_FUNCTION(openssl_decrypt)
- if (base64_str) {
- zend_string_release(base64_str);
- }
-- EVP_CIPHER_CTX_cleanup(&cipher_ctx);
-+ EVP_CIPHER_CTX_free(cipher_ctx);
- }
- /* }}} */
-
-@@ -5540,6 +5695,7 @@ PHP_FUNCTION(openssl_dh_compute_key)
- zval *key;
- char *pub_str;
- size_t pub_len;
-+ DH *dh;
- EVP_PKEY *pkey;
- BIGNUM *pub;
- zend_string *data;
-@@ -5551,15 +5707,19 @@ PHP_FUNCTION(openssl_dh_compute_key)
- if ((pkey = (EVP_PKEY *)zend_fetch_resource(Z_RES_P(key), "OpenSSL key", le_key)) == NULL) {
- RETURN_FALSE;
- }
-- if (EVP_PKEY_type(pkey->type) != EVP_PKEY_DH || !pkey->pkey.dh) {
-+ if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DH) {
-+ RETURN_FALSE;
-+ }
-+ dh = EVP_PKEY_get0_DH(pkey);
-+ if (dh == NULL) {
- RETURN_FALSE;
- }
-
- PHP_OPENSSL_CHECK_SIZE_T_TO_INT(pub_len, pub_key);
- pub = BN_bin2bn((unsigned char*)pub_str, (int)pub_len, NULL);
-
-- data = zend_string_alloc(DH_size(pkey->pkey.dh), 0);
-- len = DH_compute_key((unsigned char*)ZSTR_VAL(data), pub, pkey->pkey.dh);
-+ data = zend_string_alloc(DH_size(dh), 0);
-+ len = DH_compute_key((unsigned char*)ZSTR_VAL(data), pub, dh);
-
- if (len >= 0) {
- ZSTR_LEN(data) = len;
-diff --git a/ext/openssl/tests/001.phpt b/ext/openssl/tests/001.phpt
-index 4ca9970..2d0aa90 100644
---- a/ext/openssl/tests/001.phpt
-+++ b/ext/openssl/tests/001.phpt
-@@ -18,19 +18,20 @@ for ($z = "", $i = 0; $i < 1024; $i++) {
- usleep($i);
- }
-
--$privkey = openssl_pkey_new();
-+$conf = array('config' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'openssl.cnf');
-+$privkey = openssl_pkey_new($conf);
-
- if ($privkey === false)
- die("failed to create private key");
-
- $passphrase = "banana";
--$key_file_name = tempnam("/tmp", "ssl");
-+$key_file_name = tempnam(sys_get_temp_dir(), "ssl");
- if ($key_file_name === false)
- die("failed to get a temporary filename!");
-
- echo "Export key to file\n";
-
--openssl_pkey_export_to_file($privkey, $key_file_name, $passphrase) or die("failed to export to file $key_file_name");
-+openssl_pkey_export_to_file($privkey, $key_file_name, $passphrase, $conf) or die("failed to export to file $key_file_name");
-
- echo "Load key from file - array syntax\n";
-
-diff --git a/ext/openssl/tests/bug41033.phpt b/ext/openssl/tests/bug41033.phpt
-index 4aeae66..4e9bea3 100644
---- a/ext/openssl/tests/bug41033.phpt
-+++ b/ext/openssl/tests/bug41033.phpt
-@@ -13,11 +13,11 @@ $pub = 'file://' . dirname(__FILE__) . '/' . 'bug41033pub.pem';
-
- $prkeyid = openssl_get_privatekey($prv, "1234");
- $ct = "Hello I am some text!";
--openssl_sign($ct, $signature, $prkeyid, OPENSSL_ALGO_DSS1);
-+openssl_sign($ct, $signature, $prkeyid, OPENSSL_ALGO_SHA1);
- echo "Signature: ".base64_encode($signature) . "\n";
-
- $pukeyid = openssl_get_publickey($pub);
--$valid = openssl_verify($ct, $signature, $pukeyid, OPENSSL_ALGO_DSS1);
-+$valid = openssl_verify($ct, $signature, $pukeyid, OPENSSL_ALGO_SHA1);
- echo "Signature validity: " . $valid . "\n";
-
-
-diff --git a/ext/openssl/tests/bug66501.phpt b/ext/openssl/tests/bug66501.phpt
-index 7ad5e21..99ac4f5 100644
---- a/ext/openssl/tests/bug66501.phpt
-+++ b/ext/openssl/tests/bug66501.phpt
-@@ -16,7 +16,7 @@ AwEHoUQDQgAEPq4hbIWHvB51rdWr8ejrjWo4qVNWVugYFtPg/xLQw0mHkIPZ4DvK
- sqOTOnMoezkbSmVVMuwz9flvnqHGmQvmug==
- -----END EC PRIVATE KEY-----';
- $key = openssl_pkey_get_private($pkey);
--$res = openssl_sign($data ='alpha', $sign, $key, 'ecdsa-with-SHA1');
-+$res = openssl_sign($data ='alpha', $sign, $key, 'SHA1');
- var_dump($res);
- --EXPECTF--
- bool(true)
-diff --git a/ext/openssl/tests/openssl_error_string_basic.phpt b/ext/openssl/tests/openssl_error_string_basic.phpt
-index 82f3099..04cc550 100644
---- a/ext/openssl/tests/openssl_error_string_basic.phpt
-+++ b/ext/openssl/tests/openssl_error_string_basic.phpt
-@@ -89,7 +89,7 @@ expect_openssl_errors('openssl_pkey_export_to_file opening', ['02001002', '2006D
- expect_openssl_errors('openssl_pkey_export_to_file pem', ['0906D06C']);
- // file to export cannot be written
- @openssl_pkey_export_to_file($private_key_file, $invalid_file_for_write);
--expect_openssl_errors('openssl_pkey_export_to_file write', ['2006D002', '09072007']);
-+expect_openssl_errors('openssl_pkey_export_to_file write', ['2006D002']);
- // succesful export
- @openssl_pkey_export($private_key_file_with_pass, $out, 'wrong pwd');
- expect_openssl_errors('openssl_pkey_export', ['06065064', '0906A065']);
-@@ -105,7 +105,7 @@ expect_openssl_errors('openssl_private_decrypt', ['04065072']);
- // public encrypt and decrypt with failed padding check and padding
- @openssl_public_encrypt("data", $crypted, $public_key_file, 1000);
- @openssl_public_decrypt("data", $crypted, $public_key_file);
--expect_openssl_errors('openssl_private_(en|de)crypt padding', ['0906D06C', '04068076', '0407006A', '04067072']);
-+expect_openssl_errors('openssl_private_(en|de)crypt padding', ['0906D06C', '04068076', '04067072']);
-
- // X509
- echo "X509 errors\n";
-@@ -126,7 +126,7 @@ expect_openssl_errors('openssl_x509_checkpurpose purpose', ['0B086079']);
- echo "CSR errors\n";
- // file for csr (file:///) fails when opennig (BIO_new_file)
- @openssl_csr_get_subject("file://" . $invalid_file_for_read);
--expect_openssl_errors('openssl_csr_get_subject open', ['02001002', '2006D080', '20068079', '0906D06C']);
-+expect_openssl_errors('openssl_csr_get_subject open', ['02001002', '2006D080']);
- // file or str csr is not correct PEM - failing PEM_read_bio_X509_REQ
- @openssl_csr_get_subject($crt_file);
- expect_openssl_errors('openssl_csr_get_subjec pem', ['0906D06C']);
-diff --git a/ext/openssl/tests/openssl_free_key.phpt b/ext/openssl/tests/openssl_free_key.phpt
-index 816f7cf..ea79ce7 100644
---- a/ext/openssl/tests/openssl_free_key.phpt
-+++ b/ext/openssl/tests/openssl_free_key.phpt
-@@ -22,7 +22,8 @@ for ($z = "", $i = 0; $i < 1024; $i++) {
- usleep($i);
- }
-
--$privkey = openssl_pkey_new();
-+$conf = array('config' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'openssl.cnf');
-+$privkey = openssl_pkey_new($conf);
-
- if ($privkey === false)
- die("failed to create private key");
-@@ -34,7 +35,7 @@ if ($key_file_name === false)
-
- echo "Export key to file\n";
-
--openssl_pkey_export_to_file($privkey, $key_file_name, $passphrase) or die("failed to export to file $key_file_name");
-+openssl_pkey_export_to_file($privkey, $key_file_name, $passphrase, $conf) or die("failed to export to file $key_file_name");
-
- echo "Load key from file - array syntax\n";
-
-diff --git a/ext/openssl/tests/sni_server.phpt b/ext/openssl/tests/sni_server.phpt
-index d44a69f..2d045df 100644
---- a/ext/openssl/tests/sni_server.phpt
-+++ b/ext/openssl/tests/sni_server.phpt
-@@ -3,6 +3,8 @@ sni_server
- --SKIPIF--
- <?php
- if (!extension_loaded("openssl")) die("skip openssl not loaded");
-+--XFAIL--
-+Known to fail with OpenSSL 1.1
- --FILE--
- <?php
- $serverCode = <<<'CODE'
-diff --git a/ext/phar/util.c b/ext/phar/util.c
-index 9f7fcae..f571429 100644
---- a/ext/phar/util.c
-+++ b/ext/phar/util.c
-@@ -1494,7 +1494,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ
- BIO *in;
- EVP_PKEY *key;
- EVP_MD *mdtype = (EVP_MD *) EVP_sha1();
-- EVP_MD_CTX md_ctx;
-+ EVP_MD_CTX *md_ctx;
- #else
- int tempsig;
- #endif
-@@ -1567,7 +1567,8 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ
- return FAILURE;
- }
-
-- EVP_VerifyInit(&md_ctx, mdtype);
-+ md_ctx = EVP_MD_CTX_create();
-+ EVP_VerifyInit(md_ctx, mdtype);
- read_len = end_of_phar;
-
- if (read_len > sizeof(buf)) {
-@@ -1579,7 +1580,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ
- php_stream_seek(fp, 0, SEEK_SET);
-
- while (read_size && (len = php_stream_read(fp, (char*)buf, read_size)) > 0) {
-- EVP_VerifyUpdate (&md_ctx, buf, len);
-+ EVP_VerifyUpdate (md_ctx, buf, len);
- read_len -= (zend_off_t)len;
-
- if (read_len < read_size) {
-@@ -1587,9 +1588,9 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ
- }
- }
-
-- if (EVP_VerifyFinal(&md_ctx, (unsigned char *)sig, sig_len, key) != 1) {
-+ if (EVP_VerifyFinal(md_ctx, (unsigned char *)sig, sig_len, key) != 1) {
- /* 1: signature verified, 0: signature does not match, -1: failed signature operation */
-- EVP_MD_CTX_cleanup(&md_ctx);
-+ EVP_MD_CTX_destroy(md_ctx);
-
- if (error) {
- spprintf(error, 0, "broken openssl signature");
-@@ -1598,7 +1599,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ
- return FAILURE;
- }
-
-- EVP_MD_CTX_cleanup(&md_ctx);
-+ EVP_MD_CTX_destroy(md_ctx);
- #endif
-
- *signature_len = phar_hex_str((const char*)sig, sig_len, signature);
---
-2.9.3
-