zend_long alg;
size_t passwd_len;
size_t salt_len;
+ int ret;
alg = (zend_long) crypto_pwhash_ALG_DEFAULT;
if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "lssll|l",
zend_error(E_WARNING, "maximum memory for the password hashing function is low");
}
hash = zend_string_alloc((size_t) hash_len, 0);
- if (crypto_pwhash
- ((unsigned char *) ZSTR_VAL(hash), (unsigned long long) hash_len,
- passwd, (unsigned long long) passwd_len, salt,
- (unsigned long long) opslimit, (size_t) memlimit,
- (int) alg) != 0) {
+ ret = -1;
+# ifdef crypto_pwhash_ALG_ARGON2ID13
+ if (alg == crypto_pwhash_ALG_ARGON2ID13) {
+ ret = crypto_pwhash_argon2id
+ ((unsigned char *) ZSTR_VAL(hash), (unsigned long long) hash_len,
+ passwd, (unsigned long long) passwd_len, salt,
+ (unsigned long long) opslimit, (size_t) memlimit, (int) alg);
+ }
+# endif
+ if (ret == -1) {
+ ret = crypto_pwhash
+ ((unsigned char *) ZSTR_VAL(hash), (unsigned long long) hash_len,
+ passwd, (unsigned long long) passwd_len, salt,
+ (unsigned long long) opslimit, (size_t) memlimit, (int) alg);
+ }
+ if (ret != 0) {
zend_string_free(hash);
zend_throw_exception(sodium_exception_ce, "internal error", 0);
return;