U
    g                     @  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   N/tmp/pip-unpacked-wheel-nr_9cwun/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 k	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rt| j}|| |t	| | j
d k	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   