
    }tfd                        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Zdd	Ze G d
 d             Ze	j                  e	j                   e	j"                  dZ ed      ZddZy)    )annotations)	dataclass)Any   )InvalidHashError)TypeNc                 P   g }| j                         D ]x  \  }\  }}t        ||      rt        |t              rdj                  d |D              }n|j                  }|j                  d| d| dt        |      j                   d       z |g k7  rdj                  |      dz   S y	)
zy
    Check each ``name: (value, types)`` in *kw*.

    Returns a human-readable string of all violations or `None``.
    z, or c              3  4   K   | ]  }|j                     y w)N)__name__).0ts     W/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/argon2/_utils.py	<genexpr>z_check_types.<locals>.<genexpr>   s     $?AQZZ$?s   'z' must be a z (got )z, .N)items
isinstancetuplejoinr   appendtype)kwerrorsnamevaluetypess        r   _check_typesr      s     F "
 nue%'%'$?$??MMD6eWF4;3G3G2HJ |yy 3&&    c                F    | 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    )lengthremlast_group_lens      r   _decoded_str_lenr(   &   s=     1*C
ax	Q;?^++r   c                  \    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y)
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   intversionsalt_lenhash_len	time_costmemory_costparallelism)r   r,   r-   r.   r/   r0   r1   N)r   
__module____qualname____doc____annotations__	__slots__r$   r   r   r*   r*   6   s5      JLMMNIr   r*   )argon2idargon2iargon2d)vmr   pc           
     F   | j                  d      }t        |      dk(  r|j                  dd       t        |      dk7  rt        |d   rt        	 t        |d      }d |d   g|d	   j                  d
      D        D ci c]  \  }}|t        |       }}}t        |j                               t        k7  rt        t        |t        t        |d               t        t        |d               |d   |d   |d   |d         S c c}}w # t        $ r t        dw xY w)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              3  >   K   | ]  }|j                  d         yw)=N)split)r   ss     r   r   z%extract_parameters.<locals>.<genexpr>z   s      !"s   r"   ,Nr!   r:   r   r;   r<   )r   r-   r.   r,   r/   r0   r1   )rC   leninsertr   _NAME_TO_TYPEr+   	Exceptionsortedkeys_REQUIRED_KEYSr*   r(   )hashpartsr   kr:   kvss         r   extract_parametersrQ   _   s.    JJsOE 5zQQ
5zQQx
)U1X&',Qx&F%(..2E&F
1 s1vI
 
 chhj^+!#eAh-0!#eAh-0Cc(HH 
  )D()s   0D D	D 	D D )r   r   returnz
str | None)r%   r+   rR   r+   )rM   strrR   r*   )
__future__r   dataclassesr   typingr   
exceptionsr   	low_levelr   r   NoneTyper   r(   r*   IDIDrH   rJ   rL   rQ   r$   r   r   <module>r]      so    # !  (  :.,  ! ! !H "WWDFFK,--r   