U
    EZh                     @   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d| || _t| j ||| _d S )N    r   )
_algorithmdigest_sizer   _check_bytes_salt
HKDFExpand_hkdf_expand)selfr
   r   r   r   r    r   n/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py__init__   s    zHKDF.__init__key_materialreturnc                 C   s"   t | j| j}|| | S N)r   HMACr   r   updatefinalize)r   r   hr   r   r   _extract"   s    
zHKDF._extractc                 C   s   t d| | j| |S )Nr   )r   _check_bytesliker   deriver"   r   r   r   r   r   r$   '   s    zHKDF.deriver   expected_keyr   c                 C   s   t | ||std S r   r   Z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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   c                 C   s   dg}d}| j jt|d  | jk rtt|| j }||d  || j |t|g |	|
  |d7 }q
d|d | j S )Nr5      )r   r   lenr7   r   r   r   r8   r2   appendr    join)r   r   outputcounterr!   r   r   r   _expandL   s    
zHKDFExpand._expandc                 C   s&   t d| | jrtd| _| |S )Nr   T)r   r#   r9   r   rB   r%   r   r   r   r$   Z   s
    zHKDFExpand.deriver&   c                 C   s   t | ||std S r   r(   r)   r   r   r   r*   b   s    zHKDFExpand.verify)N)r+   r,   r-   r   r.   r/   r0   r1   r2   r3   r   rB   r$   r*   r   r   r   r   r   0   s    r   )r0   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   "