
    Eh                       S SK Jr  S SKrS SKrS SKJr  S SKJr  SSKJ	r	J
r
  SSKJr  \" S5      rSS jrSS	 jrSS
 jr\ " S S5      5       r\R&                  \R(                  \R*                  S.r\" S5      rSS jrSS jrg)    )annotationsN)	dataclass)Any   )InvalidHashErrorUnsupportedParametersError)Typec                 h   / nU R                  5        H  u  nu  p4[        X45      (       a  M  [        U[        5      (       a  SR                  S U 5       5      nOUR                  nUR                  SU SU S[        U5      R                   S35        M     U/ :w  a  SR                  U5      S-   $ g	)
zm
Check each ``name: (value, types)`` in *kw*.

Returns a human-readable string of all violations or `None``.
z, or c              3  8   #    U  H  oR                   v   M     g 7f)N)__name__).0ts     `C:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\argon2/_utils.py	<genexpr>_check_types.<locals>.<genexpr>   s     $?AZZ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 "
nu%''%''$?$??MMD6eWF4;3G3G2HJ !+ |yy 3&&    c                 f    [         R                  S:H  =(       d    [        R                  " 5       S;   $ )N
emscripten)wasm32wasm64)sysplatformmachine r!   r   _is_wasmr*   )   s.    <<<' 8+;+;+= B , r!   c                J    U S-  nUS:X  a  SnOUS:X  a  SnOSnU S-  S-  U-   $ )z;
Compute how long an encoded string of length *l* becomes.
         r   r   r)   )lengthremlast_group_lens      r   _decoded_str_lenr2   0   s=     1*C
ax	Q;?^++r!   c                  d    \ rS rSr% SrS\S'   S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   SrSrg)
Parameters@   az  
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)r9   r;   r<   r8   r:   r   r7   r)   N)r   
__module____qualname____firstlineno____doc____annotations__	__slots____static_attributes__r)   r!   r   r4   r4   @   s5    . JLMMNIr!   r4   )argon2idargon2iargon2d)vmr   pc           
     V   U R                  S5      n[        U5      S:X  a  UR                  SS5        [        U5      S:w  a  [        eUS   (       a  [        e [        US      nS US   /US	   R                  S
5      Q 5        VVs0 s H  u  p4U[        U5      _M     nnn[        UR                  5       5      [        :w  a  [        e[        U[        [        US   5      5      [        [        US   5      5      US   US   US   US   S9$ s  snnf ! [         a    [        Sef = f)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  B   #    U  H  oR                  S 5      v   M     g7f)=N)split)r   ss     r   r   %extract_parameters.<locals>.<genexpr>   s      &F&Fs   r-   ,Nr,   rG   r   rH   rI   )r   r8   r9   r7   r:   r;   r<   )rP   leninsertr   _NAME_TO_TYPEr6   	Exceptionsortedkeys_REQUIRED_KEYSr4   r2   )hashpartsr   krG   kvss         r   extract_parametersr_   p   s3    JJsOE 5zQQ
5zQQx
)U1X&',Qx&F%(..2E&F
 s1vI 	 
 chhj^+!#eAh-0!#eAh-0Cc(HH 
  )D()s   0D 	D!D D D(c                ^    [        5       (       a  U R                  S:w  a  Sn[        U5      egg)zm
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_platformrc      s/     zzf((A-D(-- .zr!   )r   r   returnz
str | None)rd   bool)r/   r6   rd   r6   )r[   strrd   r4   )ra   r4   rd   None)
__future__r   r'   r&   dataclassesr   typingr   
exceptionsr   r   	low_levelr	   r   NoneTyper    r*   r2   r4   IDIDrV   rX   rZ   r_   rc   r)   r!   r   <module>rq      s    #  
 !  D  :.,  ( ( (V "WWDFFK,-/d.r!   