@@ -865,7 +865,7 @@ static int php_openssl_parse_config(struct php_x509_request * req, zval * option
865
865
zend_long cipher_algo = Z_LVAL_P (item );
866
866
const EVP_CIPHER * cipher = php_openssl_get_evp_cipher_from_algo (cipher_algo );
867
867
if (cipher == NULL ) {
868
- php_error_docref (NULL , E_WARNING , "Unknown cipher algorithm for private key" );
868
+ php_error_docref (NULL , E_WARNING , "Unknown cipher method for private key" );
869
869
return FAILURE ;
870
870
} else {
871
871
req -> priv_key_encrypt_cipher = cipher ;
@@ -1563,7 +1563,7 @@ PHP_FUNCTION(openssl_spki_new)
1563
1563
mdtype = php_openssl_get_evp_md_from_algo (algo );
1564
1564
1565
1565
if (!mdtype ) {
1566
- php_error_docref (NULL , E_WARNING , "Unknown signature algorithm " );
1566
+ php_error_docref (NULL , E_WARNING , "Unknown digest method " );
1567
1567
goto cleanup ;
1568
1568
}
1569
1569
@@ -1589,7 +1589,7 @@ PHP_FUNCTION(openssl_spki_new)
1589
1589
1590
1590
if (!NETSCAPE_SPKI_sign (spki , pkey , mdtype )) {
1591
1591
php_openssl_store_errors ();
1592
- php_error_docref (NULL , E_WARNING , "Unable to sign with specified algorithm " );
1592
+ php_error_docref (NULL , E_WARNING , "Unable to sign with specified digest method " );
1593
1593
goto cleanup ;
1594
1594
}
1595
1595
@@ -1845,7 +1845,7 @@ zend_string* php_openssl_x509_fingerprint(X509 *peer, const char *method, zend_b
1845
1845
zend_string * ret ;
1846
1846
1847
1847
if (!(mdtype = EVP_get_digestbyname (method ))) {
1848
- php_error_docref (NULL , E_WARNING , "Unknown signature algorithm" );
1848
+ php_error_docref (NULL , E_WARNING , "Unknown hashing algorithm" );
1849
1849
return NULL ;
1850
1850
} else if (!X509_digest (peer , mdtype , md , & n )) {
1851
1851
php_openssl_store_errors ();
@@ -3753,7 +3753,7 @@ static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req
3753
3753
{
3754
3754
EC_KEY * eckey ;
3755
3755
if (req -> curve_name == NID_undef ) {
3756
- php_error_docref (NULL , E_WARNING , "Missing configuration value: ' curve_name' not set" );
3756
+ php_error_docref (NULL , E_WARNING , "Missing configuration value: \" curve_name\" not set" );
3757
3757
return NULL ;
3758
3758
}
3759
3759
eckey = EC_KEY_new_by_curve_name (req -> curve_name );
@@ -4465,11 +4465,13 @@ PHP_FUNCTION(openssl_pkey_get_private)
4465
4465
size_t passphrase_len = sizeof ("" )- 1 ;
4466
4466
php_openssl_pkey_object * key_object ;
4467
4467
4468
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "z|s" , & cert , & passphrase , & passphrase_len ) == FAILURE ) {
4468
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "z|s! " , & cert , & passphrase , & passphrase_len ) == FAILURE ) {
4469
4469
RETURN_THROWS ();
4470
4470
}
4471
4471
4472
- PHP_OPENSSL_CHECK_SIZE_T_TO_INT (passphrase_len , passphrase , 2 );
4472
+ if (passphrase ) {
4473
+ PHP_OPENSSL_CHECK_SIZE_T_TO_INT (passphrase_len , passphrase , 2 );
4474
+ }
4473
4475
4474
4476
pkey = php_openssl_pkey_from_zval (cert , 0 , passphrase , passphrase_len );
4475
4477
if (pkey == NULL ) {
@@ -4847,7 +4849,7 @@ PHP_FUNCTION(openssl_pkcs7_verify)
4847
4849
4848
4850
RETVAL_LONG (-1 );
4849
4851
4850
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "pl|pappp " , & filename , & filename_len ,
4852
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "pl|p!a!p!p!p! " , & filename , & filename_len ,
4851
4853
& flags , & signersfilename , & signersfilename_len , & cainfo ,
4852
4854
& extracerts , & extracerts_len , & datafilename , & datafilename_len , & p7bfilename , & p7bfilename_len ) == FAILURE ) {
4853
4855
RETURN_THROWS ();
@@ -6082,7 +6084,7 @@ PHP_FUNCTION(openssl_cms_decrypt)
6082
6084
Z_PARAM_PATH (outfilename , outfilename_len )
6083
6085
Z_PARAM_ZVAL (recipcert )
6084
6086
Z_PARAM_OPTIONAL
6085
- Z_PARAM_ZVAL (recipkey )
6087
+ Z_PARAM_ZVAL_OR_NULL (recipkey )
6086
6088
Z_PARAM_LONG (encoding )
6087
6089
ZEND_PARSE_PARAMETERS_END ();
6088
6090
@@ -6128,8 +6130,7 @@ PHP_FUNCTION(openssl_cms_decrypt)
6128
6130
cms = SMIME_read_CMS (in , & datain );
6129
6131
break ;
6130
6132
default :
6131
- php_error_docref (NULL , E_WARNING ,
6132
- "Unknown OPENSSL encoding" );
6133
+ zend_argument_value_error (5 , "must be an OPENSSL_ENCODING_* constant" );
6133
6134
goto clean_exit ;
6134
6135
}
6135
6136
@@ -6456,13 +6457,18 @@ PHP_FUNCTION(openssl_sign)
6456
6457
char * data ;
6457
6458
size_t data_len ;
6458
6459
EVP_MD_CTX * md_ctx ;
6459
- zval * method = NULL ;
6460
- zend_long signature_algo = OPENSSL_ALGO_SHA1 ;
6460
+ zend_string * method_str = NULL ;
6461
+ zend_long method_long = OPENSSL_ALGO_SHA1 ;
6461
6462
const EVP_MD * mdtype ;
6462
6463
6463
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "szz|z" , & data , & data_len , & signature , & key , & method ) == FAILURE ) {
6464
- RETURN_THROWS ();
6465
- }
6464
+ ZEND_PARSE_PARAMETERS_START (3 , 4 )
6465
+ Z_PARAM_STRING (data , data_len )
6466
+ Z_PARAM_ZVAL (signature )
6467
+ Z_PARAM_ZVAL (key )
6468
+ Z_PARAM_OPTIONAL
6469
+ Z_PARAM_STR_OR_LONG (method_str , method_long )
6470
+ ZEND_PARSE_PARAMETERS_END ();
6471
+
6466
6472
pkey = php_openssl_pkey_from_zval (key , 0 , "" , 0 );
6467
6473
if (pkey == NULL) {
6468
6474
if (!EG (exception )) {
@@ -6471,17 +6477,10 @@ PHP_FUNCTION(openssl_sign)
6471
6477
RETURN_FALSE ;
6472
6478
}
6473
6479
6474
- if (method == NULL || Z_TYPE_P (method ) == IS_LONG ) {
6475
- if (method != NULL ) {
6476
- signature_algo = Z_LVAL_P (method );
6477
- }
6478
- mdtype = php_openssl_get_evp_md_from_algo (signature_algo );
6479
- } else if (Z_TYPE_P (method ) == IS_STRING ) {
6480
- mdtype = EVP_get_digestbyname (Z_STRVAL_P (method ));
6480
+ if (method_str ) {
6481
+ mdtype = EVP_get_digestbyname (ZSTR_VAL (method_str ));
6481
6482
} else {
6482
- // TODO Use proper ZPP check.
6483
- zend_argument_type_error (4 , "must be of type string|int|null, %s given" , zend_zval_type_name (method ));
6484
- RETURN_THROWS ();
6483
+ mdtype = php_openssl_get_evp_md_from_algo (method_long );
6485
6484
}
6486
6485
if (!mdtype ) {
6487
6486
php_error_docref (NULL , E_WARNING , "Unknown signature algorithm" );
@@ -6522,26 +6521,23 @@ PHP_FUNCTION(openssl_verify)
6522
6521
size_t data_len ;
6523
6522
char * signature ;
6524
6523
size_t signature_len ;
6525
- zval * method = NULL ;
6526
- zend_long signature_algo = OPENSSL_ALGO_SHA1 ;
6524
+ zend_string * method_str = NULL ;
6525
+ zend_long method_long = OPENSSL_ALGO_SHA1 ;
6527
6526
6528
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "ssz|z" , & data , & data_len , & signature , & signature_len , & key , & method ) == FAILURE ) {
6529
- RETURN_THROWS ();
6530
- }
6527
+ ZEND_PARSE_PARAMETERS_START (3 , 4 )
6528
+ Z_PARAM_STRING (data , data_len )
6529
+ Z_PARAM_STRING (signature , signature_len )
6530
+ Z_PARAM_ZVAL (key )
6531
+ Z_PARAM_OPTIONAL
6532
+ Z_PARAM_STR_OR_LONG (method_str , method_long )
6533
+ ZEND_PARSE_PARAMETERS_END ();
6531
6534
6532
6535
PHP_OPENSSL_CHECK_SIZE_T_TO_UINT (signature_len , signature , 2 );
6533
6536
6534
- if (method == NULL || Z_TYPE_P (method ) == IS_LONG ) {
6535
- if (method != NULL ) {
6536
- signature_algo = Z_LVAL_P (method );
6537
- }
6538
- mdtype = php_openssl_get_evp_md_from_algo (signature_algo );
6539
- } else if (Z_TYPE_P (method ) == IS_STRING ) {
6540
- mdtype = EVP_get_digestbyname (Z_STRVAL_P (method ));
6537
+ if (method_str ) {
6538
+ mdtype = EVP_get_digestbyname (ZSTR_VAL (method_str ));
6541
6539
} else {
6542
- // TODO Use proper ZPP check.
6543
- zend_argument_type_error (4 , "must be of type string|int|null, %s given" , zend_zval_type_name (method ));
6544
- RETURN_THROWS ();
6540
+ mdtype = php_openssl_get_evp_md_from_algo (method_long );
6545
6541
}
6546
6542
if (!mdtype ) {
6547
6543
php_error_docref (NULL , E_WARNING , "Unknown signature algorithm" );
@@ -6579,8 +6575,8 @@ PHP_FUNCTION(openssl_seal)
6579
6575
unsigned char iv_buf [EVP_MAX_IV_LENGTH + 1 ], * buf = NULL , * * eks ;
6580
6576
char * data ;
6581
6577
size_t data_len ;
6582
- char * method = NULL ;
6583
- size_t method_len = 0 ;
6578
+ char * method ;
6579
+ size_t method_len ;
6584
6580
const EVP_CIPHER * cipher ;
6585
6581
EVP_CIPHER_CTX * ctx ;
6586
6582
@@ -6606,7 +6602,7 @@ PHP_FUNCTION(openssl_seal)
6606
6602
6607
6603
iv_len = EVP_CIPHER_iv_length (cipher );
6608
6604
if (!iv && iv_len > 0 ) {
6609
- zend_argument_value_error (6 , "must provide an IV for chosen cipher algorithm " );
6605
+ zend_argument_value_error (6 , "cannot be null for the chosen cipher method " );
6610
6606
RETURN_THROWS ();
6611
6607
}
6612
6608
@@ -6707,11 +6703,11 @@ PHP_FUNCTION(openssl_open)
6707
6703
size_t data_len ;
6708
6704
char * ekey ;
6709
6705
size_t ekey_len ;
6710
- char * method = NULL , * iv = NULL ;
6711
- size_t method_len = 0 , iv_len = 0 ;
6706
+ char * method , * iv = NULL ;
6707
+ size_t method_len , iv_len = 0 ;
6712
6708
const EVP_CIPHER * cipher ;
6713
6709
6714
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "szszs|s" , & data , & data_len , & opendata ,
6710
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "szszs|s! " , & data , & data_len , & opendata ,
6715
6711
& ekey , & ekey_len , & privkey , & method , & method_len , & iv , & iv_len ) == FAILURE ) {
6716
6712
RETURN_THROWS ();
6717
6713
}
@@ -6729,14 +6725,14 @@ PHP_FUNCTION(openssl_open)
6729
6725
6730
6726
cipher = EVP_get_cipherbyname (method );
6731
6727
if (!cipher ) {
6732
- php_error_docref (NULL , E_WARNING , "Unknown signature algorithm " );
6728
+ php_error_docref (NULL , E_WARNING , "Unknown cipher method " );
6733
6729
RETURN_FALSE ;
6734
6730
}
6735
6731
6736
6732
cipher_iv_len = EVP_CIPHER_iv_length (cipher );
6737
6733
if (cipher_iv_len > 0 ) {
6738
6734
if (!iv ) {
6739
- zend_argument_value_error (6 , "must provide an IV for chosen cipher algorithm " );
6735
+ zend_argument_value_error (6 , "cannot be null for the chosen cipher method " );
6740
6736
RETURN_THROWS ();
6741
6737
}
6742
6738
if ((size_t )cipher_iv_len != iv_len ) {
@@ -6858,7 +6854,7 @@ PHP_FUNCTION(openssl_digest)
6858
6854
}
6859
6855
mdtype = EVP_get_digestbyname (method );
6860
6856
if (!mdtype ) {
6861
- php_error_docref (NULL , E_WARNING , "Unknown signature algorithm " );
6857
+ php_error_docref (NULL , E_WARNING , "Unknown digest method " );
6862
6858
RETURN_FALSE ;
6863
6859
}
6864
6860
@@ -7118,7 +7114,7 @@ PHP_OPENSSL_API zend_string* php_openssl_encrypt(
7118
7114
7119
7115
cipher_type = EVP_get_cipherbyname (method );
7120
7116
if (!cipher_type ) {
7121
- php_error_docref (NULL , E_WARNING , "Unknown cipher algorithm " );
7117
+ php_error_docref (NULL , E_WARNING , "Unknown cipher method " );
7122
7118
return NULL ;
7123
7119
}
7124
7120
@@ -7234,7 +7230,7 @@ PHP_OPENSSL_API zend_string* php_openssl_decrypt(
7234
7230
7235
7231
cipher_type = EVP_get_cipherbyname (method );
7236
7232
if (!cipher_type ) {
7237
- php_error_docref (NULL , E_WARNING , "Unknown cipher algorithm " );
7233
+ php_error_docref (NULL , E_WARNING , "Unknown cipher method " );
7238
7234
return NULL ;
7239
7235
}
7240
7236
@@ -7296,7 +7292,7 @@ PHP_FUNCTION(openssl_decrypt)
7296
7292
size_t data_len , method_len , password_len , iv_len = 0 , tag_len = 0 , aad_len = 0 ;
7297
7293
zend_string * ret ;
7298
7294
7299
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "sss|lsss " , & data , & data_len , & method , & method_len ,
7295
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "sss|lss!s " , & data , & data_len , & method , & method_len ,
7300
7296
& password , & password_len , & options , & iv , & iv_len , & tag , & tag_len , & aad , & aad_len ) == FAILURE ) {
7301
7297
RETURN_THROWS ();
7302
7298
}
@@ -7320,7 +7316,7 @@ PHP_OPENSSL_API zend_long php_openssl_cipher_iv_length(const char *method)
7320
7316
7321
7317
cipher_type = EVP_get_cipherbyname (method );
7322
7318
if (!cipher_type ) {
7323
- php_error_docref (NULL , E_WARNING , "Unknown cipher algorithm " );
7319
+ php_error_docref (NULL , E_WARNING , "Unknown cipher method " );
7324
7320
return -1 ;
7325
7321
}
7326
7322
0 commit comments