File: //lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-310.pyc
o
�)%a� � @ s� d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl m
Z
d dlmZ d dl
mZmZ d dlmZ dd � ZG d
d� de�ZdS )� N)�utils)�AlreadyFinalized�
InvalidKey�UnsupportedAlgorithm�_Reasons)�_get_backend)�HashBackend)�
constant_time�hashes)�KeyDerivationFunctionc C s t �d| �S )Nz>I)�struct�pack)�n� r �L/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/x963kdf.py�
_int_to_u32be s r c @ sV e Zd Z ddejdedeje fdd�Z dedefd d
�Z
dededdfdd
�ZdS )�X963KDFN� algorithm�length�
sharedinfoc C st t |�}|jd }||krtd�|���|d urt�d|� || _|| _|| _t |t
�s2tdtj
��|| _d| _d S )Nl �� z(Can not derive keys larger than {} bits.r z.Backend object does not implement HashBackend.F)r �digest_size�
ValueError�formatr �_check_bytes�
_algorithm�_length�_sharedinfo�
isinstancer r r �BACKEND_MISSING_INTERFACE�_backend�_used)�selfr r r �backend�max_lenr r r �__init__ s$
�
�
zX963KDF.__init__�key_material�returnc C s� | j rt�d| _ t�d|� dg}d}d}| j|krQt�| j| j�}|� |� |� t
|�� | jd ur9|� | j� |�|�
� � |t|d �7 }|d7 }| j|ksd�|�d | j� S )NTr% � r � ���)r r r �_check_bytesliker r
�Hashr r �updater r �append�finalize�len�join)r! r% �output�outlen�counter�hr r r �derive8 s$
�
zX963KDF.derive�expected_keyc C s t �| �|�|�st�d S �N)r �bytes_eqr5 r )r! r% r6 r r r �verifyM s �zX963KDF.verifyr7 )�__name__�
__module__�__qualname__r
�
HashAlgorithm�int�typing�Optional�bytesr$ r5 r9 r r r r r s ���
�r )r r? �cryptographyr �cryptography.exceptionsr r r r �cryptography.hazmat.backendsr �'cryptography.hazmat.backends.interfacesr �cryptography.hazmat.primitivesr r
�"cryptography.hazmat.primitives.kdfr r r r r r r �<module> s