Ë
    ùmxiÍ#  ã                  ó  — 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	ej(                  «      Z G d
„ dej(                  «      Z G d„ d«      Z G d„ de«      Z G d„ de«      Zy)é    )ÚannotationsN)ÚCallable)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)ÚciphersÚcmacÚconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc                  ó   — e Zd ZdZy)ÚModeÚctrN)Ú__name__Ú
__module__Ú__qualname__ÚCounterMode© ó    ú_/home/htdocs/ttos/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.pyr   r      s   „ Ø�Kr   r   c                  ó   — e Zd ZdZdZdZy)ÚCounterLocationÚbefore_fixedÚafter_fixedÚmiddle_fixedN)r   r   r   ÚBeforeFixedÚ
AfterFixedÚMiddleFixedr   r   r   r   r      s   „ Ø €KØ€JØ �Kr   r   c                  ój   — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Z	 	 	 	 	 	 dd„Zd	d„Zy)
Ú_KBKDFDeriverc                ó>  — t        |«      sJ ‚t        |t        «      st        d«      ‚t        |t        «      st        d«      ‚|€|t        j
                  u rt        d«      ‚|�|t        j
                  k7  rt        d«      ‚|�t        |t        «      st        d«      ‚|�|dk  rt        d«      ‚|s|	r|
rt        d«      ‚|�| j                  |«      st        d	«      ‚|€|
€t        d
«      ‚|�t        |t        «      st        d«      ‚|dk(  rt        d«      ‚|€d}|	€d}	t        j                  d|«       t        j                  d|	«       || _        || _        || _        || _        || _        || _        || _        || _        |	| _        d| _        |
| _        y )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-zeror   ÚlabelÚcontextF)ÚcallableÚ
isinstancer   Ú	TypeErrorr   r!   Ú
ValueErrorÚintÚ_valid_byte_lengthr   Ú_check_bytesÚ_prfÚ_modeÚ_lengthÚ_rlenÚ_llenÚ	_locationÚ_break_locationÚ_labelÚ_contextÚ_usedÚ_fixed_data)ÚselfÚprfÚmodeÚlengthÚrlenÚllenÚlocationÚbreak_locationr%   r&   Úfixeds              r   Ú__init__z_KBKDFDeriver.__init__&   s¶  € ô ˜Œ}Ðˆ}ä˜$¤Ô%ÜÐ7Ó8Ð8ä˜(¤OÔ4ÜÐFÓGÐGàÐ! h´/×2MÑ2MÑ&MÜÐ>Ó?Ð?ð Ð&ØœO×7Ñ7Ò7äð/óð ð
 Ð%¬j¸ÌÔ.MÜÐ?Ó@Ð@àÐ%¨.¸1Ò*<ÜÐHÓIÐIá‘W¡%ÜØKóð ð ˆ<˜t×6Ñ6°tÔ<ÜÐ;Ó<Ð<àˆ<˜E˜MÜÐ5Ó6Ð6àÐ¤J¨t´SÔ$9ÜÐ5Ó6Ð6à�1Š9ÜÐ4Ó5Ð5àˆ=ØˆEàˆ?ØˆGä×Ñ˜7 EÔ*Ü×Ñ˜9 gÔ.ØˆŒ	ØˆŒ
ØˆŒØˆŒ
ØˆŒ
Ø!ˆŒØ-ˆÔØˆŒØˆŒØˆŒ
Ø ˆÕr   c                ó–   — t        | t        «      st        d«      ‚t        j                  d| «      }dt        |«      cxk  xr dk  S c S )Nzvalue must be of type inté   é   )r(   r+   r)   r   Úint_to_bytesÚlen)ÚvalueÚ	value_bins     r   r,   z _KBKDFDeriver._valid_byte_lengthr   sD   € ä˜%¤Ô%ÜÐ7Ó8Ð8ä×&Ñ& q¨%Ó0ˆ	Ø”C˜	“NÖ' aÑ'Ð'Ñ'Ð'r   c                ó®  — | j                   rt        ‚t        j                  d|«       d| _         | j                   |z   }dg}t        j
                  d| j                  «      }|t        dt        |«      dz  «      dz
  kD  rt        d«      ‚| j                  «       }| j                  t        j                  k(  rd}|}n}| j                  t        j                  k(  r|}d}n[t        | j                   t"        «      r#| j                   t        |«      kD  rt        d«      ‚|d | j                    }|| j                   d  }t%        d|dz   «      D ]k  }	| j'                  |«      }
t        j
                  |	| j                  «      }||z   |z   }|
