a
    còfÈ  ã                   @  sp   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	œd
d„ZG dd„ deƒZdS )é    )ÚannotationsN)Úutils)ÚAlreadyFinalizedÚ
InvalidKey)Úconstant_timeÚhashes)ÚKeyDerivationFunctionÚintÚbytes)ÚnÚreturnc                 C  s   | j ddd�S )Né   Úbig)ÚlengthÚ	byteorder)Úto_bytes)r   © r   úg/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyÚ_int_to_u32be   s    r   c                   @  sD   e Zd Zddddddœdd„Zd	d	d
œdd„Zd	d	ddœdd„ZdS )ÚX963KDFNzhashes.HashAlgorithmr	   zbytes | Nonez
typing.Any)Ú	algorithmr   Ú
sharedinfoÚbackendc                 C  sR   |j d }||kr"td|› d�ƒ‚|d ur6t d|¡ || _|| _|| _d| _d S )Nl   ÿÿ zCannot derive keys larger than z bits.r   F)Údigest_sizeÚ
ValueErrorr   Ú_check_bytesÚ
_algorithmÚ_lengthÚ_sharedinfoÚ_used)Úselfr   r   r   r   Úmax_lenr   r   r   Ú__init__   s    
zX963KDF.__init__r
   )Úkey_materialr   c                 C  sª   | j r
t‚d| _ t d|¡ dg}d}d}| j|kr–t | j¡}| |¡ | t	|ƒ¡ | j
d urn| | j
¡ | | ¡ ¡ |t|d ƒ7 }|d7 }q*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ÚNone)r#   Úexpected_keyr   c                 C  s   t  |  |¡|¡st‚d S )N)r   Zbytes_eqr/   r   )r    r#   r1   r   r   r   Úverify;   s    zX963KDF.verify)N)Ú__name__Ú
__module__Ú__qualname__r"   r/   r2   r   r   r   r   r      s    û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   