U
    ʹh                     @  s   d dl m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mZmZ d dlmZ dd	d
ddZdddddddZdddd	d	dddZG dd deZG dd deZdS )    )annotationsN)Callable)utils)AlreadyFinalized
InvalidKey)constant_timehasheshmac)KeyDerivationFunctionintbytes)nreturnc                 C  s   | j dddS )N   Zbig)length	byteorder)to_bytes)r    r   R./venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py_int_to_u32be   s    r   hashes.HashAlgorithmbytes | NoneNone)	algorithmr   	otherinfor   c                 C  s:   | j d }||kr"td| d|d k	r6td| d S )Nl    zCannot derive keys larger than z bits.r   )Zdigest_size
ValueErrorr   _check_bytes)r   r   r   Z
max_lengthr   r   r   _common_args_checks   s
    
r   utils.Bufferz Callable[[], hashes.HashContext])key_materialr   auxfnr   r   c                 C  s   t d|  dg}d}d}||krr| }|t| ||  || ||  |t|d 7 }|d7 }qd|d | S )Nr       r      )r   Z_check_byteslikeupdater   appendfinalizelenjoin)r   r   r    r   outputZoutlenZcounterhr   r   r   _concatkdf_derive    s    


r+   c                   @  sR   e Zd ZddddddddZd	d
ddZdddddZddddddZdS )ConcatKDFHashNr   r   r   
typing.Any)r   r   r   backendc                 C  s4   t ||| || _|| _|d k	r$|nd| _d| _d S )Nr!   F)r   
_algorithm_length
_otherinfo_used)selfr   r   r   r.   r   r   r   __init__8   s
    zConcatKDFHash.__init__zhashes.Hashr   c                 C  s   t | jS N)r   ZHashr/   r3   r   r   r   _hashF   s    zConcatKDFHash._hashr   r   r   r   c                 C  s$   | j r
td| _ t|| j| j| jS NT)r2   r   r+   r0   r8   r1   r3   r   r   r   r   deriveI   s       zConcatKDFHash.deriver   r   expected_keyr   c                 C  s   t | ||std S r6   r   Zbytes_eqr<   r   r3   r   r>   r   r   r   verifyQ   s    zConcatKDFHash.verify)N)__name__
__module____qualname__r4   r8   r<   rA   r   r   r   r   r,   7   s
    r,   c                   @  sT   e Zd ZdddddddddZd	d
ddZdddddZddddddZdS )ConcatKDFHMACNr   r   r   r-   )r   r   saltr   r.   c                 C  st   t ||| || _|| _|d k	r$|nd| _|jd krDt|j d|d krXd|j }ntd| || _	d| _
d S )Nr!   z is unsupported for ConcatKDF    rF   F)r   r/   r0   r1   Z
block_size	TypeErrornamer   r   _saltr2   )r3   r   r   rF   r   r.   r   r   r   r4   W   s    
zConcatKDFHMAC.__init__z	hmac.HMACr5   c                 C  s   t | j| jS r6   )r	   ZHMACrJ   r/   r7   r   r   r   _hmacp   s    zConcatKDFHMAC._hmacr   r   r9   c                 C  s$   | j r
td| _ t|| j| j| jS r:   )r2   r   r+   r0   rK   r1   r;   r   r   r   r<   s   s       zConcatKDFHMAC.deriver   r=   c                 C  s   t | ||std S r6   r?   r@   r   r   r   rA   {   s    zConcatKDFHMAC.verify)N)rB   rC   rD   r4   rK   r<   rA   r   r   r   r   rE   V   s
    rE   )Z
__future__r   typingZcollections.abcr   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r	   Z"cryptography.hazmat.primitives.kdfr
   r   r   r+   r,   rE   r   r   r   r   <module>   s   