3
ãdek  ã               @   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 eedœdd„Zejee je dd	œd
d„Zeee jg ejf eedœ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   úc/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.pyÚ_int_to_u32be   s    r   )Ú	algorithmr   Ú	otherinfor
   c             C   s:   | j d }||kr"td|› d�ƒ‚|d k	r6tjd|ƒ d S )	Né   é    é   zCannot derive keys larger than z bits.r   l        l   ÿÿ )Údigest_sizeÚ
ValueErrorr   Ú_check_bytes)r   r   r   Ú
max_lengthr   r   r   Ú_common_args_checks   s
    
r   )Úkey_materialr   Úauxfnr   r
   c             C   sˆ   t jd| ƒ dg}d}d}xZ||krt|ƒ }|jt|ƒƒ |j| ƒ |j|ƒ |j|jƒ ƒ |t|d ƒ7 }|d7 }qW dj|ƒd |… S )Nr   ó    r   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               @   s^   e Zd Zdejeeje ej	dœdd„Z
ejdœdd„Zeedœd	d
„Zeeddœdd„ZdS )ÚConcatKDFHashN)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__6   s
    zConcatKDFHash.__init__)r
   c             C   s   t j| jƒS )N)r   ÚHashr,   )r0   r   r   r   Ú_hashD   s    zConcatKDFHash._hash)r   r
   c             C   s$   | j r
t‚d| _ t|| j| j| jƒS )NT)r/   r   r)   r-   r3   r.   )r0   r   r   r   r   ÚderiveG   s
    zConcatKDFHash.derive)r   Úexpected_keyr
   c             C   s   t j| j|ƒ|ƒst‚d S )N)r   Úbytes_eqr4   r   )r0   r   r5   r   r   r   ÚverifyO   s    zConcatKDFHash.verify)N)Ú__name__Ú
__module__Ú__qualname__r   ÚHashAlgorithmÚintÚtypingÚOptionalÚbytesÚAnyr1   r2   r3   r4   r7   r   r   r   r   r*   5   s    	r*   c               @   sf   e Zd Zdejeeje eje ej	dœdd„Z
ejdœdd„Zeedœd	d
„Zeeddœdd„ZdS )ÚConcatKDFHMACN)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jd|ƒ || _	d| _
d S )Nr   z is unsupported for ConcatKDFó    rB   F)r   r,   r-   r.   Ú
block_sizeÚ	TypeErrorÚnamer   r   Ú_saltr/   )r0   r   r   rB   r   r+   r   r   r   r1   U   s    
zConcatKDFHMAC.__init__)r
   c             C   s   t j| j| jƒS )N)r   ÚHMACrG   r,   )r0   r   r   r   Ú_hmacn   s    zConcatKDFHMAC._hmac)r   r
   c             C   s$   | j r
t‚d| _ t|| j| j| jƒS )NT)r/   r   r)   r-   rI   r.   )r0   r   r   r   r   r4   q   s
    zConcatKDFHMAC.derive)r   r5   r
   c             C   s   t j| j|ƒ|ƒst‚d S )N)r   r6   r4   r   )r0   r   r5   r   r   r   r7   y   s    zConcatKDFHMAC.verify)N)r8   r9   r:   r   r;   r<   r=   r>   r?   r@   r1   r   rH   rI   r4   r7   r   r   r   r   rA   T   s   (rA   )r=   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr   r<   r?   r   r;   r>   r   ÚCallableZHashContextr)   r*   rA   r   r   r   r   Ú<module>   s    	