o
    Ïó·iÏ  ã                   @  sj   d dl mZ d dl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d„ZG dd„ deƒZdS )é    )ÚannotationsN)Úutils)ÚAlreadyFinalizedÚ
InvalidKey)Úconstant_timeÚhashes)ÚKeyDerivationFunctionÚnÚintÚreturnÚbytesc                 C  s   | j ddd�S )Né   Úbig)ÚlengthÚ	byteorder)Úto_bytes)r	   © r   úpC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\cryptography/hazmat/primitives/kdf/x963kdf.pyÚ_int_to_u32be   s   r   c                   @  s.   e Zd Z	ddd
d„Zddd„Zddd„ZdS )ÚX963KDFNÚ	algorithmúhashes.HashAlgorithmr   r
   Ú
sharedinfoúbytes | NoneÚbackendú
typing.Anyc                 C  sR   |j d }||krtd|› d�ƒ‚|d urt d|¡ || _|| _|| _d| _d S )Nl   ÿÿ zCannot derive keys larger than z bits.r   F)Údigest_sizeÚ
ValueErrorr   Z_check_bytesÚ
_algorithmÚ_lengthÚ_sharedinfoÚ_used)Úselfr   r   r   r   Úmax_lenr   r   r   Ú__init__   s   

zX963KDF.__init__Úkey_materialúutils.Bufferr   r   c                 C  s²   | j rt‚d| _ t d|¡ dg}d}d}| j|krOt | j¡}| |¡ | t	|ƒ¡ | j
d ur7| | j
¡ | | ¡ ¡ |t|d ƒ7 }|d7 }| j|ksd |¡d | j… S )NTr%   ó    r   é   éÿÿÿÿ)r!   r   r   Z_check_bytesliker   r   ZHashr   Úupdater   r    ÚappendÚfinalizeÚlenÚjoin)r"   r%   ÚoutputZoutlenÚcounterÚhr   r   r   Úderive&   s$   



ø
zX963KDF.deriveÚexpected_keyÚNonec                 C  s   t  |  |¡|¡st‚d S ©N)r   Zbytes_eqr2   r   )r"   r%   r3   r   r   r   Úverify;   s   ÿzX963KDF.verifyr5   )r   r   r   r
   r   r   r   r   )r%   r&   r   r   )r%   r   r3   r   r   r4   )Ú__name__Ú
__module__Ú__qualname__r$   r2   r6   r   r   r   r   r      s
    û
r   )r	   r
   r   r   )Ú
__future__r   ÚtypingZcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr   r   r   r   r   r   r   Ú<module>   s   
