o
    ߭hd                     @  s   d dl mZ d dlmZ d dlmZ ddlmZ ddlm	Z	 e
dZdddZdddZeG dd dZe	je	je	jdZedZdddZdS )    )annotations)	dataclass)Any   )InvalidHashError)TypeNkwr   return
str | Nonec               
   K  s   g }|   D ]0\}\}}t||s6t|tr!ddd |D }n|j}|d| d| dt|j d q|g krBd|d	 S d
S )zy
    Check each ``name: (value, types)`` in *kw*.

    Returns a human-readable string of all violations or `None``.
    z, or c                 s  s    | ]}|j V  qd S )N)__name__).0t r   R/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/argon2/_utils.py	<genexpr>   s    z_check_types.<locals>.<genexpr>'z' must be a z (got )z, .N)items
isinstancetuplejoinr   appendtype)r   errorsnamevaluetypesr   r   r   _check_types   s   

r   lengthintc                 C  s8   | d }|dkrd}n	|dkrd}nd}| d d | S )zC
    Compute how long an encoded string of length *l* becomes.
             r   r   r   )r   remlast_group_lenr   r   r   _decoded_str_len&   s   r&   c                   @  sN   e Zd ZU dZded< ded< ded< ded< ded< ded	< ded
< dZdS )
Parametersa  
    Argon2 hash parameters.

    See :doc:`parameters` on how to pick them.

    :ivar Type type: Hash type.
    :ivar int version: Argon2 version.
    :ivar int salt_len: Length of the salt in bytes.
    :ivar int hash_len: Length of the hash in bytes.
    :ivar int time_cost: Time cost in iterations.
    :ivar int memory_cost: Memory cost in kibibytes.
    :ivar int parallelism: Number of parallel threads.

    .. versionadded:: 18.2.0
    r   r   r    versionsalt_lenhash_len	time_costmemory_costparallelism)r   r(   r)   r*   r+   r,   r-   N)r   
__module____qualname____doc____annotations__	__slots__r   r   r   r   r'   6   s   
 r'   )argon2idargon2iargon2d)vmr   phashstrc              	   C  s   |  d}t|dkr|dd t|dkrt|d rtzt|d  }dd	 d
d |d g|d  dD D }W n
 tyG   tdw t| tkrRtt	|t
t|d t
t|d |d |d |d |d dS )z
    Extract parameters from an encoded *hash*.

    :param str params: An encoded Argon2 hash string.

    :rtype: Parameters

    .. versionadded:: 18.2.0
    $   r#   zv=18   r   r   c                 S  s   i | ]	\}}|t |qS r   )r    )r   kr6   r   r   r   
<dictcomp>x   s    z&extract_parameters.<locals>.<dictcomp>c                 s  s    | ]}| d V  qdS )=N)split)r   sr   r   r   r   z   s    

z%extract_parameters.<locals>.<genexpr>r"   ,Nr!   r6   r   r7   r8   )r   r)   r*   r(   r+   r,   r-   )rA   leninsertr   _NAME_TO_TYPE	Exceptionsortedkeys_REQUIRED_KEYSr'   r&   )r9   partsr   kvsr   r   r   extract_parameters_   s8   


rM   )r   r   r	   r
   )r   r    r	   r    )r9   r:   r	   r'   )
__future__r   dataclassesr   typingr   
exceptionsr   	low_levelr   r   NoneTyper   r&   r'   IDIDrF   rH   rJ   rM   r   r   r   r   <module>   s   

$