@@ -1856,6 +1856,7 @@ PHP_FUNCTION(sodium_crypto_pwhash)
1856
1856
zend_long alg ;
1857
1857
size_t passwd_len ;
1858
1858
size_t salt_len ;
1859
+ int ret ;
1859
1860
1860
1861
alg = (zend_long ) crypto_pwhash_ALG_DEFAULT ;
1861
1862
if (zend_parse_parameters_throw (ZEND_NUM_ARGS (), "lssll|l" ,
@@ -1905,11 +1906,22 @@ PHP_FUNCTION(sodium_crypto_pwhash)
1905
1906
zend_error (E_WARNING , "maximum memory for the password hashing function is low" );
1906
1907
}
1907
1908
hash = zend_string_alloc ((size_t ) hash_len , 0 );
1908
- if (crypto_pwhash
1909
- ((unsigned char * ) ZSTR_VAL (hash ), (unsigned long long ) hash_len ,
1910
- passwd , (unsigned long long ) passwd_len , salt ,
1911
- (unsigned long long ) opslimit , (size_t ) memlimit ,
1912
- (int ) alg ) != 0 ) {
1909
+ ret = -1 ;
1910
+ # ifdef crypto_pwhash_ALG_ARGON2ID13
1911
+ if (alg == crypto_pwhash_ALG_ARGON2ID13 ) {
1912
+ ret = crypto_pwhash_argon2id
1913
+ ((unsigned char * ) ZSTR_VAL (hash ), (unsigned long long ) hash_len ,
1914
+ passwd , (unsigned long long ) passwd_len , salt ,
1915
+ (unsigned long long ) opslimit , (size_t ) memlimit , (int ) alg );
1916
+ }
1917
+ # endif
1918
+ if (ret == -1 ) {
1919
+ ret = crypto_pwhash
1920
+ ((unsigned char * ) ZSTR_VAL (hash ), (unsigned long long ) hash_len ,
1921
+ passwd , (unsigned long long ) passwd_len , salt ,
1922
+ (unsigned long long ) opslimit , (size_t ) memlimit , (int ) alg );
1923
+ }
1924
+ if (ret != 0 ) {
1913
1925
zend_string_free (hash );
1914
1926
zend_throw_exception (sodium_exception_ce , "internal error" , 0 );
1915
1927
return ;
0 commit comments