
    =bb                         d dl mZ d dlmZmZ ddlmZ ddlmZ  e	d          Z
dedee         fd	Zd
edefdZe G d d                      Zej        ej        ej        dZ ed          ZdedefdZdS )    )	dataclass)AnyOptional   )InvalidHash)TypeNkwreturnc            
         g }|                                  D ]\  }\  }}t          ||          syt          |t                    r d                    d |D                       }n|j        }|                    d                    ||t          |          j                             |g k    rd                    |          dz   S dS )zy
    Check each ``name: (value, types)`` in *kw*.

    Returns a human-readable string of all violations or `None``.
    z, or c              3   $   K   | ]}|j         V  d S )N)__name__).0ts     -lib/python3.11/site-packages/argon2/_utils.py	<genexpr>z_check_types.<locals>.<genexpr>   s$      $?$?AQZ$?$?$?$?$?$?    z('{name}' must be a {type} (got {actual}))nametypeactualz, .N)items
isinstancetuplejoinr   appendformatr   )r	   errorsr   valuetypess        r   _check_typesr       s     F "

 
 
nue%'' 		%'' '$?$?$?$?$???MM:AAE$u++2F B     ||yy  3&&4r   lc                 J    | dz  }|dk    rd}n|dk    rd}nd}| dz  dz  |z   S )zC
    Compute how long an encoded string of length *l* becomes.
             r   r    )r!   remlast_group_lens      r   _decoded_str_lenr)   &   sE     a%C
axx	6A:&&r   c                   b    e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   eed<   g 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   versionsalt_lenhash_len	time_costmemory_costparallelism)r   r,   r-   r.   r/   r0   r1   N)r   
__module____qualname____doc__r   __annotations__int	__slots__r&   r   r   r+   r+   6   sr            JJJLLLMMMMMMNNN  IIIr   r+   )argon2idargon2iargon2d)vmr   phashc           
         |                      d          }t          |          dk    r|                    dd           t          |          dk    rt          |d         dk    rt          	 t          |d                  }d	 d
 |d         g|d                              d          z   D             D             }n# t
          $ r t          w xY wt          |                                          t          k    rt          t          |t          t          |d                             t          t          |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                 4    i | ]\  }}|t          |          S r&   )r6   )r   kr;   s      r   
<dictcomp>z&extract_parameters.<locals>.<dictcomp>x   s4     
 
 
1 s1vv
 
 
r   c              3   @   K   | ]}|                     d           V  dS )=N)split)r   ss     r   r   z%extract_parameters.<locals>.<genexpr>z   s=        !"     r   r$   ,r#   r;   r   r<   r=   )r   r-   r.   r,   r/   r0   r1   )rI   leninsertr   _NAME_TO_TYPE	Exceptionsortedkeys_REQUIRED_KEYSr+   r)   )r>   partsr   kvss       r   extract_parametersrU   _   sm    JJsOOE 5zzQQ
5zzQQx2~~
U1X&
 
 ',Qxj58>>#3F3F&F  
 
 
     chhjj^++!#eAh--00!#eAh--00Cc(HH   s   -AB: :C)dataclassesr   typingr   r   
exceptionsr   	low_levelr   r   NoneTypestrr    r6   r)   r+   IDIDrN   rP   rR   rU   r&   r   r   <module>r_      s4   " ! ! ! ! !                 # # # # # #       4::s x}    2' ' ' ' ' '  ! ! ! ! ! ! ! !H "WDFKK,---S -Z - - - - - -r   