o
    I@h                     @   sl   d dl mZmZ d dlmZ eddddddZd	ed
efddZded	ed
e	fddZ
ded
e	fddZdS )    )PasswordHasher
exceptions)check_password_hash   i            )Z	time_costZmemory_costZparallelismZhash_lensalt_lenrawreturnc                 C   s
   t | S )u   
    Генерирует Argon2id-хеш для строки raw.
    Возвращает строку вида "$argon2id$v=19$m=102400,t=2,p=8$..."
    )phhash)r
    r   '/var/www/html/app/security/passwords.pyhash_password   s   
r   stored_hashc                 C   s:   |  drzt| |W S  tjy   Y dS w t| |S )u  
    Проверяет, соответствует ли сырая строка raw сохранённому хешу stored_hash.
    ▪ Если stored_hash — Argon2 (начинается с "$argon2id$"), проверяем через ph.verify().
    ▪ Иначе (старый формат PBKDF2-SHA1 из werkzeug) — делаем fallback на check_password_hash().
    
$argon2id$F)
startswithr   verify	argon_excZVerifyMismatchErrorr   )r   r
   r   r   r   verify_password   s   

r   c                 C   s   |  d S )u   
    Возвращает True, если хеш не в формате Argon2 (т.е. старый PBKDF2),
    чтобы при следующем входе обновить хеш.
    r   )r   )r   r   r   r   needs_rehash$   s   r   N)Zargon2r   r   r   Zwerkzeug.securityr   r   strr   boolr   r   r   r   r   r   <module>   s   