REGISTER_LONG_CONSTANT("PASSWORD_BCRYPT", PHP_PASSWORD_BCRYPT, CONST_CS | CONST_PERSISTENT);
#if HAVE_ARGON2LIB
REGISTER_LONG_CONSTANT("PASSWORD_ARGON2I", PHP_PASSWORD_ARGON2I, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PASSWORD_ARGON2D", PHP_PASSWORD_ARGON2D, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PASSWORD_ARGON2", PHP_PASSWORD_ARGON2, CONST_CS | CONST_PERSISTENT);
#endif
#if HAVE_ARGON2LIB
case PHP_PASSWORD_ARGON2I:
return "argon2i";
- case PHP_PASSWORD_ARGON2D:
- return "argon2d";
#endif
case PHP_PASSWORD_UNKNOWN:
default:
#if HAVE_ARGON2LIB
if (len >= sizeof("$argon2i$")-1 && !memcmp(hash, "$argon2i$", sizeof("$argon2i$")-1)) {
return PHP_PASSWORD_ARGON2I;
- } else if (len >= sizeof("$argon2d$")-1 && !memcmp(hash, "$argon2d$", sizeof("$argon2d$")-1)) {
- return PHP_PASSWORD_ARGON2D;
}
#endif
break;
#if HAVE_ARGON2LIB
case PHP_PASSWORD_ARGON2I:
- case PHP_PASSWORD_ARGON2D:
{
zend_long v = 0;
zend_long m_cost = PHP_PASSWORD_ARGON2_MEMORY_COST;
zend_long t_cost = PHP_PASSWORD_ARGON2_TIME_COST;
zend_long threads = PHP_PASSWORD_ARGON2_THREADS;
- sscanf(hash, "$%*[argon2id]$v=" ZEND_LONG_FMT "$m=" ZEND_LONG_FMT ",t=" ZEND_LONG_FMT ",p=" ZEND_LONG_FMT, &v, &m_cost, &t_cost, &threads);
+ sscanf(hash, "$%*[argon2i]$v=" ZEND_LONG_FMT "$m=" ZEND_LONG_FMT ",t=" ZEND_LONG_FMT ",p=" ZEND_LONG_FMT, &v, &m_cost, &t_cost, &threads);
add_assoc_long(&options, "m_cost", m_cost);
add_assoc_long(&options, "t_cost", t_cost);
add_assoc_long(&options, "threads", threads);
break;
#if HAVE_ARGON2LIB
case PHP_PASSWORD_ARGON2I:
- case PHP_PASSWORD_ARGON2D:
{
zend_long v = 0;
zend_long new_m_cost = PHP_PASSWORD_ARGON2_MEMORY_COST, m_cost = 0;
new_threads = zval_get_long(option_buffer);
}
- sscanf(hash, "$%*[argon2id]$v=" ZEND_LONG_FMT "$m=" ZEND_LONG_FMT ",t=" ZEND_LONG_FMT ",p=" ZEND_LONG_FMT, &v, &m_cost, &t_cost, &threads);
+ sscanf(hash, "$%*[argon2i]$v=" ZEND_LONG_FMT "$m=" ZEND_LONG_FMT ",t=" ZEND_LONG_FMT ",p=" ZEND_LONG_FMT, &v, &m_cost, &t_cost, &threads);
if (new_t_cost != t_cost || new_m_cost != m_cost || new_threads != threads) {
RETURN_TRUE;
switch(algo) {
#if HAVE_ARGON2LIB
case PHP_PASSWORD_ARGON2I:
- case PHP_PASSWORD_ARGON2D:
{
argon2_type type = Argon2_i;
- if (algo == PHP_PASSWORD_ARGON2I) {
- type = Argon2_i;
- } else if (algo == PHP_PASSWORD_ARGON2D) {
- type = Argon2_d;
- }
-
status = argon2_verify(hash, password, password_len, type);
if (status == ARGON2_OK) {
break;
#if HAVE_ARGON2LIB
case PHP_PASSWORD_ARGON2I:
- case PHP_PASSWORD_ARGON2D:
{
if (options && (option_buffer = zend_hash_str_find(options, "m_cost", sizeof("m_cost")-1)) != NULL) {
m_cost = zval_get_long(option_buffer);
RETURN_NULL();
}
- if (algo == PHP_PASSWORD_ARGON2D) {
- type = Argon2_d;
- } else if (algo == PHP_PASSWORD_ARGON2I) {
- type = Argon2_i;
- }
-
required_salt_len = 16;
}
break;
break;
#if HAVE_ARGON2LIB
case PHP_PASSWORD_ARGON2I:
- case PHP_PASSWORD_ARGON2D:
{
size_t out_len = 32;
size_t encoded_len;
?>
--FILE--
<?php
-var_dump(password_needs_rehash('$argon2i$v=19$m=65536,t=3,p=1$YkprUktYN0lHQTd2bWRFeA$79aA+6IvgclpDAJVoezProlqzIPy7do/P0sBDXS9Nn0', PASSWORD_ARGON2, ['m_cost' => 1<<17]));
-var_dump(password_needs_rehash('$argon2i$v=19$m=65536,t=3,p=1$YkprUktYN0lHQTd2bWRFeA$79aA+6IvgclpDAJVoezProlqzIPy7do/P0sBDXS9Nn0', PASSWORD_ARGON2, ['t_cost' => 2]));
-var_dump(password_needs_rehash('$argon2i$v=19$m=65536,t=3,p=1$YkprUktYN0lHQTd2bWRFeA$79aA+6IvgclpDAJVoezProlqzIPy7do/P0sBDXS9Nn0', PASSWORD_ARGON2, ['threads' => 2]));
+
+$hash = '$argon2i$v=19$m=65536,t=3,p=1$YkprUktYN0lHQTd2bWRFeA$79aA+6IvgclpDAJVoezProlqzIPy7do/P0sBDXS9Nn0';
+var_dump(password_needs_rehash($hash, PASSWORD_ARGON2));
+var_dump(password_needs_rehash($hash, PASSWORD_ARGON2, ['m_cost' => 1<<17]));
+var_dump(password_needs_rehash($hash, PASSWORD_ARGON2, ['t_cost' => 2]));
+var_dump(password_needs_rehash($hash, PASSWORD_ARGON2, ['threads' => 2]));
echo "OK!";
?>
--EXPECT--
+bool(false)
bool(true)
bool(true)
bool(true)