U
    c6{i™  ã                   @  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é   Úbig)ÚlengthÚ	byteorder)Úto_bytes)r   © r   úP/tmp/pip-unpacked-wheel-6eg_dtv9/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   )Údigest_sizeÚ
ValueErrorr   Ú_check_bytes)r   r   r   Ú
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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 k	r$|nd| _d| _d S )Nr$   F)r    Ú
_algorithmÚ_lengthÚ
_otherinfoÚ_used)Úselfr   r   r   r2   r   r   r   Ú__init__8   s
    zConcatKDFHash.__init__zhashes.Hash©r   c                 C  s   t  | j¡S ©N)r   ZHashr3   ©r7   r   r   r   Ú_hashF   s    zConcatKDFHash._hashr!   r   ©r"   r   c                 C  s$   | j r
t‚d| _ t|| j| j| jƒS ©NT)r6   r   r/   r4   r<   r5   ©r7   r"   r   r   r   ÚderiveI   s       ÿzConcatKDFHash.deriver   ©r"   Úexpected_keyr   c                 C  s   t  |  |¡|¡st‚d S r:   ©r   Zbytes_eqr@   r   ©r7   r"   rB   r   r   r   ÚverifyQ   s    zConcatKDFHash.verify)N)Ú__name__Ú
__module__Ú__qualname__r8   r<   r@   rE   r   r   r   r   r0   7   s
    ûr0   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   r1   )r   r   Úsaltr   r2   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ó    rJ   F)r    r3   r4   r5   Ú
block_sizeÚ	TypeErrorÚnamer   r   Ú_saltr6   )r7   r   r   rJ   r   r2   r   r   r   r8   W   s    
zConcatKDFHMAC.__init__z	hmac.HMACr9   c                 C  s   t  | j| j¡S r:   )r	   ÚHMACrO   r3   r;   r   r   r   Ú_hmacp   s    zConcatKDFHMAC._hmacr!   r   r=   c                 C  s$   | j r
t‚d| _ t|| j| j| jƒS r>   )r6   r   r/   r4   rQ   r5   r?   r   r   r   r@   s   s       ÿzConcatKDFHMAC.deriver   rA   c                 C  s   t  |  |¡|¡st‚d S r:   rC   rD   r   r   r   rE   {   s    zConcatKDFHMAC.verify)N)rF   rG   rH   r8   rQ   r@   rE   r   r   r   r   rI   V   s
    úrI   )Ú
__future__r   ÚtypingÚcollections.abcr   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r	   Z"cryptography.hazmat.primitives.kdfr
   r   r    r/   r0   rI   r   r   r   r   Ú<module>   s   