j)                  |«       |j+                  |
j-                  «       «       Œm dj/                  |«      d | j                   S )	NÚkey_materialTr   rD   é   é   zThere are too many iterations.z"break_location offset > len(fixed))r7   r   r   Ú_check_bytesliker0   rF   r1   ÚpowrG   r*   Ú_generate_fixed_inputr3   r   r   r    r(   r4   r+   Úranger.   ÚupdateÚappendÚfinalizeÚjoin)r9   rK   Úprf_output_sizeÚroundsÚoutputÚr_binrA   Údata_before_ctrÚdata_after_ctrÚiÚhÚcounterÚ
input_datas                r   Úderivez_KBKDFDeriver.derivez   s¨  € ð �:Š:Ü"Ð"ä×Ñ˜~¨|Ô<ØˆŒ
ð —L‘L�= OÑ3Ð4ˆà�ˆô ×"Ñ" 1 d§j¡jÓ1ˆØ”C˜œ3˜u›:¨™>Ó*¨QÑ.Ò.ÜÐ=Ó>Ð>à×*Ñ*Ó,ˆà�>‰>œ_×8Ñ8Ò8Ø!ˆOØ"‰NØ�^‰^œ×9Ñ9Ò9Ø#ˆOØ ‰NäØ×$Ñ$¤côà×&Ñ&¬¨U«Ò3Ü Ð!EÓFÐFØ#Ð$: d×&:Ñ&:Ð;ˆOØ" 4×#7Ñ#7Ð#9Ð:ˆNä�q˜& 1™*Ó%ò 	(ˆAØ—	‘	˜,Ó'ˆAä×(Ñ(¨¨D¯J©JÓ7ˆGØ(¨7Ñ2°^ÑCˆJà�H‰H�ZÔ à�M‰M˜!Ÿ*™*›,Õ'ð	(ð �x‰x˜Ó  $§,¡,Ð/Ð/r   c                ó  — | j                   r&t        | j                   t        «      r| j                   S t        j                  | j
                  dz  | j                  «      }dj                  | j                  d| j                  |g«      S )NrM   r   ó    )
r8   r(   Úbytesr   rF   r0   r2   rU   r5   r6   )r9   Úl_vals     r   rP   z#_KBKDFDeriver._generate_fixed_input¬   se   € Ø×Ò¤
¨4×+;Ñ+;¼UÔ CØ×#Ñ#Ð#ä×"Ñ" 4§<¡<°!Ñ#3°T·Z±ZÓ@ˆà�x‰x˜Ÿ™ g¨t¯}©}¸eÐDÓEÐEr   N)r:   r   r;   r   r<   r+   r=   r+   r>   ú
int | Noner?   r   r@   re   r%   úbytes | Noner&   rf   rA   rf   )rH   r+   ÚreturnÚbool)rK   úutils.BufferrV   r+   rg   rc   )rg   rc   )r   r   r   rB   Ústaticmethodr,   r`   rP   r   r   r   r#   r#   %   s­   „ ðJ!àðJ!ð ðJ!ð ð	J!ð
 ðJ!ð ðJ!ð "ðJ!ð #ðJ!ð ðJ!ð ðJ!ð óJ!ðX ò(ó ð(ð00Ø(ð00Ø;>ð00à	ó00ôdFr   r#   c                  ó`   — e Zd Z	 dddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zd	d„Zd
d„Zdd„Zy)Ú	KBKDFHMACN©r@   c               ó"  — t        |t        j                  «      st        dt        j
                  «      ‚ddlm} |j                  |«      st        dt        j
                  «      ‚|| _	        t        | j                  |||||||||	«
      | _        y )Nz5Algorithm supplied is not a supported hash algorithm.r   ©Úbackendz5Algorithm supplied is not a supported hmac algorithm.)r(   r   ÚHashAlgorithmr   r	   ÚUNSUPPORTED_HASHÚ,cryptography.hazmat.backends.openssl.backendrp   Úhmac_supportedÚ
_algorithmr#   r.   Ú_deriver)r9   Ú	algorithmr;   r<   r=   r>   r?   r%   r&   rA   rp   r@   Úossls                r   rB   zKBKDFHMAC.__init__¶   s’   € ô ˜)¤V×%9Ñ%9Ô:Ü&ØGÜ×)Ñ)óð õ
	
ð ×"Ñ" 9Ô-Ü&ØGÜ×)Ñ)óð ð
 $ˆŒä%Ø�I‰IØØØØØØØØØó
