o
    Ç `g	  ã                   @   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 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)Ú_get_backend)ÚHashBackend)Úconstant_timeÚhashes)ÚKeyDerivationFunctionc                 C   s   t  d| ¡S )Nz>I)ÚstructÚpack)Ún© r   ú€home/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyÚ_int_to_u32be   s   r   c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚX963KDFNc                 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(Can not derive keys larger than {} bits.Ú
sharedinfoz.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)ÚselfÚ	algorithmÚlengthr   ÚbackendZmax_lenr   r   r   Ú__init__   s$   
ÿ
þ
zX963KDF.__init__c                 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 )NTÚkey_materialó    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   Úderive3   s$   



ø
zX963KDF.derivec                 C   s   t  |  |¡|¡st‚d S ©N)r   Zbytes_eqr2   r   )r!   r&   Zexpected_keyr   r   r   ÚverifyH   s   ÿzX963KDF.verifyr3   )Ú__name__Ú
__module__Ú__qualname__r%   r2   r4   r   r   r   r   r      s    
r   )Ú
__future__r   r   r   r   Úcryptographyr   Zcryptography.exceptionsr   r   r   r	   Zcryptography.hazmat.backendsr
   Z'cryptography.hazmat.backends.interfacesr   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr   r   Zregister_interfaceÚobjectr   r   r   r   r   Ú<module>   s   