ó
    ‹ÂjÍ#  ã                  ó  • S SK Jr  S SKrS SKJr  S SKJr  S SKJrJ	r	J
r
Jr  S SKJrJrJrJrJr  S SKJr   " S S	\R(                  5      r " S
 S\R(                  5      r " S S5      r " S S\5      r " S S\5      rg)é    )ÚannotationsN)ÚCallable)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)ÚciphersÚcmacÚconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc                  ó   • \ rS rSrSrSrg)ÚModeé   Úctr© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚCounterModeÚ__static_attributes__r   ó    Ú^/var/www/website/venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.pyr   r      s   † ØƒKr   r   c                  ó    • \ rS rSrSrSrSrSrg)ÚCounterLocationé   Úbefore_fixedÚafter_fixedÚmiddle_fixedr   N)r   r   r   r   ÚBeforeFixedÚ
AfterFixedÚMiddleFixedr   r   r   r   r   r      s   † Ø €KØ€JØ ƒKr   r   c                  óz   • \ rS rSr                    SS jr\S	S j5       r      S
S jrSS jrSr	g)Ú_KBKDFDeriveré%   c                ó¤  • [        U5      (       d   e[        U[        5      (       d  [        S5      e[        U[        5      (       d  [        S5      eUc  U[        R
                  L a  [        S5      eUb  U[        R
                  :w  a  [        S5      eUb   [        U[        5      (       d  [        S5      eUb  US:  a  [        S5      eU(       d  U	(       a  U
(       a  [        S5      eUb  U R                  U5      (       d  [        S	5      eUc  U
c  [        S
5      eUb   [        U[        5      (       d  [        S5      eUS:X  a  [        S5      eUc  SnU	c  Sn	[        R                  " SU5        [        R                  " SU	5        Xl        X l        X0l        X@l        XPl        X`l        Xpl        X€l        X�l        SU l        X l        g )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__Ú_KBKDFDeriver.__init__&   s³  € ô ˜�}‰}Ðˆ}ä˜$¤×%Ñ%ÜÐ7Ó8Ð8ä˜(¤O×4Ñ4ÜÐFÓGÐGàÑ! h´/×2MÑ2MÒ&MÜÐ>Ó?Ð?ð Ñ&ØœO×7Ñ7Ó7äð/óð ð
 Ñ%¬j¸Ì×.MÑ.MÜÐ?Ó@Ð@àÑ%¨.¸1Ó*<ÜÐHÓIÐIæ–W¦%ÜØKóð ð ‰<˜t×6Ñ6°t×<Ñ<ÜÐ;Ó<Ð<à‰<˜E™MÜÐ5Ó6Ð6àÑ¤J¨t´S×$9Ñ$9ÜÐ5Ó6Ð6à�1‹9ÜÐ4Ó5Ð5à‰=ØˆEà‰?ØˆGä×Ò˜7 EÔ*Ü×Ò˜9 gÔ.ØŒ	ØŒ
ØŒØŒ
ØŒ
Ø!ŒØ-ÔØŒØŒØˆŒ
Ø Õr   c                ó¬   • [        U [        5      (       d  [        S5      e[        R                  " SU 5      nS[        U5      s=:*  =(       a    S:*  $ s  $ )Nzvalue must be of type inté   é   )r-   r0   r.   r   Úint_to_bytesÚlen)ÚvalueÚ	value_bins     r   r1   Ú _KBKDFDeriver._valid_byte_lengthr   sJ   € ä˜%¤×%Ñ%ÜÐ7Ó8Ð8ä×&Ò& q¨%Ó0ˆ	Ø”C˜	“N×'Ó' aÑ'Ð'Ñ'Ð'r   c                óÎ  • U R                   (       a  [        e[        R                  " SU5        SU l         U R                  * U-  * nS/n[        R
                  " SU R                  5      nU[        S[        U5      S-  5      S-
  :”  a  [        S5      eU R                  5       nU R                  [        R                  :X  a  SnUnOƒU R                  [        R                  :X  a  UnSnO`[        U R                   ["        5      (       a$  U R                   [        U5      :”  a  [        S5      eUS U R                    nX`R                   S  n[%        SUS-   5       Hk  n	U R'                  U5      n
[        R
                  " X�R                  5      nX{-   U-   nU
R)                  U5        UR+                  U
R-                  5       5        Mm     SR/                  U5      S U R                   $ )	NÚkey_materialTr   rJ   é   é   zThere are too many iterations.z"break_location offset > len(fixed))r<   r   r   Ú_check_bytesliker5   rL   r6   ÚpowrM   r/   Ú_generate_fixed_inputr8   r   r#   r$   r-   r9   r0   Úranger3   ÚupdateÚappendÚfinalizeÚjoin)r>   rR   Úprf_output_sizeÚroundsÚoutputÚr_binrF   Údata_before_ctrÚdata_after_ctrÚiÚhÚcounterÚ
input_datas                r   ÚderiveÚ_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Ø"×#7Ñ#7Ð#9Ð:ˆNä�q˜& 1™*Ö%ˆAØ—	‘	˜,Ó'ˆAä×(Ò(¨¯J©JÓ7ˆGØ(Ñ2°^ÑCˆJà�H‰H�ZÔ à�M‰M˜!Ÿ*™*›,Ö'ñ &ð �x‰x˜Ó  $§,¡,Ð/Ð/r   c                ó(  • U R                   (       a+  [        U R                   [        5      (       a  U R                   $ [        R                  " U R
                  S-  U R                  5      nSR                  U R                  SU R                  U/5      $ )NrT   r   ó    )
r=   r-   Úbytesr   rL   r5   r7   r\   r:   r;   )r>   Úl_vals     r   rW   Ú#_KBKDFDeriver._generate_fixed_input¬   sh   € Ø××¤
¨4×+;Ñ+;¼U× CÑ CØ×#Ñ#Ð#ä×"Ò" 4§<¡<°!Ñ#3°T·Z±ZÓ@ˆà�x‰x˜Ÿ™ g¨t¯}©}¸eÐDÓEÐEr   )r9   r;   r=   r:   r5   r7   r8   r4   r3   r6   r<   N)r?   r   r@   r   rA   r0   rB   r0   rC   ú
int | NonerD   r   rE   rn   r*   úbytes | Noner+   ro   rF   ro   )rN   r0   ÚreturnÚbool)rR   úutils.Bufferr]   r0   rp   rk   )rp   rk   )
r   r   r   r   rG   Ústaticmethodr1   rg   rW   r   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                  ót   • \ rS rSr S	SS.                     S
S jjjrSS jrSS jrSS jrSrg)Ú	KBKDFHMACéµ   N©rE   c               ó4  • [        U[        R                  5      (       d  [        S[        R
                  5      eSSKJn  UR                  U5      (       d  [        S[        R
                  5      eXl	        [        U R                  UUUUUUUUU	5
      U l        g )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.backendrz   Úhmac_supportedÚ
_algorithmr'   r3   Ú_deriver)r>   Ú	algorithmr@   rA   rB   rC   rD   r*   r+   rF   rz   rE   Úossls                r   rG   ÚKBKDFHMAC.__init__¶   s–   € ô ˜)¤V×%9Ñ%9×:Ñ:Ü&ØGÜ×)Ñ)óð õ
	
ð ×"Ñ" 9×-Ñ-Ü&ØGÜ×)Ñ)óð ð
 $Œä%Ø�I‰IØØØØØØØØØó
ˆ�r   c                óB   • [         R                  " XR                  5      $ ©N)r   ÚHMACr   ©r>   rR   s     r   r3   ÚKBKDFHMAC._prfä   s   € Ü�yŠy˜§¡Ó7Ð7r   c                ó`   • U R                   R                  XR                  R                  5      $ r…   )r€   rg   r   Údigest_sizer‡   s     r   rg   ÚKBKDFHMAC.deriveç   s!   € Ø�}‰}×#Ñ# L·/±/×2MÑ2MÓNÐNr   c                óf   • [         R                  " U R                  U5      U5      (       d  [        eg r…   ©r   Úbytes_eqrg   r   ©r>   rR   Úexpected_keys      r   ÚverifyÚKBKDFHMAC.verifyê   ó*   € Ü×%Ò% d§k¡k°,Ó&?À×NÑNÜÐð Or   )r   r€   r…   )r�   zhashes.HashAlgorithmr@   r   rA   r0   rB   r0   rC   rn   rD   r   r*   ro   r+   ro   rF   ro   rz   ú
typing.AnyrE   rn   )rR   rk   rp   z	hmac.HMAC©rR   rr   rp   rk   ©rR   rk   r�   rk   rp   ÚNone©	r   r   r   r   rG   r3   rg   r‘   r   r   r   r   ru   ru   µ   s“   † ð #ð,
ð &*ñ,
à'ð,
ð ð,
ð ð	,
ð
 ð,
ð ð,
ð "ð,
ð ð,
ð ð,
ð ð,
ð ð,
ð #ö,
ô\8ôO÷r   ru   c                  óp   • \ rS rSr S	SS.                   S
S jjjrSS jrSS jrSS jrSrg)Ú	KBKDFCMACéï   Nrw   c               ó  • [        U[        R                  5      (       a  [        U[        R                  5      (       d  [	        S[
        R                  5      eXl        S U l        [        U R                  UUUUUUUUU	5
      U l        g )Nú7Algorithm supplied is not a supported cipher algorithm.)Ú
issubclassr
   ÚBlockCipherAlgorithmÚCipherAlgorithmr   r	   ÚUNSUPPORTED_CIPHERr   Ú_cipherr'   r3   r€   )r>   r�   r@   rA   rB   rC   rD   r*   r+   rF   rz   rE   s               r   rG   ÚKBKDFCMAC.__init__ð   s„   € ô Ø”w×3Ñ3÷
ñ 
ä˜I¤w×'>Ñ'>×?Ñ?Ü&ØIÜ×+Ñ+óð ð
 $ŒØ<@ˆŒä%Ø�I‰IØØØØØØØØØó
ˆ�r   c                ó`   • U R                   c   e[        R                  " U R                   5      $ r…   )r¢   r   ÚCMAC)r>   Ú_s     r   r3   ÚKBKDFCMAC._prf  s%   € Ø�|‰|Ñ'Ð'Ð'ä�yŠy˜Ÿ™Ó&Ð&r   c                ó0  • U R                  U5      U l        U R                  c   eSSKJn  UR	                  U R                  5      (       d  [        S[        R                  5      eU R                  R                  XR                  R                  S-  5      $ )Nr   ry   r�   rT   )r   r¢   r}   rz   Úcmac_algorithm_supportedr   r	   r¡   r€   rg   Ú
block_size)r>   rR   r‚   s      r   rg   ÚKBKDFCMAC.derive  s}   € Ø—‘ |Ó4ˆŒà�|‰|Ñ'Ð'Ð'õ	
ð ×,Ñ,¨T¯\©\×:Ñ:Ü&ØIÜ×+Ñ+óð ð
 �}‰}×#Ñ# L·,±,×2IÑ2IÈQÑ2NÓOÐOr   c                óf   • [         R                  " U R                  U5      U5      (       d  [        eg r…   r�   r�   s      r   r‘   ÚKBKDFCMAC.verify-  r“   r   )r   r¢   r€   r…   )r@   r   rA   r0   rB   r0   rC   rn   rD   r   r*   ro   r+   ro   rF   ro   rz   r”   rE   rn   )r¦   rk   rp   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'   ru   rš   r   r   r   Ú<module>r¶      sy   ðõ
 #ã Ý $å ÷ó ÷õ õ Eôˆ5�:‰:ô ô!�e—j‘jô !÷MFñ MFô`7Ð%ô 7ôt@Ð%õ @r   