o
    þÑÐb¾	  ã                   @   sˆ   d dl Z 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 d dlmZ dd	„ ZG d
d„ deƒZdS )é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú_get_backend)ÚBackendÚHashBackend)Úconstant_timeÚhashes)ÚKeyDerivationFunctionc                 C   s   t  d| ¡S )Nz>I)ÚstructÚpack)Ún© r   úi/var/www/secure340b-portal/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyÚ_int_to_u32be   s   r   c                
   @   s`   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d	dfdd„ZdS )ÚX963KDFNÚ	algorithmÚlengthÚ
sharedinfoÚbackendc                 C   st   t |ƒ}|jd }||krtd |¡ƒ‚|d urt d|¡ || _|| _|| _t	|t
ƒs2tdtjƒ‚|| _d| _d S )Nl   ÿÿ z'Cannot derive keys larger than {} bits.r   z.Backend object does not implement HashBackend.F)r   Údigest_sizeÚ
ValueErrorÚformatr   Ú_check_bytesÚ
_algorithmÚ_lengthÚ_sharedinfoÚ
isinstancer	   r   r   ZBACKEND_MISSING_INTERFACEÚ_backendÚ_used)Úselfr   r   r   r   Úmax_lenr   r   r   Ú__init__   s$   
ÿ
þ
zX963KDF.__init__Úkey_materialÚreturnc                 C   s¶   | j rt‚d| _ t d|¡ dg}d}d}| j|krQt | j| j¡}| 	|¡ | 	t
|ƒ¡ | jd ur9| 	| j¡ | | ¡ ¡ |t|d ƒ7 }|d7 }| j|ksd |¡d | j… S )NTr%   ó    r   é   éÿÿÿÿ)r!   r   r   Z_check_bytesliker   r   ZHashr   r    Úupdater   r   ÚappendÚfinalizeÚlenÚjoin)r"   r%   ÚoutputZoutlenÚcounterÚhr   r   r   Úderive8   s$   



ø
zX963KDF.deriveÚexpected_keyc                 C   s   t  |  |¡|¡st‚d S ©N)r
   Zbytes_eqr2   r   )r"   r%   r3   r   r   r   ÚverifyM   s   ÿzX963KDF.verifyr4   )Ú__name__Ú
__module__Ú__qualname__r   ZHashAlgorithmÚintÚtypingÚOptionalÚbytesr   r$   r2   r5   r   r   r   r   r      s    ûþýü
ûr   )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   Z"cryptography.hazmat.primitives.kdfr   r   r   r   r   r   r   Ú<module>   s   