U
    [e                     @   s   d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
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UnsupportedAlgorithm_Reasons)_get_backend)HMACBackend)constant_timehasheshmac)KeyDerivationFunctionc                   @   sb   e Zd Zdejeeje eje 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infoc                 C   sh   t |}t|tstdtj|| _|d kr:d| jj }nt	d| || _
|| _t| j|||| _d S )N.Backend object does not implement HMACBackend.    r   )r   
isinstancer   r   r   BACKEND_MISSING_INTERFACE
_algorithmdigest_sizer   _check_bytes_salt_backend
HKDFExpand_hkdf_expand)selfr   r   r   r   backend r   i/var/www/html/services/stratfitenv/lib/python3.8/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py__init__   s    
zHKDF.__init__key_materialreturnc                 C   s(   t j| j| j| jd}|| | S )Nr   )r   HMACr   r   r   updatefinalize)r   r#   hr   r   r    _extract2   s    
zHKDF._extractc                 C   s   t d| | j| |S )Nr#   )r   _check_bytesliker   deriver*   r   r#   r   r   r    r,   7   s    zHKDF.deriver#   expected_keyr$   c                 C   s   t | ||std S N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bytesr!   r*   r,   r3   r   r   r   r    r      s    r   c                   @   sZ   e Zd Zdejeeje 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   c                 C   sz   t |}t|tstdtj|| _|| _d|j }||krJt	d
||| _|d kr^d}ntd| || _d| _d S )Nr      z*Can not derive keys larger than {} octets.    r   F)r   r   r   r   r   r   r   r   r   
ValueErrorformat_lengthr   r   _info_used)r   r   r   r   r   
max_lengthr   r   r    r!   A   s&    

zHKDFExpand.__init__r"   c                 C   s   dg}d}| j jt|d  | jk rztj|| j | jd}||d  || j |t	|g |
|  |d7 }q
d|d | j S )Nr=      r%   )r   r   lenr@   r   r&   r   r'   rA   r;   appendr(   join)r   r#   outputcounterr)   r   r   r    _expande   s    
zHKDFExpand._expandc                 C   s&   t d| | jrtd| _| |S )Nr#   T)r   r+   rB   r   rK   r-   r   r   r    r,   s   s
    zHKDFExpand.deriver.   c                 C   s   t | ||std S r0   r1   r2   r   r   r    r3   {   s    zHKDFExpand.verify)N)r4   r5   r6   r
   r7   r8   r9   r:   r;   r!   rK   r,   r3   r   r   r   r    r   @   s    $r   )r9   Zcryptographyr   Zcryptography.exceptionsr   r   r   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   Zcryptography.hazmat.primitivesr	   r
   r   Z"cryptography.hazmat.primitives.kdfr   r   r   r   r   r   r    <module>   s   +