o
    ÖèFhp#  ã                   @  s¶   d dl m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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)Ú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   úa/var/www/html/loop/nvenv/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Úprfútyping.CallableÚmoder   ÚlengthÚintÚrlenÚllenú
int | NoneÚlocationr   Úbreak_locationÚlabelúbytes | NoneÚcontextÚfixedc                 C  sl  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 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 integeró    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__%   sV   


ÿÿ
z_KBKDFDeriver.__init__ÚvalueÚreturnÚboolc                 C  sB   t | tƒs	tdƒ‚t d| ¡}dt|ƒ  krdksdS  dS dS )Nzvalue must be of type inté   é   FT)r.   r"   r/   r   Úint_to_bytesÚlen)r@   Ú	value_binr   r   r   r1   n   s   
ÿz _KBKDFDeriver._valid_byte_lengthÚkey_materialÚbytesÚprf_output_sizec                 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   Úderivex   s<   ÿ

z_KBKDFDeriver.derivec                 C  sB   | j rt| j tƒr| j S t | jd | j¡}d | jd| j	|g¡S )NrL   r,   ó    )
r=   r.   rI   r   rE   r5   r7   rT   r:   r;   )r>   Úl_valr   r   r   rO   ¨   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   rI   )rA   rI   )r   r   r   r?   Ústaticmethodr1   r^   rO   r   r   r   r   r   $   s    
I
	0r   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   ©rf   z5Algorithm supplied is not a supported hmac algorithm.)r.   r   ÚHashAlgorithmr   r   ÚUNSUPPORTED_HASHÚ,cryptography.hazmat.backends.openssl.backendrf   Úhmac_supportedÚ
_algorithmr   r3   Ú_deriver)r>   rd   r    r!   r#   r$   r&   r(   r*   r+   rf   r'   Úosslr   r   r   r?   ²   s0   þ
þ
özKBKDFHMAC.__init__rH   rI   rA   ú	hmac.HMACc                 C  s   t  || j¡S ©N)r   ÚHMACrm   ©r>   rH   r   r   r   r3   à   s   zKBKDFHMAC._prfc                 C  s   | j  || jj¡S rq   )rn   r^   rm   Údigest_sizers   r   r   r   r^   ã   s   zKBKDFHMAC.deriveÚexpected_keyÚNonec                 C  ó   t  |  |¡|¡st‚d S rq   ©r
   Úbytes_eqr^   r   ©r>   rH   ru   r   r   r   Úverifyæ   ó   ÿzKBKDFHMAC.verifyrq   )rd   re   r    r   r!   r"   r#   r"   r$   r%   r&   r   r(   r)   r*   r)   r+   r)   rf   rg   r'   r%   )rH   rI   rA   rp   ©rH   rI   rA   rI   ©rH   rI   ru   rI   rA   rv   ©r   r   r   r?   r3   r^   r{   r   r   r   r   rb   ±   s    õó
.
rb   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 )'Ú	KBKDFCMACNrc   r    r   r!   r"   r#   r$   r%   r&   r   r(   r)   r*   r+   rf   rg   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_CIPHERrm   Ú_cipherr   r3   rn   )r>   rd   r    r!   r#   r$   r&   r(   r*   r+   rf   r'   r   r   r   r?   ì   s.   ÿ
þþ
özKBKDFCMAC.__init__Ú_rI   rA   ú	cmac.CMACc                 C  s   | j d usJ ‚t | j ¡S rq   )r†   r	   ÚCMAC)r>   r‡   r   r   r   r3     s   zKBKDFCMAC._prfrH   c                 C  sT   |   |¡| _| jd usJ ‚ddlm} | | j¡stdtjƒ‚| j 	|| jj
d ¡S )Nr   rh   r�   rL   )rm   r†   rk   rf   Úcmac_algorithm_supportedr   r   r…   rn   r^   Ú
block_size)r>   rH   ro   r   r   r   r^     s   þzKBKDFCMAC.deriveru   rv   c                 C  rw   rq   rx   rz   r   r   r   r{   )  r|   zKBKDFCMAC.verifyrq   )r    r   r!   r"   r#   r"   r$   r%   r&   r   r(   r)   r*   r)   r+   r)   rf   rg   r'   r%   )r‡   rI   rA   rˆ   r}   r~   r   r   r   r   r   r€   ë   s    õó
'
r€   )Ú
__future__r   ÚtypingÚcryptographyr   Úcryptography.exceptionsr   r   r   r   Úcryptography.hazmat.primitivesr   r	   r
   r   r   Ú"cryptography.hazmat.primitives.kdfr   ÚEnumr   r   r   rb   r€   r   r   r   r   Ú<module>   s    :