3
ãde¯  ã               @   sd   d dl Z d dlmZ d dlmZmZ d dlmZmZ d dl	m
Z
 eedœdd„ZG d	d
„ d
e
ƒZdS )é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKey)Úconstant_timeÚhashes)ÚKeyDerivationFunction)ÚnÚreturnc             C   s   | j ddd�S )Né   Úbig)ÚlengthÚ	byteorder)Úto_bytes)r   © r   úa/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyÚ_int_to_u32be   s    r   c               @   sN   e Zd Zdejeeje ej	dœdd„Z
eedœdd„Zeeddœd	d
„ZdS )ÚX963KDFN)Ú	algorithmr   Ú
sharedinfoÚbackendc             C   sR   |j d	 }||kr"td|› d�ƒ‚|d k	r6tjd|ƒ || _|| _|| _d| _d S )
Né   é    é   zCannot derive keys larger than z bits.r   Fl        l   ÿÿ )Údigest_sizeÚ
ValueErrorr   Ú_check_bytesÚ
_algorithmÚ_lengthÚ_sharedinfoÚ_used)Úselfr   r   r   r   Úmax_lenr   r   r   Ú__init__   s    
zX963KDF.__init__)Úkey_materialr	   c             C   s®   | j r
t‚d| _ tjd|ƒ dg}d}d}xn| j|kr˜tj| jƒ}|j|ƒ |jt	|ƒƒ | j
d k	rp|j| j
ƒ |j|jƒ ƒ |t|d ƒ7 }|d7 }q,W dj|ƒd | j… S )NTr#   ó    r   r   éÿÿÿÿ)r   r   r   Z_check_bytesliker   r   ZHashr   Úupdater   r   ÚappendÚfinalizeÚlenÚjoin)r    r#   ÚoutputZoutlenÚcounterÚhr   r   r   Úderive%   s"    

zX963KDF.derive)r#   Úexpected_keyr	   c             C   s   t j| j|ƒ|ƒst‚d S )N)r   Zbytes_eqr.   r   )r    r#   r/   r   r   r   Úverify:   s    zX963KDF.verify)N)Ú__name__Ú
__module__Ú__qualname__r   ZHashAlgorithmÚintÚtypingÚOptionalÚbytesÚAnyr"   r.   r0   r   r   r   r   r      s    r   )r5   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr   r4   r7   r   r   r   r   r   r   Ú<module>   s   