o
    ™¨Êh;	  ã                   @   sŽ   d dl mZmZm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 dd	„ Ze e¡G d
d„ deƒƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)ÚHashBackend)Úconstant_timeÚhashes)ÚKeyDerivationFunctionc                 C   s   t  d| ¡S )Nz>I)ÚstructÚpack)Ún© r   ú\/var/www/html/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„ Zdd„ Zdd„ ZdS )ÚX963KDFc                 C   sr   |j d }||krtd |¡ƒ‚|d u st|tƒstdƒ‚|| _|| _|| _t|t	ƒs1t
dtjƒ‚|| _d| _d S )Nl   ÿÿ z)Can not derive keys larger than {0} bits.zsharedinfo must be bytes.z.Backend object does not implement HashBackend.F)Údigest_sizeÚ
ValueErrorÚformatÚ
isinstanceÚbytesÚ	TypeErrorÚ
_algorithmÚ_lengthÚ_sharedinfor
   r   r	   ÚBACKEND_MISSING_INTERFACEÚ_backendÚ_used)ÚselfÚ	algorithmÚlengthÚ
sharedinfoÚbackendÚmax_lenr   r   r   Ú__init__   s"   
ÿ
þ
zX963KDF.__init__c                 C   s¼   | j rt‚d| _ t|tƒstdƒ‚dg}d}d}| j|krTt | j| j	¡}| 
|¡ | 
t|ƒ¡ | jd ur<| 
| j¡ | | ¡ ¡ |t|d ƒ7 }|d7 }| j|ksd |¡d | j… S )NTzkey_material must be bytes.ó    r   é   éÿÿÿÿ)r    r   r   r   r   r   r   ÚHashr   r   Úupdater   r   ÚappendÚfinalizeÚlenÚjoin)r!   Úkey_materialÚoutputÚoutlenÚcounterÚhr   r   r   Úderive,   s&   




ø
zX963KDF.derivec                 C   s   t  |  |¡|¡st‚d S )N)r   Úbytes_eqr6   r   )r!   r1   Úexpected_keyr   r   r   ÚverifyD   s   ÿzX963KDF.verifyN)Ú__name__Ú
__module__Ú__qualname__r'   r6   r9   r   r   r   r   r      s    r   )Ú
__future__r   r   r   r   Úcryptographyr   Úcryptography.exceptionsr   r   r   r	   Ú'cryptography.hazmat.backends.interfacesr
   Úcryptography.hazmat.primitivesr   r   Ú"cryptography.hazmat.primitives.kdfr   r   Úregister_interfaceÚobjectr   r   r   r   r   Ú<module>   s   