o
    "“iÍ#  ã                   @  sÂ   d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZmZmZmZmZ d dlmZ G dd	„ d	ejƒZG d
d„ dejƒZG dd„ dƒZG dd„ deƒZG dd„ deƒZdS )é    )ÚannotationsN)ÚCallable)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)ÚciphersÚcmacÚconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc                   @  s   e Zd ZdZdS )ÚModeÚctrN)Ú__name__Ú
__module__Ú__qualname__ÚCounterMode© r   r   úh/var/www/html/premium_crap/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.pyr      s    r   c                   @  s   e Zd ZdZdZdZdS )ÚCounterLocationÚbefore_fixedÚafter_fixedÚmiddle_fixedN)r   r   r   ÚBeforeFixedÚ
AfterFixedÚMiddleFixedr   r   r   r   r      s    r   c                   @  s8   e Zd Zd!dd„Zed"dd„ƒZd#dd„Zd$dd„Zd S )%Ú_KBKDFDeriverÚprfr   Úmoder   ÚlengthÚintÚrlenÚllenú
int | NoneÚlocationr   Úbreak_locationÚlabelúbytes | NoneÚcontextÚfixedc                 C  s|  t |ƒsJ ‚t|tƒstdƒ‚t|tƒstdƒ‚|d u r%|tju r%tdƒ‚|d ur2|tjkr2tdƒ‚|d ur?t|tƒs?tdƒ‚|d urK|dk rKtdƒ‚|sO|	rU|
rUtdƒ‚|d u s^|  |¡sbtd	ƒ‚|d u rn|
d u rntd
ƒ‚|d ur{t|tƒs{tdƒ‚|dkrƒtdƒ‚|d u r‰d}|	d u r�d}	t	 
d|¡ t	 
d|	¡ || _|| _|| _|| _|| _|| _|| _|| _|	| _d| _|
| _d S )Nzmode must be of type Modez(location must be of type CounterLocationzPlease specify a break_locationzJbreak_location is ignored when location is not CounterLocation.MiddleFixedz!break_location must be an integerr   z)break_location must be a positive integerz9When supplying fixed data, label and context are ignored.zrlen must be between 1 and 4zPlease specify an llenzllen must be an integerzllen must be non-zeroó    r(   r*   F)ÚcallableÚ
isinstancer   Ú	TypeErrorr   r   Ú
ValueErrorr"   Ú_valid_byte_lengthr   Ú_check_bytesÚ_prfÚ_modeÚ_lengthÚ_rlenÚ_llenÚ	_locationÚ_break_locationÚ_labelÚ_contextÚ_usedÚ_fixed_data)Úselfr   r    r!   r#   r$   r&   r'   r(   r*   r+   r   r   r   Ú__init__&   sZ   


ÿÿ
z_KBKDFDeriver.__init__ÚvalueÚreturnÚboolc                 C  s:   t | tƒs	tdƒ‚t d| ¡}dt|ƒ  kodkS   S )Nzvalue must be of type inté   é   )r.   r"   r/   r   Úint_to_bytesÚlen)r@   Ú	value_binr   r   r   r1   r   s   
z _KBKDFDeriver._valid_byte_lengthÚkey_materialúutils.BufferÚprf_output_sizeÚbytesc                 C  s6  | j rt‚t d|¡ d| _ | j |  }dg}t d| j¡}|tdt|ƒd ƒd kr0t	dƒ‚|  
¡ }| jtjkr?d}|}n*| jtjkrJ|}d}nt| jtƒr[| jt|ƒkr[t	dƒ‚|d | j… }|| jd … }td|d ƒD ] }	|  |¡}
t |	| j¡}|| | }|
 |¡ | |
 ¡ ¡ qpd |¡d | j… S )	NrH   Tr,   rC   é   é   zThere are too many iterations.z"break_location offset > len(fixed))r<   r   r   Ú_check_bytesliker5   rE   r6   ÚpowrF   r0   Ú_generate_fixed_inputr8   r   r   r   r.   r9   r"   Úranger3   ÚupdateÚappendÚfinalizeÚjoin)r>   rH   rJ   ÚroundsÚoutputÚr_binr+   Údata_before_ctrÚdata_after_ctrÚiÚhÚcounterÚ
input_datar   r   r   Úderivez   s<   ÿ

