o
    -i                     @  s   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dZd"ddZd#ddZeG dd dZejejejdZedZd$ddZd%dd ZdS )&    )annotationsN)	dataclass)Any   )InvalidHashErrorUnsupportedParametersError)Typekwr   return
str | Nonec               
   K  s   g }|   D ]0\}\}}t||s6t|tr!ddd |D }n|j}|d| d| dt|j d q|g krBd|d	 S d
S )zy
    Check each ``name: (value, types)`` in *kw*.

    Returns a human-readable string of all violations or `None``.
    z, or c                 s  s    | ]}|j V  qd S )N)__name__).0t r   [/home/esfera/Desktop/Rishu/Inhouse_Email/venv/lib/python3.10/site-packages/argon2/_utils.py	<genexpr>   s    z_check_types.<locals>.<genexpr>'z' must be a z (got )z, .N)items
isinstancetuplejoinr   appendtype)r	   errorsnamevaluetypesr   r   r   _check_types   s   

r   boolc                   C  s   t jdkp
t dv S )N
emscripten)wasm32wasm64)sysplatformmachiner   r   r   r   _is_wasm)   s   r'   lengthintc                 C  s8   | d }|dkrd}n	|dkrd}nd}| d d | S )zC
    Compute how long an encoded string of length *l* becomes.
             r   r   r   )r(   remlast_group_lenr   r   r   _decoded_str_len0   s   r/   c                   @  sN   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)r3   r5   r6   r2   r4   r   r1   N)r   
__module____qualname____doc____annotations__	__slots__r   r   r   r   r0   @   s   
 r0   )argon2idargon2iargon2d)vmr   phashstrc              	   C  s   |  d}t|dkr|dd t|dkrt|d rtzt|d  }dd	 d
d |d g|d  dD D }W n
 tyG   tdw t| tkrRtt	|t
t|d t
t|d |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
    $   r,   zv=18   r   r   c                 S  s   i | ]	\}}|t |qS r   )r)   )r   kr?   r   r   r   
<dictcomp>   s    z&extract_parameters.<locals>.<dictcomp>c                 s  s    | ]}| d V  qdS )=N)split)r   sr   r   r   r      s    

z%extract_parameters.<locals>.<genexpr>r+   ,Nr*   r?   r   r@   rA   )r   r2   r3   r1   r4   r5   r6   )rJ   leninsertr   _NAME_TO_TYPE	Exceptionsortedkeys_REQUIRED_KEYSr0   r/   )rB   partsr   kvsr   r   r   extract_parametersp   s8   

rV   paramsNonec                 C  s$   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'   r6   r   )rW   msgr   r   r   validate_params_for_platform   s   
rZ   )r	   r   r
   r   )r
   r    )r(   r)   r
   r)   )rB   rC   r
   r0   )rW   r0   r
   rX   )
__future__r   r%   r$   dataclassesr   typingr   
exceptionsr   r   	low_levelr   r   NoneTyper   r'   r/   r0   IDIDrO   rQ   rS   rV   rZ   r   r   r   r   <module>   s"   


+
2