o
    5Wc>                  
   @   s   d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	 d dl
mZ dedefdd	Zd
ejdede je ddfddZdedede jg ejf dedef
ddZG dd deZG dd deZdS )    N)utils)AlreadyFinalized
InvalidKey)constant_timehasheshmac)KeyDerivationFunctionnreturnc                 C   s   | j dddS )N   big)length	byteorder)to_bytes)r	    r   ND:\Flask\env\Lib\site-packages\cryptography/hazmat/primitives/kdf/concatkdf.py_int_to_u32be   s   r   	algorithmr   	otherinfoc                 C   s<   | j d }||krtd||d urtd| d S d S )Nl    z'Cannot derive keys larger than {} bits.r   )digest_size
ValueErrorformatr   _check_bytes)r   r   r   
max_lengthr   r   r   _common_args_checks   s   
r   key_materialauxfnc                 C   s   t d|  dg}d}d}||kr<| }|t| ||  || ||  |t|d 7 }|d7 }||ksd|d | S )Nr       r      )r   Z_check_byteslikeupdater   appendfinalizelenjoin)r   r   r   r   outputZoutlencounterhr   r   r   _concatkdf_derive#   s   

	r(   c                	   @   sl   e Zd Z	ddejdedeje dej	fddZ
dejfd	d
ZdedefddZdededdfddZdS )ConcatKDFHashNr   r   r   backendc                 C   s4   t ||| || _|| _|d ur|nd| _d| _d S )Nr   F)r   
_algorithm_length
_otherinfo_used)selfr   r   r   r*   r   r   r   __init__;   s
   
zConcatKDFHash.__init__r
   c                 C   s   t | jS N)r   Hashr+   r/   r   r   r   _hashI   s   zConcatKDFHash._hashr   c                 C   $   | j rtd| _ t|| j| j| jS NT)r.   r   r(   r,   r4   r-   r/   r   r   r   r   deriveL      zConcatKDFHash.deriveexpected_keyc                 C      t | ||std S r1   r   Zbytes_eqr8   r   r/   r   r:   r   r   r   verifyT      zConcatKDFHash.verifyr1   )__name__
__module____qualname__r   HashAlgorithminttypingOptionalbytesAnyr0   r2   r4   r8   r>   r   r   r   r   r)   :   s    
r)   c                   @   sv   e Zd Z	ddejdedeje deje dej	f
ddZ
d	ejfd
dZded	efddZdeded	dfddZdS )ConcatKDFHMACNr   r   saltr   r*   c                 C   st   t ||| || _|| _|d ur|nd| _|jd u r"td|j|d u r,d|j }nt	d| || _
d| _d S )Nr   z{} is unsupported for ConcatKDF    rJ   F)r   r+   r,   r-   
block_size	TypeErrorr   namer   r   _saltr.   )r/   r   r   rJ   r   r*   r   r   r   r0   Z   s   


zConcatKDFHMAC.__init__r
   c                 C   s   t | j| jS r1   )r   HMACrO   r+   r3   r   r   r   _hmacu   s   zConcatKDFHMAC._hmacr   c                 C   r5   r6   )r.   r   r(   r,   rQ   r-   r7   r   r   r   r8   x   r9   zConcatKDFHMAC.deriver:   c                 C   r;   r1   r<   r=   r   r   r   r>      r?   zConcatKDFHMAC.verifyr1   )r@   rA   rB   r   rC   rD   rE   rF   rG   rH   r0   r   rP   rQ   r8   r>   r   r   r   r   rI   Y   s     
rI   )rE   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr   rD   rG   r   rC   rF   r   CallableZHashContextr(   r)   rI   r   r   r   r   <module>   s8   

