Ë
    Ø<jÖ  ã                   óä   — d Z ddlmZ 	 ddlmZ ddlmZmZ ddlm	Z	 dZ
dd	lmZ dd
lZdZdZ eej"                  d«      Zd„ Zd„ Zdad„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy
# e$ r dZ
Y ŒNw xY w)z
Implements auth methods
é   )ÚOperationalErroré    )Údefault_backend)ÚserializationÚhashes)ÚpaddingTF)ÚpartialNé   Úsha1c                 ó
  — | syt        | «      j                  «       }t        |«      j                  «       }t        «       }|j                  |dt         «       |j                  |«       |j                  «       }t	        ||«      S )z'Scramble used for mysql_native_passwordó    N)Úsha1_newÚdigestÚupdateÚSCRAMBLE_LENGTHÚ	_my_crypt)ÚpasswordÚmessageÚstage1Ústage2ÚsÚresults         úU/var/www/python/quitsure-discovery/venv/lib/python3.12/site-packages/pymysql/_auth.pyÚscramble_native_passwordr      sm   € áØähÓ×&Ñ&Ó(€FÜfÓ×$Ñ$Ó&€FÜ‹
€AØ‡HHˆWÐ%”oÐ&Ô'Ø‡HHˆVÔØX‰X‹Z€FÜV˜VÓ$Ð$r   c                 ó€   — t        | «      }t        t        |«      «      D ]  }||xx   ||   z  cc<   Œ t        |«      S ©N)Ú	bytearrayÚrangeÚlenÚbytes)Úmessage1Úmessage2r   Úis       r   r   r   ,   sB   € ÜxÓ €Fä”3v“;Óò !ˆØˆq‹	X˜a‘[Ñ Œ	ð!ô ‹=Ðr   c                  óF   — 	 ddl m}  | ay # t        $ r t	        d«      ‚w xY w)Nr   ©Úbindingsz='pynacl' package is required for ed25519_password auth method)Únaclr&   Ú_nacl_bindingsÚImportErrorÚRuntimeErrorr%   s    r   Ú
_init_naclr+   ;   s.   € ð
Ý!à!‰øÜò 
ÜØKó
ð 	
ð
ús   ‚ ‹ c                 ó²   — t        | «      }t        t        |d   dz  g«      «      }t        t        |d   dz  dz  g«      «      }|t        | dd «      z   |z   S )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˜RyÓ!Ñ! DÑ(Ð(r   c                 ó2  — t         s
t        «        t        j                  | «      j	                  «       }t        |dd «      }t        j                  |dd |z   «      j	                  «       }t         j                  |«      }t         j                  |«      }t         j                  |«      }t        j                  ||z   |z   «      j	                  «       }t         j                  |«      }t         j                  ||«      }t         j                  ||«      }	||	z   S )znSign 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˜1‘u˜xÑ'Ó(×/Ñ/Ó1€Aô 	×8Ñ8¸Ó;€AÜ	×	6Ñ	6°q¸!Ó	<€BÜ×5Ñ5°b¸!Ó<€Að ˆq‰5€Lr   c                 óh   — | j                  |«       | j                  «       }|j                  «        |S r   )Úwrite_packetÚ_read_packetÚcheck_error)ÚconnÚ	send_dataÚpkts      r   Ú
_roundtriprN   w   s-   € Ø×ÑiÔ Ø
×
Ñ
Ó
€CØ‡OOÔØ€Jr   c                 ó®   — |d t          }t        | «      }t        |«      }t        t        |«      «      D ]  }||xx   |||z     z  cc<   Œ t	        |«      S r   )r   r   r   r   r    )r   ÚsaltÚpassword_bytesÚsalt_lenr#   s        r   Ú_xor_passwordrS   ~   sa   € ð Ð ”Ð!€DÜ˜xÓ(€Nä4‹y€HÜ”3~Ó&Ó'ò 0ˆØqÓ˜T ! h¡,Ñ/Ñ/Ôð0äÓ Ð r   c           	      ó>  — t         st        d«      ‚t        | dz   |«      }t        j                  |t        «       «      }|j                  |t        j                  t        j                  t        j                  «       ¬«      t        j                  «       d¬«      «      S )zhEncrypt 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                 óÜ  — | j                   r,t        rt        d«       | j                  dz   }t	        | |«      S |j                  «       ry|j                  «       | _        | j                  j                  d«      r| j                  d d | _        | j                  s)| j                  rt        rt        d«       t	        | d«      }|j                  «       r?|j                  dd  | _	        t        r%t        d| j                  j                  d«      «       | j                  rC| j                  st        d	«      ‚t        | j                  | j                  | j                  «      }nd
}t	        | |«      S )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  € Ø‡|‚|ÝÜÐ2Ô3Ø}‰}˜uÑ$ˆÜ˜$ Ó%Ð%à
×!Ñ!Ô#Ø—L‘L“NˆŒ	Ø9‰9×Ñ˜eÔ$ØŸ	™	 # 2˜ˆDŒIØ×%Ò%¨$¯-ª-åÜÐ<Ô=Ü˜T 5Ó)ˆCà
×ÑÔØ!$§¡¨1¨2 ˆÔÝÜÐ*¨D×,BÑ,B×,IÑ,IÈ'Ó,RÔSà‡}‚}Ø×%Ò%Ü"Ð#IÓJÐJä §¡¨t¯y©y¸$×:PÑ:PÓQ‰àˆäd˜DÓ!Ð!r   c                 ó^  — | syt        j                  | «      j                  «       }t        j                  |«      j                  «       }t        j                  ||z   «      j                  «       }t        |«      }t	        t        |«      «      D ]  }||xx   ||   z  cc<   Œ t        |«      S )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Ü	‰˜˜U™
Ó	#×	*Ñ	*Ó	,€Bä
B‹-€CÜ”3r“7‹^ò ˆØˆA‹"Q‘%‰Œðô ‹:Ðr   c                 ó¸  — | j                   st        | d«      S |j                  «       rœ|j                  «       | _        | j                  j                  d«      r| j                  d d | _        t        r&t        d| j                  j                  «       ›«       t        | j                   | j                  «      }t        | |«      }|j                  «       st        d|j                  d d z  «      ‚|j                  d«       |j                  «       }|dk(  r3t        rt        d«       | j                  «       }|j!                  «        |S |d	k7  rt        d
|z  «      ‚t        rt        d«       | j"                  r*t        rt        d«       t        | | j                   dz   «      S | j$                  sut        | d«      }|j                  «       st        d|j                  d d z  «      ‚|j                  dd  | _        t        r$t        | j$                  j'                  d«      «       t)        | j                   | j                  | j$                  «      }t        | |«      }y )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ÝÜÐ9¸$¿)¹)¿-¹-»/Ð9LÐMÔNÜ)¨$¯-©-¸¿¹ÓCˆ	Ü˜˜yÓ)ˆð ×!Ñ!Ô#ÜØ<¸s¿y¹yÈÈ!¸}ÑLó
ð 	
ð ‡KK„NØ‰Ó€AàˆA‚vÝÜÐ9Ô:Ø×ÑÓ!ˆØ‰ÔØˆ
àˆA‚vÜÐOÐRSÑSÓTÐTåÜÐ1Ô2à‡|‚|ÝÜÐNÔOÜ˜$ §¡°Ñ 5Ó6Ð6à×!Ò!Ü˜˜wÓ'ˆØ×%Ñ%Ô'Ü"ØAÀCÇIÁIÈbÈqÀMÑQóð ð "%§¡¨1¨2 ˆÔÝÜ$×(Ñ(×/Ñ/°Ó8Ô9ä˜DŸM™M¨4¯9©9°d×6LÑ6LÓM€DÜ
T˜4Ó
 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% Á%A/Á.A/