3
ãdeÂ  ã               @   sh   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 G dd„ deƒZG dd	„ d	eƒZdS )
é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKey)Úconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc               @   sf   e Zd Zdejeeje eje ej	dœdd„Z
eedœdd„Zeedœdd	„Zeedd
œdd„ZdS )ÚHKDFN)Ú	algorithmÚlengthÚsaltÚinfoÚbackendc             C   sB   || _ |d krd| j j }ntjd|ƒ || _t| j ||ƒ| _d S )Nó    r   )Ú
_algorithmÚdigest_sizer   Ú_check_bytesÚ_saltÚ
HKDFExpandÚ_hkdf_expand)Úselfr
   r   r   r   r   © r   ú^/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/primitives/kdf/hkdf.pyÚ__init__   s    zHKDF.__init__)Úkey_materialÚreturnc             C   s"   t j| j| jƒ}|j|ƒ |jƒ S )N)r   ÚHMACr   r   ÚupdateÚfinalize)r   r   Úhr   r   r   Ú_extract"   s    
zHKDF._extractc             C   s   t jd|ƒ | jj| j|ƒƒS )Nr   )r   Ú_check_bytesliker   Úderiver    )r   r   r   r   r   r"   '   s    zHKDF.derive)r   Úexpected_keyr   c             C   s   t j| j|ƒ|ƒst‚d S )N)r   Úbytes_eqr"   r   )r   r   r#   r   r   r   Úverify+   s    zHKDF.verify)N)Ú__name__Ú
__module__Ú__qualname__r   ÚHashAlgorithmÚintÚtypingÚOptionalÚbytesÚAnyr   r    r"   r%   r   r   r   r   r	      s   (r	   c               @   s^   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	„Zeedd
œdd„ZdS )r   N)r
   r   r   r   c             C   sX   || _ d|j }||kr(td|› d�ƒ‚|| _|d kr<d}ntjd|ƒ || _d| _d S )Néÿ   zCannot derive keys larger than z octets.ó    r   F)r   r   Ú
ValueErrorÚ_lengthr   r   Ú_infoÚ_used)r   r
   r   r   r   Ú
max_lengthr   r   r   r   1   s    
zHKDFExpand.__init__)r   r   c             C   sŒ   dg}d}xl| j jt|ƒd  | jk rvtj|| j ƒ}|j|d ƒ |j| jƒ |jt|gƒƒ |j	|j
ƒ ƒ |d7 }qW dj|ƒd | j… S )Nr0   é   éÿÿÿÿ)r   r   Úlenr2   r   r   r   r3   r-   Úappendr   Újoin)r   r   ÚoutputÚcounterr   r   r   r   Ú_expandL   s    zHKDFExpand._expandc             C   s&   t jd|ƒ | jrt‚d| _| j|ƒS )Nr   T)r   r!   r4   r   r=   )r   r   r   r   r   r"   Z   s
    zHKDFExpand.derive)r   r#   r   c             C   s   t j| j|ƒ|ƒst‚d S )N)r   r$   r"   r   )r   r   r#   r   r   r   r%   b   s    zHKDFExpand.verify)N)r&   r'   r(   r   r)   r*   r+   r,   r-   r.   r   r=   r"   r%   r   r   r   r   r   0   s    r   )r+   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr   r	   r   r   r   r   r   Ú<module>   s   "