ˆ�r   c                óB   — t        j                  || j                  «      S ©N)r   ÚHMACru   ©r9   rK   s     r   r.   zKBKDFHMAC._prfä   s   € Ü�y‰y˜ t§¡Ó7Ð7r   c                ób   — | j                   j                  || j                  j                  «      S rz   )rv   r`   ru   Údigest_sizer|   s     r   r`   zKBKDFHMAC.deriveç   s#   € Ø�}‰}×#Ñ# L°$·/±/×2MÑ2MÓNÐNr   c                óZ   — t        j                  | j                  |«      |«      st        ‚y rz   ©r   Úbytes_eqr`   r   ©r9   rK   Úexpected_keys      r   ÚverifyzKBKDFHMAC.verifyê   ó'   € Ü×%Ñ% d§k¡k°,Ó&?ÀÔNÜÐð Or   rz   )rw   zhashes.HashAlgorithmr;   r   r<   r+   r=   r+   r>   re   r?   r   r%   rf   r&   rf   rA   rf   rp   ú
typing.Anyr@   re   )rK   rc   rg   z	hmac.HMAC©rK   ri   rg   rc   ©rK   rc   rƒ   rc   rg   ÚNone©r   r   r   rB   r.   r`   r„   r   r   r   rl   rl   µ   s“   „ ð #ð,
ð &*ñ,
à'ð,
ð ð,
ð ð	,
ð
 ð,
ð ð,
ð "ð,
ð ð,
ð ð,
ð ð,
ð ð,
ð #ó,
ó\8óOôr   rl   c                  ó\   — e Zd Z	 dddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zd	d„Zd
d„Zdd„Zy)Ú	KBKDFCMACNrm   c               ó  — t        |t        j                  «      rt        |t        j                  «      st	        dt
        j                  «      ‚|| _        d | _        t        | j                  |||||||||	«
      | _        y )Nú7Algorithm supplied is not a supported cipher algorithm.)Ú
issubclassr
   ÚBlockCipherAlgorithmÚCipherAlgorithmr   r	   ÚUNSUPPORTED_CIPHERru   Ú_cipherr#   r.   rv   )r9   rw   r;   r<   r=   r>   r?   r%   r&   rA   rp   r@   s               r   rB   zKBKDFCMAC.__init__ð   s~   € ô Ø”w×3Ñ3ô
ä˜I¤w×'>Ñ'>Ô?Ü&ØIÜ×+Ñ+óð ð
 $ˆŒØ<@ˆŒä%Ø�I‰IØØØØØØØØØó
ˆ�r   c                ó\   — | j                   €J ‚t        j                  | j                   «      S rz   )r“   r   ÚCMAC)r9   Ú_s     r   r.   zKBKDFCMAC._prf  s%   € Ø�|‰|Ð'Ð'Ð'ä�y‰y˜Ÿ™Ó&Ð&r   c                ó&  — | j                  |«      | _        | j                  €J ‚ddlm} |j	                  | j                  «      st        dt        j                  «      ‚| j                  j                  || j                  j                  dz  «      S )Nr   ro   rŽ   rM   )ru   r“   rs   rp   Úcmac_algorithm_supportedr   r	   r’   rv   r`   Ú
block_size)r9   rK   rx   s      r   r`   zKBKDFCMAC.derive  s|   € Ø—‘ |Ó4ˆŒà�|‰|Ð'Ð'Ð'õ	
ð ×,Ñ,¨T¯\©\Ô:Ü&ØIÜ×+Ñ+óð ð
 �}‰}×#Ñ# L°$·,±,×2IÑ2IÈQÑ2NÓOÐOr   c                óZ   — t        j                  | j                  |«      |«      st        ‚y rz   r€   r‚   s      r   r„   zKBKDFCMAC.verify-  r…   r   rz   )r;   r   r<   r+   r=   r+   r>   re   r?   r   r%   rf   r&   rf   rA   rf   rp   r†   r@   re   )r–   rc   rg   z	cmac.CMACr‡   rˆ   rŠ   r   r   r   rŒ   rŒ   ï   s‹   „ ð #ð%
ð &*ñ%
ð ð%
ð ð	%
ð
 ð%
ð ð%
ð "ð%
ð ð%
ð ð%
ð ð%
ð ð%
ð #ó%
óN'ó
Pô"r   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#   rl   rŒ   r   r   r   ú<module>r£      sy   ðõ
 #ã Ý $å ÷ó ÷õ õ Eôˆ5�:‰:ô ô!�e—j‘jô !÷MFñ MFô`7Ð%ô 7ôt@Ð%õ @r   