
    Mh                        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dS )!    )annotationsN)	dataclass)Any   )InvalidHashErrorUnsupportedParametersError)Typekwr   return
str | Nonec                 z   g }|                                  D ]\  }\  }}t          ||          smt          |t                    r d                    d |D                       }n|j        }|                    d| d| dt          |          j         d           |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     M/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/argon2/_utils.py	<genexpr>z_check_types.<locals>.<genexpr>   s$      $?$?AQZ$?$?$?$?$?$?    'z' must be a z (got )z, .N)items
isinstancetuplejoinr   appendtype)r
   errorsnamevaluetypess        r   _check_typesr"      s     F "

  nue%'' 	%'' '$?$?$?$?$???MMJDJJeJJ4;;3GJJJ   ||yy  3&&4r   boolc                 L    t           j        dk    pt          j                    dv S )N
emscripten)wasm32wasm64)sysplatformmachine r   r   _is_wasmr,   )   s,    <<' 8+;+=+= B , r   lengthintc                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+   )r-   remlast_group_lens      r   _decoded_str_lenr5   0   sE     1*C
axx	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dS )
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   r.   versionsalt_lenhash_len	time_costmemory_costparallelism)r:   r<   r=   r9   r;   r   r8   N)r   
__module____qualname____doc____annotations__	__slots__r+   r   r   r7   r7   @   sh          . JJJLLLMMMMMMNNNIIIr   r7   )argon2idargon2iargon2d)vmr   phashstrc           
        |                      d          }t          |          dk    r|                    dd           t          |          dk    rt          |d         rt          	 t          |d                  }d d	 |d         g|d
                              d          D             D             }n# t
          $ r	 t          d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*.

    Args:
        hash: An encoded Argon2 hash string.

    Returns:
        The parameters used to create the hash.

    .. versionadded:: 18.2.0
    $   r2   zv=18   r   r   c                4    i | ]\  }}|t          |          S r+   )r.   )r   krF   s      r   
<dictcomp>z&extract_parameters.<locals>.<dictcomp>   s4     
 
 
1 s1vv
 
 
r   c              3  @   K   | ]}|                     d           V  dS )=N)split)r   ss     r   r   z%extract_parameters.<locals>.<genexpr>   s=        !"     r   r1   ,Nr0   rF   r   rG   rH   )r   r9   r:   r8   r;   r<   r=   )rT   leninsertr   _NAME_TO_TYPE	Exceptionsortedkeys_REQUIRED_KEYSr7   r5   )rI   partsr   kvss       r   extract_parametersr`   p   so    JJsOOE 5zzQQ
5zzQQx 
)U1X&
 
 ',Qx&F%(..2E2E&F  
 
 
  ) ) )D() chhjj^++!#eAh--00!#eAh--00Cc(HH   s   )AB5 5CparamsNonec                ^    t                      r| j        dk    rd}t          |          dS dS )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   )ra   msgs     r   validate_params_for_platformre      s@     zz .f(A--D(---. .--r   )r
   r   r   r   )r   r#   )r-   r.   r   r.   )rI   rJ   r   r7   )ra   r7   r   rb   )
__future__r   r)   r(   dataclassesr   typingr   
exceptionsr   r   	low_levelr	   r   NoneTyper"   r,   r5   r7   IDIDrY   r[   r]   r`   re   r+   r   r   <module>ro      sS   # " " " " "  



 ! ! ! ! ! !       D D D D D D D D       4::   .   , , , ,  ( ( ( ( ( ( ( (V "WDFKK,--/ / / /d. . . . . .r   