--TEST-- Test interoperability of password_hash('argon2i') --SKIPIF-- PASSWORD_ARGON2_DEFAULT_MEMORY_COST * $mem, 'time_cost' => PASSWORD_ARGON2_DEFAULT_TIME_COST * $time, 'threads' => PASSWORD_ARGON2_DEFAULT_THREADS, ]; $password = random_bytes(32); echo "Using password: "; var_dump(base64_encode($password)); $hash = password_hash($password, 'argon2i', $opts); echo "Hash: "; var_dump($hash); var_dump(sodium_crypto_pwhash_str_verify($hash, $password)); // And verify that incorrect passwords fail. $password[0] = chr(ord($password[0]) ^ 1); var_dump(sodium_crypto_pwhash_str_verify($hash, $password)); } } --EXPECTF-- Argon2 provider: string(%d) "%s" Using password: string(44) "%s" Hash: string(96) "$argon2i$v=19$m=65536,t=4,p=1$%s$%s" bool(true) bool(false) Using password: string(44) "%s" Hash: string(96) "$argon2i$v=19$m=65536,t=8,p=1$%s$%s" bool(true) bool(false) Using password: string(44) "%s" Hash: string(97) "$argon2i$v=19$m=65536,t=16,p=1$%s$%s" bool(true) bool(false) Using password: string(44) "%s" Hash: string(97) "$argon2i$v=19$m=131072,t=4,p=1$%s$%s" bool(true) bool(false) Using password: string(44) "%s" Hash: string(97) "$argon2i$v=19$m=131072,t=8,p=1$%s$%s" bool(true) bool(false) Using password: string(44) "%s" Hash: string(98) "$argon2i$v=19$m=131072,t=16,p=1$%s$%s" bool(true) bool(false) Using password: string(44) "%s" Hash: string(97) "$argon2i$v=19$m=262144,t=4,p=1$%s$%s" bool(true) bool(false) Using password: string(44) "%s" Hash: string(97) "$argon2i$v=19$m=262144,t=8,p=1$%s$%s" bool(true) bool(false) Using password: string(44) "%s" Hash: string(98) "$argon2i$v=19$m=262144,t=16,p=1$%s$%s" bool(true) bool(false)