a
    còff  ã                   @  s®   d dl mZ 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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)Úutils)ÚAlreadyFinalizedÚ
InvalidKey)Úconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionÚintÚbytes)ÚnÚreturnc                 C  s   | j ddd�S )Né   Úbig)ÚlengthÚ	byteorder)Úto_bytes)r   © r   úi/home/httpd/docs/test/DocsMgr/lib/python3.9/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 ur6t d|¡ d S )Nl   ÿÿ zCannot derive keys larger than z bits.r   )Údigest_sizeÚ
ValueErrorr   Ú_check_bytes)r   r   r   Ú
max_lengthr   r   r   Ú_common_args_checks   s
    
r   z'typing.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outlenÚ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 ur$|nd| _d| _d S )Nr"   F)r   Ú
_algorithmÚ_lengthÚ
_otherinfoÚ_used)Úselfr   r   r   r0   r   r   r   Ú__init__7   s
    zConcatKDFHash.__init__zhashes.Hash©r   c                 C  s   t  | j¡S ©N)r   ZHashr1   ©r5   r   r   r   Ú_hashE   s    zConcatKDFHash._hashr   ©r    r   c                 C  s$   | j r
t‚d| _ t|| j| j| jƒS ©NT)r4   r   r-   r2   r:   r3   ©r5   r    r   r   r   ÚderiveH   s    ÿzConcatKDFHash.deriver   ©r    Úexpected_keyr   c                 C  s   t  |  |¡|¡st‚d S r8   ©r   Zbytes_eqr>   r   ©r5   r    r@   r   r   r   ÚverifyP   s    zConcatKDFHash.verify)N)Ú__name__Ú
__module__Ú__qualname__r6   r:   r>   rC   r   r   r   r   r.   6   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   r0   c                 C  st   t |||ƒ || _|| _|d ur$|nd| _|jd u rDt|j› d�ƒ‚|d u rXd|j }nt d|¡ || _	d| _
d S )Nr"   z is unsupported for ConcatKDFó    rH   F)r   r1   r2   r3   Ú
block_sizeÚ	TypeErrorÚnamer   r   Ú_saltr4   )r5   r   r   rH   r   r0   r   r   r   r6   V   s    
zConcatKDFHMAC.__init__z	hmac.HMACr7   c                 C  s   t  | j| j¡S r8   )r   ÚHMACrM   r1   r9   r   r   r   Ú_hmaco   s    zConcatKDFHMAC._hmacr   r;   c                 C  s$   | j r
t‚d| _ t|| j| j| jƒS r<   )r4   r   r-   r2   rO   r3   r=   r   r   r   r>   r   s    ÿzConcatKDFHMAC.deriver   r?   c                 C  s   t  |  |¡|¡st‚d S r8   rA   rB   r   r   r   rC   z   s    zConcatKDFHMAC.verify)N)rD   rE   rF   r6   rO   r>   rC   r   r   r   r   rG   U   s
    úrG   )Ú
__future__r   ÚtypingZcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr	   r   r   r-   r.   rG   r   r   r   r   Ú<module>   s   