diff options
| author | Stanislav Malyshev <stas@php.net> | 2014-11-30 18:32:56 -0800 | 
|---|---|---|
| committer | Stanislav Malyshev <stas@php.net> | 2014-11-30 18:32:56 -0800 | 
| commit | c64949626dd21ec571f48a54d187da4c9ad312b7 (patch) | |
| tree | ec3fef90ff28ffc233af65bd2e8aff92d7aa1232 /ext/openssl/openssl.c | |
| parent | 25e3e78016572cf86e4dff7bb0179f639abd5603 (diff) | |
| parent | de65eaa8c8faf6ae256aef3a2a074255b249a6f0 (diff) | |
| download | php-git-c64949626dd21ec571f48a54d187da4c9ad312b7.tar.gz | |
Merge branch 'PHP-5.6'
* PHP-5.6:
  Adds test cases for openssl EC improvements
  Adds better handling of EC keys: OPENSSL_KEYTYPE_EC
  Fixes memory leak introduced in 2b9af967
Conflicts:
	ext/openssl/openssl.c
Diffstat (limited to 'ext/openssl/openssl.c')
| -rwxr-xr-x | ext/openssl/openssl.c | 57 | 
1 files changed, 27 insertions, 30 deletions
| diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index 147a9ec919..60d36ff743 100755 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -3879,42 +3879,39 @@ PHP_FUNCTION(openssl_pkey_get_details)  #ifdef HAVE_EVP_PKEY_EC  		case EVP_PKEY_EC:  			ktype = OPENSSL_KEYTYPE_EC; -			if (pkey->pkey.ec == NULL) { -				break; -			} - -			zval ec; -			const EC_GROUP *ec_group; -			int nid; -			char *crv_sn; -			ASN1_OBJECT *obj; -			// openssl recommends a buffer length of 80 -			char oir_buf[80]; +			if (pkey->pkey.ec != NULL) { +				zval ec; +				const EC_GROUP *ec_group; +				int nid; +				char *crv_sn; +				ASN1_OBJECT *obj; +				// openssl recommends a buffer length of 80 +				char oir_buf[80]; -			ec_group = EC_KEY_get0_group(EVP_PKEY_get1_EC_KEY(pkey)); +				ec_group = EC_KEY_get0_group(EVP_PKEY_get1_EC_KEY(pkey)); -			// Curve nid (numerical identifier) used for ASN1 mapping -			nid = EC_GROUP_get_curve_name(ec_group); -			if (nid == NID_undef) { -				break; -			} +				// Curve nid (numerical identifier) used for ASN1 mapping +				nid = EC_GROUP_get_curve_name(ec_group); +				if (nid == NID_undef) { +					break; +				} +				array_init(&ec); -			array_init(&ec); +				// Short object name +				crv_sn = (char*) OBJ_nid2sn(nid); +				if (crv_sn != NULL) { +					add_assoc_string(&ec, "curve_name", crv_sn); +				} -			// Short object name -			crv_sn = (char*) OBJ_nid2sn(nid); -			if (crv_sn != NULL) { -				add_assoc_string(&ec, "curve_name", crv_sn); -			} +				obj = OBJ_nid2obj(nid); +				if (obj != NULL) { +					int oir_len = OBJ_obj2txt(oir_buf, sizeof(oir_buf), obj, 1); +					add_assoc_stringl(&ec, "curve_oid", (char*)oir_buf, oir_len); +					ASN1_OBJECT_free(obj); +				} -			obj = OBJ_nid2obj(nid); -			if (obj != NULL) { -				int oir_len = OBJ_obj2txt(oir_buf, sizeof(oir_buf), obj, 1); -				add_assoc_stringl(&ec, "curve_oid", (char*)oir_buf, oir_len); -				ASN1_OBJECT_free(obj); +				add_assoc_zval(return_value, "ec", &ec);  			} - -			add_assoc_zval(return_value, "ec", &ec);  			break;  #endif  		default: | 
