ó
    ¨RjÖ  ã                   óæ   • S r SSKJr   SSKJr  SSKJrJr  SSKJ	r	  Sr
SS	KJr  SS
KrSrSr\" \R"                  S5      rS rS rSqS rS rS rS rS rS rS rS rS rg
! \ a    Sr
 NOf = f)z
Implements auth methods
é   )ÚOperationalErroré    )Údefault_backend)ÚserializationÚhashes)ÚpaddingTF)ÚpartialNé   Úsha1c                 ó  • U (       d  g[        U 5      R                  5       n[        U5      R                  5       n[        5       nUR                  US[         5        UR                  U5        UR                  5       n[	        XR5      $ )z'Scramble used for mysql_native_passwordó    N)Úsha1_newÚdigestÚupdateÚSCRAMBLE_LENGTHÚ	_my_crypt)ÚpasswordÚmessageÚstage1Ústage2ÚsÚresults         Ú9D:\diplom_project\venv\Lib\site-packages\pymysql/_auth.pyÚscramble_native_passwordr      sk   € æØä�hÓ×&Ñ&Ó(€FÜ�fÓ×$Ñ$Ó&€FÜ‹
€AØ‡H�HˆWÐ%”oÐ&Ô'Ø‡H�HˆVÔØ�X‰X‹Z€FÜ�VÓ$Ð$r   c                 ó€   • [        U 5      n[        [        U5      5       H  nX#==   X   -  ss'   M     [        U5      $ ©N)Ú	bytearrayÚrangeÚlenÚbytes)Úmessage1Úmessage2r   Úis       r   r   r   ,   s9   € Ü�xÓ €Fä”3�v“;ÖˆØ‹	�X‘[Ñ �	ñ  ô �‹=Ðr   c                  óH   •  SSK Jn   U qg ! [         a    [	        S5      ef = f)Nr   ©Úbindingsz='pynacl' package is required for ed25519_password auth method)Únaclr&   Ú_nacl_bindingsÚImportErrorÚRuntimeErrorr%   s    r   Ú
_init_naclr+   ;   s.   € ð
Ý!à!‰øÜó 
ÜØKó
ð 	
ð
ús   ‚ ‹!c                 ó²   • [        U 5      n[        [        US   S-  /5      5      n[        [        US   S-  S-  /5      5      nU[        U SS 5      -   U-   $ )Nr   éø   é   é   é@   r   )r   r    )Ús32ÚbaÚba0Úba31s       r   Ú_scalar_clampr5   G   s^   € Ü	�3‹€BÜ
”	˜2˜a™5 3™;˜-Ó(Ó
)€CÜ”˜R ™V c™\¨RÑ/Ð0Ó1Ó2€DØ”�s˜1˜R�yÓ!Ñ! DÑ(Ð(r   c                 ó:  • [         (       d
  [        5         [        R                  " U 5      R	                  5       n[        USS 5      n[        R                  " USS U-   5      R	                  5       n[         R                  U5      n[         R                  U5      n[         R                  U5      n[        R                  " XV-   U-   5      R	                  5       n[         R                  U5      n[         R                  Xs5      n[         R                  X„5      n	XY-   $ )zfSign a random scramble with elliptic curve Ed25519.

Secret and public key are derived from password.
Né    )
r(   r+   ÚhashlibÚsha512r   r5   Ú!crypto_core_ed25519_scalar_reduceÚ&crypto_scalarmult_ed25519_base_noclampÚcrypto_core_ed25519_scalar_mulÚcrypto_core_ed25519_scalar_add)
r   ÚscrambleÚhr   ÚrÚRÚAÚkÚksÚSs
             r   Úed25519_passwordrF   N   sì   € ÷ Š>ÜŒô 	�Š�xÓ ×'Ñ'Ó)€Aô 	�a˜˜�fÓ€Aô 	�Š�q˜˜�v Ñ(Ó)×0Ñ0Ó2€Aô 	×8Ñ8¸Ó;€AÜ×=Ñ=¸aÓ@€Aô 	×=Ñ=¸aÓ@€Aô 	�Š�q‘u˜xÑ'Ó(×/Ñ/Ó1€Aô 	×8Ñ8¸Ó;€AÜ	×	6Ñ	6°qÓ	<€BÜ×5Ñ5°bÓ<€Að ‰5€Lr   c                 óh   • U R                  U5        U R                  5       nUR                  5         U$ r   )Úwrite_packetÚ_read_packetÚcheck_error)ÚconnÚ	send_dataÚpkts      r   Ú
_roundtriprN   w   s-   € Ø×Ñ�iÔ Ø
×
Ñ
Ó
€CØ‡O�OÔØ€Jr   c                 ó®   • US [          n[        U 5      n[        U5      n[        [        U5      5       H  nX$==   XU-     -  ss'   M     [	        U5      $ r   )r   r   r   r   r    )r   ÚsaltÚpassword_bytesÚsalt_lenr#   s        r   Ú_xor_passwordrS   ~   sX   € ð Ð ”Ð!€DÜ˜xÓ(€Nä�4‹y€HÜ”3�~Ó&Ö'ˆØÓ˜T h¡,Ñ/Ñ/Õñ (ä�Ó Ð r   c           	      óF  • [         (       d  [        S5      e[        U S-   U5      n[        R                  " U[        5       5      nUR                  U[        R                  " [        R                  " [        R                  " 5       S9[        R                  " 5       SS95      $ )z`Encrypt password with salt and public_key.

Used for sha256_password and caching_sha2_password.
z\'cryptography' package is required for sha256_password or caching_sha2_password auth methodsó    )Ú	algorithmN)ÚmgfrV   Úlabel)Ú_have_cryptographyr*   rS   r   Úload_pem_public_keyr   Úencryptr   ÚOAEPÚMGF1r   ÚSHA1)r   rP   Ú
public_keyr   Úrsa_keys        r   Úsha2_rsa_encryptra   Š   s‚   € ÷
 ÒÜð4ó
ð 	
ô ˜H uÑ,¨dÓ3€GÜ×/Ò/°
¼OÓ<MÓN€GØ�?‰?ØÜ�ŠÜ—’¤v§{¢{£}Ñ5Ü—k’k“mØñ	
óð r   c                 óF  • U R                   (       a0  [        (       a  [        S5        U R                  S-   n[	        X5      $ UR                  5       (       a�  UR                  5       U l        U R                  R                  S5      (       a  U R                  S S U l        U R                  (       d3  U R                  (       a"  [        (       a  [        S5        [	        U S5      nUR                  5       (       aD  UR                  SS  U l	        [        (       a%  [        SU R                  R                  S5      5        U R                  (       aH  U R                  (       d  [        S	5      e[        U R                  U R                  U R                  5      nOS
n[	        X5      $ )Nzsha256: Sending plain passwordrU   éÿÿÿÿz$sha256: Requesting server public keyó   r   zReceived public key:
Úasciiz$Couldn't receive server's public keyr   )Ú_secureÚDEBUGÚprintr   rN   Úis_auth_switch_requestÚread_allrP   ÚendswithÚserver_public_keyÚis_extra_auth_dataÚ_dataÚdecoder   ra   )rK   rM   Údatas      r   Úsha256_password_authrq       s%  € Ø‡|‡|ßŠ5ÜÐ2Ô3Ø�}‰}˜uÑ$ˆÜ˜$Ó%Ð%à
×!Ñ!×#Ñ#Ø—L‘L“NˆŒ	Ø�9‰9×Ñ˜e×$Ñ$ØŸ	™	 # 2˜ˆDŒIØ×%×%¨$¯-¯-çŠuÜÐ<Ô=Ü˜T 5Ó)ˆCà
×Ñ×ÑØ!$§¡¨1¨2 ˆÔßŠ5ÜÐ*¨D×,BÑ,B×,IÑ,IÈ'Ó,RÔSà‡}‡}Ø×%×%Ü"Ð#IÓJÐJä §¡¨t¯y©y¸$×:PÑ:PÓQ‰àˆä�dÓ!Ð!r   c                 ól  • U (       d  g[         R                  " U 5      R                  5       n[         R                  " U5      R                  5       n[         R                  " X1-   5      R                  5       n[        U5      n[	        [        U5      5       H  nXV==   XF   -  ss'   M     [        U5      $ )z{Scramble algorithm used in cached_sha2_password fast path.

XOR(SHA256(password), SHA256(SHA256(SHA256(password)), nonce))
r   )r8   Úsha256r   r   r   r   r    )r   ÚnonceÚp1Úp2Úp3Úresr#   s          r   Úscramble_caching_sha2ry   Á   s…   € ö Øä	�Š˜Ó	!×	(Ñ	(Ó	*€BÜ	�Š˜Ó	×	"Ñ	"Ó	$€BÜ	�Š˜™
Ó	#×	*Ñ	*Ó	,€Bä
�B‹-€CÜ”3�r“7Ž^ˆØ‹�"‘%‰�ñ ô �‹:Ðr   c                 ó0  • U R                   (       d  [        U S5      $ UR                  5       (       a¦  UR                  5       U l        U R                  R                  S5      (       a  U R                  S S U l        [        (       a'  [        SU R                  R                  5       < 35        [        U R                   U R                  5      n[        X5      nUR                  5       (       d  [        SUR                  S S -  5      eUR                  S5        UR                  5       nUS:X  a8  [        (       a  [        S5        U R                  5       nUR!                  5         U$ US	:w  a  [        S
U-  5      e[        (       a  [        S5        U R"                  (       a.  [        (       a  [        S5        [        X R                   S-   5      $ U R$                  (       d  [        U S5      nUR                  5       (       d  [        SUR                  S S -  5      eUR                  SS  U l        [        (       a$  [        U R$                  R'                  S5      5        [)        U R                   U R                  U R$                  5      n[        X5      ng )Nr   rU   rc   z%caching sha2: Trying fast path. salt=z.caching sha2: Unknown packet for fast auth: %sr   é   z%caching sha2: succeeded by fast path.é   z.caching sha2: Unknown result for fast auth: %sz!caching sha2: Trying full auth...z:caching sha2: Sending plain password via secure connectionó   z/caching sha2: Unknown packet for public key: %sre   )r   rN   ri   rj   rP   rk   rg   rh   Úhexry   rm   r   rn   ÚadvanceÚ
read_uint8rI   rJ   rf   rl   ro   ra   )rK   rM   Ú	scrambledÚnrp   s        r   Úcaching_sha2_password_authrƒ   Õ   sü  € à�=�=Ü˜$ Ó$Ð$à
×!Ñ!×#Ñ#à—L‘L“NˆŒ	Ø�9‰9×Ñ˜e×$Ñ$ØŸ	™	 # 2˜ˆDŒIßŠ5ÜÐ9¸$¿)¹)¿-¹-»/Ñ9LÐMÔNÜ)¨$¯-©-¸¿¹ÓCˆ	Ü˜Ó)ˆð ×!Ñ!×#Ñ#ÜØ<¸s¿y¹yÈÈ!¸}ÑLó
ð 	
ð ‡K�K�„NØ�‰Ó€AàˆAƒvßŠ5ÜÐ9Ô:Ø×ÑÓ!ˆØ�‰ÔØˆ
àˆAƒvÜÐOÐRSÑSÓTÐTç‚uÜÐ1Ô2à‡|‡|ßŠ5ÜÐNÔOÜ˜$§¡°Ñ 5Ó6Ð6à×!×!Ü˜˜wÓ'ˆØ×%Ñ%×'Ñ'Ü"ØAÀCÇIÁIÈbÈqÀMÑQóð ð "%§¡¨1¨2 ˆÔßŠ5Ü�$×(Ñ(×/Ñ/°Ó8Ô9ä˜DŸM™M¨4¯9©9°d×6LÑ6LÓM€DÜ
�TÓ
 �Cr   )Ú__doc__Úerrr   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   r   Ú)cryptography.hazmat.primitives.asymmetricr   rY   r)   Ú	functoolsr	   r8   rg   r   Únewr   r   r   r(   r+   r5   rF   rN   rS   ra   rq   ry   rƒ   © r   r   Ú<module>rŒ      sŸ   ðñõ "ðÝ<ßDÝAàÐõ Û ð 	€Ø€Ù�7—;‘; Ó'€ò%òð €ò	
ò)ò#òRò	!òò,"òBó(;!øðO ó ØÒðús   ŠA% Á%A0Á/A0