o
    þÑÐb  ã                
   @   sö   d dl 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mZmZ d dlmZmZmZ d dlmZ ded	efd
d„Zdejdedeje d	dfdd„Zdededejg ejf ded	ef
dd„ZG dd„ deƒZG dd„ deƒZdS )é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú_get_backend)ÚBackendÚHMACBackendÚHashBackend)Úconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionÚnÚreturnc                 C   s   t  d| ¡S )Nz>I)ÚstructÚpack)r   © r   úk/var/www/secure340b-portal/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.pyÚ_int_to_u32be   s   r   Ú	algorithmÚlengthÚ	otherinfoc                 C   s<   | j d }||krtd |¡ƒ‚|d urt d|¡ d S d S )Nl   ÿÿ z'Cannot derive keys larger than {} bits.r   )Údigest_sizeÚ
ValueErrorÚformatr   Ú_check_bytes)r   r   r   Ú
max_lengthr   r   r   Ú_common_args_checks   s   
ÿÿr   Úkey_materialÚauxfnc                 C   sŠ   t  d| ¡ dg}d}d}||kr<|ƒ }| t|ƒ¡ | | ¡ | |¡ | | ¡ ¡ |t|d ƒ7 }|d7 }||ksd |¡d |… S )Nr   ó    r   é   éÿÿÿÿ)r   Z_check_byteslikeÚupdater   ÚappendÚfinalizeÚlenÚjoin)r   r   r    r   ÚoutputZoutlenÚcounterÚhr   r   r   Ú_concatkdf_derive,   s   

ù	r,   c                
   @   sp   e Zd Z	ddejdedeje deje	 fdd„Z
dejfd	d
„Zdedefdd„Zdededdfdd„ZdS )ÚConcatKDFHashNr   r   r   Úbackendc                 C   sX   t |ƒ}t|||ƒ || _|| _|d ur|nd| _t|tƒs$tdtj	ƒ‚|| _
d| _d S )Nr!   z.Backend object does not implement HashBackend.F)r   r   Ú
_algorithmÚ_lengthÚ
_otherinfoÚ
isinstancer
   r   r   ÚBACKEND_MISSING_INTERFACEÚ_backendÚ_used)Úselfr   r   r   r.   r   r   r   Ú__init__D   s   
þ
zConcatKDFHash.__init__r   c                 C   s   t  | j| j¡S ©N)r   ÚHashr/   r4   ©r6   r   r   r   Ú_hashZ   s   zConcatKDFHash._hashr   c                 C   ó$   | j rt‚d| _ t|| j| j| jƒS ©NT)r5   r   r,   r0   r;   r1   ©r6   r   r   r   r   Úderive]   ó   ÿzConcatKDFHash.deriveÚexpected_keyc                 C   ó   t  |  |¡|¡st‚d S r8   ©r   Zbytes_eqr?   r   ©r6   r   rA   r   r   r   Úverifye   ó   ÿzConcatKDFHash.verifyr8   )Ú__name__Ú
__module__Ú__qualname__r   ÚHashAlgorithmÚintÚtypingÚOptionalÚbytesr   r7   r9   r;   r?   rE   r   r   r   r   r-   C   s    ûþýü
ûr-   c                   @   sz   e Zd Z	ddejdedeje deje deje	 f
dd„Z
d	ejfd
d„Zded	efdd„Zdeded	dfdd„ZdS )ÚConcatKDFHMACNr   r   Úsaltr   r.   c                 C   s˜   t |ƒ}t|||ƒ || _|| _|d ur|nd| _|jd u r&td |j¡ƒ‚|d u r0d|j }nt	 
d|¡ || _t|tƒsDtdtjƒ‚|| _d| _d S )Nr!   z{} is unsupported for ConcatKDFó    rP   z.Backend object does not implement HMACBackend.F)r   r   r/   r0   r1   Ú
block_sizeÚ	TypeErrorr   Únamer   r   Ú_saltr2   r	   r   r   r3   r4   r5   )r6   r   r   rP   r   r.   r   r   r   r7   k   s(   

ÿ
þ
zConcatKDFHMAC.__init__r   c                 C   s   t  | j| j| j¡S r8   )r   ÚHMACrU   r/   r4   r:   r   r   r   Ú_hmacŽ   s   zConcatKDFHMAC._hmacr   c                 C   r<   r=   )r5   r   r,   r0   rW   r1   r>   r   r   r   r?   ‘   r@   zConcatKDFHMAC.deriverA   c                 C   rB   r8   rC   rD   r   r   r   rE   ™   rF   zConcatKDFHMAC.verifyr8   )rG   rH   rI   r   rJ   rK   rL   rM   rN   r   r7   r   rV   rW   r?   rE   r   r   r   r   rO   j   s     úþýüû
ú#rO   ) r   rL   Zcryptographyr   Zcryptography.exceptionsr   r   r   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   r	   r
   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr   rK   rN   r   rJ   rM   r   ÚCallableZHashContextr,   r-   rO   r   r   r   r   Ú<module>   s>   ÿþý
üÿþýü
û'