z_KBKDFDeriver.derivec                 C  sB   | j rt| j tƒr| j S t | jd | j¡}d | jd| j	|g¡S )NrM   r,   ó    )
r=   r.   rK   r   rE   r5   r7   rU   r:   r;   )r>   Úl_valr   r   r   rP   ¬   s   z#_KBKDFDeriver._generate_fixed_inputN)r   r   r    r   r!   r"   r#   r"   r$   r%   r&   r   r'   r%   r(   r)   r*   r)   r+   r)   )r@   r"   rA   rB   )rH   rI   rJ   r"   rA   rK   )rA   rK   )r   r   r   r?   Ústaticmethodr1   r_   rP   r   r   r   r   r   %   s    
L
2r   c                   @  s>   e Zd Z	d$ddœd%dd„Zd&dd„Zd'dd„Zd(d"d#„ZdS ))Ú	KBKDFHMACN©r'   Ú	algorithmúhashes.HashAlgorithmr    r   r!   r"   r#   r$   r%   r&   r   r(   r)   r*   r+   Úbackendú
typing.Anyr'   c                C  sb   t |tjƒstdtjƒ‚ddlm} | |¡stdtjƒ‚|| _	t
| j|||||||||	ƒ
| _d S )Nz5Algorithm supplied is not a supported hash algorithm.r   ©rg   z5Algorithm supplied is not a supported hmac algorithm.)r.   r   ÚHashAlgorithmr   r   ÚUNSUPPORTED_HASHÚ,cryptography.hazmat.backends.openssl.backendrg   Úhmac_supportedÚ
_algorithmr   r3   Ú_deriver)r>   re   r    r!   r#   r$   r&   r(   r*   r+   rg   r'   Úosslr   r   r   r?   ¶   s0   þ
þ
özKBKDFHMAC.__init__rH   rK   rA   ú	hmac.HMACc                 C  s   t  || j¡S ©N)r   ÚHMACrn   ©r>   rH   r   r   r   r3   ä   s   zKBKDFHMAC._prfrI   c                 C  s   | j  || jj¡S rr   )ro   r_   rn   Údigest_sizert   r   r   r   r_   ç   s   zKBKDFHMAC.deriveÚexpected_keyÚNonec                 C  ó   t  |  |¡|¡st‚d S rr   ©r   Úbytes_eqr_   r   ©r>   rH   rv   r   r   r   Úverifyê   ó   ÿzKBKDFHMAC.verifyrr   )re   rf   r    r   r!   r"   r#   r"   r$   r%   r&   r   r(   r)   r*   r)   r+   r)   rg   rh   r'   r%   )rH   rK   rA   rq   ©rH   rI   rA   rK   ©rH   rK   rv   rK   rA   rw   ©r   r   r   r?   r3   r_   r|   r   r   r   r   rc   µ   s    õó
.
rc   c                   @  s>   e Zd Z	d#ddœd$dd„Zd%dd„Zd&dd„Zd'd!d"„ZdS )(Ú	KBKDFCMACNrd   r    r   r!   r"   r#   r$   r%   r&   r   r(   r)   r*   r+   rg   rh   r'   c                C  sR   t |tjƒrt |tjƒstdtjƒ‚|| _d | _t	| j
|||||||||	ƒ
| _d S )Nú7Algorithm supplied is not a supported cipher algorithm.)Ú
issubclassr	   ÚBlockCipherAlgorithmÚCipherAlgorithmr   r   ÚUNSUPPORTED_CIPHERrn   Ú_cipherr   r3   ro   )r>   re   r    r!   r#   r$   r&   r(   r*   r+   rg   r'   r   r   r   r?   ð   s.   ÿ
þþ
özKBKDFCMAC.__init__Ú_rK   rA   ú	cmac.CMACc                 C  s   | j d usJ ‚t | j ¡S rr   )r‡   r
   ÚCMAC)r>   rˆ   r   r   r   r3     s   zKBKDFCMAC._prfrH   rI   c                 C  sT   |   |¡| _| jd usJ ‚ddlm} | | j¡stdtjƒ‚| j 	|| jj
d ¡S )Nr   ri   r‚   rM   )rn   r‡   rl   rg   Úcmac_algorithm_supportedr   r   r†   ro   r_   Ú
block_size)r>   rH   rp   r   r   r   r_     s   þzKBKDFCMAC.deriverv   rw   c                 C  rx   rr   ry   r{   r   r   r   r|   -  r}   zKBKDFCMAC.verifyrr   )r    r   r!   r"   r#   r"   r$   r%   r&   r   r(   r)   r*   r)   r+   r)   rg   rh   r'   r%   )rˆ   rK   rA   r‰   r~   r   r€   r   r   r   r   r�   ï   s    õó
'
r�   )Ú
__future__r   ÚtypingÚcollections.abcr   Úcryptographyr   Úcryptography.exceptionsr   r   r   r   Úcryptography.hazmat.primitivesr	   r
   r   r   r   Ú"cryptography.hazmat.primitives.kdfr   ÚEnumr   r   r   rc   r�   r   r   r   r   Ú<module>   s    :