�
p�g����ddlZddlmZddlmZmZddlmZmZm Z ddl
mZGd�de��ZGd�d e��Z
dS)
�N)�utils)�AlreadyFinalized�
InvalidKey)�
constant_time�hashes�hmac)�KeyDerivationFunctionc��eZdZ ddejdedejedejedej f
d�Z
ded efd
�Zded efd�Zdeded dfd
�Z
dS)�HKDFN� algorithm�length�salt�info�backendc��||_|�d|jjz}ntjd|��||_t|j||��|_dS)N�r)�
_algorithm�digest_sizer�_check_bytes�_salt�
HKDFExpand�_hkdf_expand)�selfrr
rrrs �I/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/hkdf.py�__init__z
HKDF.__init__sW��$����<��T�_�8�8�D�D���v�t�,�,�,���
�&�t����E�E������key_material�returnc��tj|j|j��}|�|��|���S�N)r�HMACrr�update�finalize)rr�hs r�_extractz
HKDF._extract%s7���I�d�j�$�/�2�2�� ��������z�z�|�|�rc��tjd|��|j�|�|����S)Nr)r�_check_bytesliker�deriver%�rrs rr(zHKDF.derive*s8��
��~�|�<�<�<�� �'�'��
�
�l�(C�(C�D�D�Dr�expected_keyc�d�tj|�|��|��st�dSr �r�bytes_eqr(r�rrr*s r�verifyzHKDF.verify.�3���%�d�k�k�,�&?�&?��N�N� ��� � rr )�__name__�
__module__�__qualname__r�
HashAlgorithm�int�typing�Optional�bytes�Anyrr%r(r/�rrrrs�������#�
F�F��'�F��F��o�e�$� F�
�o�e�$�F���
F�F�F�F�&�U��u�����
E�5�E�U�E�E�E�E��5����$������rrc ��eZdZ d
dejdedejedej fd�Z
dedefd �Zdedefd
�Zdededdfd�Z
dS)rNrr
rrc���||_d|jz}||kr"td�|�����||_|�d}ntjd|��||_d|_dS)N�z)Cannot derive keys larger than {} octets.rrF) rr�
ValueError�format�_lengthrr�_info�_used)rrr
rr�
max_lengths rrzHKDFExpand.__init__4s���$����9�0�0�
��J����;�B�B�:�N�N���
�����<��D�D���v�t�,�,�,���
���
�
�
rrrc�,�dg}d}|jjt|��dz
z|jkr�t j||j��}|�|d��|�|j��|�t|g����|� |�
����|dz
}|jjt|��dz
z|jk��d�|��d|j�S)Nr����)rr�lenr@rr!r"rAr8�appendr#�join)rr�output�counterr$s r�_expandzHKDFExpand._expandOs���������o�)�S��[�[�1�_�=���L�L�� �,���8�8�A�
�H�H�V�B�Z� � � �
�H�H�T�Z� � � �
�H�H�U�G�9�%�%�&�&�&��M�M�!�*�*�,�,�'�'�'��q�L�G�
�o�)�S��[�[�1�_�=���L�L��x�x�����$�,��/�/rc��tjd|��|jrt�d|_|�|��S)NrT)rr'rBrrLr)s rr(zHKDFExpand.derive]s>��
��~�|�<�<�<��:� #�"�"���
��|�|�L�)�)�)rr*c�d�tj|�|��|��st�dSr r,r.s rr/zHKDFExpand.verifyer0rr )r1r2r3rr4r5r6r7r8r9rrLr(r/r:rrrr3s�������#����'�����o�e�$� �
������60�E�0�e�0�0�0�0�*�5�*�U�*�*�*�*��5����$������rr)r6�cryptographyr�cryptography.exceptionsrr�cryptography.hazmat.primitivesrrr�"cryptography.hazmat.primitives.kdfr rrr:rr�<module>rSs����
�
�
���������������G�F�F�F�F�F�F�F�F�F�D�D�D�D�D�D������ ����D4�4�4�4�4�&�4�4�4�4�4r |