
    Xh                       d dl mZ d dlZd dlZd dlmZ d dlmZ ddlm	Z	m
Z
 ddlmZ  ed      Zd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ddZy)    )annotationsN)	dataclass)Any   )InvalidHashErrorUnsupportedParametersError)Typec                 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     A/var/www/html/myenv/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                 X    t         j                  dk(  xs t        j                         dv S )N
emscripten)wasm32wasm64)sysplatformmachine r    r   _is_wasmr)   )   s.    <<<' 8+;+;+= B , r    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   r(   )lengthremlast_group_lens      r   _decoded_str_lenr1   0   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.

    Attributes:
        type: Hash type.

        version: Argon2 version.

        salt_len: Length of the salt in bytes.

        hash_len: Length of the hash in bytes.

        time_cost: Time cost in iterations.

        memory_cost: Memory cost in kibibytes.

        parallelism: Number of parallel threads.

    .. versionadded:: 18.2.0
    r	   r   intversionsalt_lenhash_len	time_costmemory_costparallelism)r7   r9   r:   r6   r8   r   r5   N)r   
__module____qualname____doc____annotations__	__slots__r(   r    r   r3   r3   @   s5    . JLMMNIr    r3   )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*.

    Args:
        hash: An encoded Argon2 hash string.

    Returns:
        The parameters used to create the hash.

    .. 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>   s      !"s   r,   ,Nr+   rC   r   rD   rE   )r   r6   r7   r5   r8   r9   r:   )rL   leninsertr   _NAME_TO_TYPEr4   	Exceptionsortedkeys_REQUIRED_KEYSr3   r1   )hashpartsr   krC   kvss         r   extract_parametersrZ   p   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 c                R    t               r| j                  dk7  rd}t        |      yy)z
    Validate *params* against current platform.

    Args:
        params: Parameters to be validated

    Returns:
       None
    r   z4In WebAssembly environments `parallelism` must be 1.N)r)   r:   r   )paramsmsgs     r   validate_params_for_platformr^      s-     zf((A-D(-- .zr    )r   r   returnz
str | None)r_   bool)r.   r4   r_   r4   )rV   strr_   r3   )r\   r3   r_   None)
__future__r   r&   r%   dataclassesr   typingr   
exceptionsr   r   	low_levelr	   r   NoneTyper   r)   r1   r3   IDIDrQ   rS   rU   rZ   r^   r(   r    r   <module>rl      s    #  
 !  D  :.,  ( ( (V "WWDFFK,-/d.r    