o
    c                  
   @   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   Pusr/lib/python3.10/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   _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,   r0   r   r   r   _hashI   s   zConcatKDFHash._hashr   c                 C   $   | j rtd| _ t|| j| j| jS NT)r/   r   r)   r-   r5   r.   r0   r   r   r   r   deriveL      zConcatKDFHash.deriveexpected_keyc                 C      t | ||std S r2   r   Zbytes_eqr9   r   r0   r   r;   r   r   r   verifyT      zConcatKDFHash.verifyr2   )__name__
__module____qualname__r   HashAlgorithminttypingOptionalbytesAnyr1   r3   r5   r9   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    rK   F)r   r,   r-   r.   
block_size	TypeErrorr   namer   r   _saltr/   )r0   r   r   rK   r   r+   r   r   r   r1   Z   s   


zConcatKDFHMAC.__init__r
   c                 C   s   t | j| jS r2   )r   HMACrP   r,   r4   r   r   r   _hmacu   s   zConcatKDFHMAC._hmacr   c                 C   r6   r7   )r/   r   r)   r-   rR   r.   r8   r   r   r   r9   x   r:   zConcatKDFHMAC.deriver;   c                 C   r<   r2   r=   r>   r   r   r   r?      r@   zConcatKDFHMAC.verifyr2   )rA   rB   rC   r   rD   rE   rF   rG   rH   rI   r1   r   rQ   rR   r9   r?   r   r   r   r   rJ   Y   s     
rJ   )rF   cryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr   rE   rH   r   rD   rG   r   CallableZHashContextr)   r*   rJ   r   r   r   r   <module>   s8   

