o
    b                     @   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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)BackendHMACBackend)constant_timehasheshmac)KeyDerivationFunctionc                   @   s|   e Zd Z	ddejdedeje deje deje	 f
ddZ
d	ed
efddZd	ed
efddZd	eded
dfddZdS )HKDFN	algorithmlengthsaltinfobackendc                 C   sh   t |}t|tstdtj|| _|d u 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   r    r    f/var/www/secure340b-portal/env/lib/python3.10/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expected_keyc                 C      t | ||std S Nr
   Zbytes_eqr,   r   r   r#   r.   r    r    r!   verify;      zHKDF.verifyr0   )__name__
__module____qualname__r   HashAlgorithminttypingOptionalbytesr   r"   r*   r,   r3   r    r    r    r!   r      s     
r   c                
   @   sr   e Zd Z	ddejdedeje deje	 fddZ
ded	efd
dZded	efddZdeded	dfddZdS )r   Nr   r   r   r   c                 C   sz   t |}t|tstdtj|| _|| _d|j }||kr%t	d
||| _|d u r/d}ntd| || _d| _d S )Nr      z)Cannot 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#   r$   c                 C   s   dg}d}| j jt|d  | jk rItj|| j | jd}||d  || j |t	|g |
|  |d7 }| j jt|d  | jk sd|d | j S )Nr>      r%   )r   r   lenrA   r   r&   r   r'   rB   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+   rC   r   rL   r-   r    r    r!   r,   s   s
   
zHKDFExpand.deriver.   c                 C   r/   r0   r1   r2   r    r    r!   r3   {   r4   zHKDFExpand.verifyr0   )r5   r6   r7   r   r8   r9   r:   r;   r<   r   r"   rL   r,   r3   r    r    r    r!   r   @   s    
$r   )r:   Zcryptographyr   Zcryptography.exceptionsr   r   r   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   r	   Zcryptography.hazmat.primitivesr
   r   r   Z"cryptography.hazmat.primitives.kdfr   r   r   r    r    r    r!   <module>   s   +