ó ·\c@s„dZddlmZmZddlmZddlmZddlm Z m Z y@ddl m Z ddl mZmZdd lmZeZWnek r«eZnXdd lmZdd lZdd lZdd lZdd lZeZd Zeejd ƒZd„Z d„Z!dZ"de#fd„ƒYZ$d„Z%d„Z&d„Z'd„Z(d„Z)d„Z*d„Z+d„Z,d S(s Implements auth methods i(t text_typetPY2(tCLIENT(tOperationalError(tbyte2inttint2byteiÿÿÿÿ(tdefault_backend(t serializationthashes(tpadding(tpartialNitsha1cCsn|s dSt|ƒjƒ}t|ƒjƒ}tƒ}|j|t ƒ|j|ƒ|jƒ}t||ƒS(s'Scramble used for mysql_native_passwordt(tsha1_newtdigesttupdatetSCRAMBLE_LENGTHt _my_crypt(tpasswordtmessagetstage1tstage2tstresult((s./tmp/pip-build-7KIPgS/PyMySQL/pymysql/_auth.pytscramble_native_password"s   cCs\t|ƒ}tr!t|ƒ}nx.tt|ƒƒD]}||c||NLLiiii@(twarningstwarnt_hash_password_323tSCRAMBLE_LENGTH_323tstructtunpackR tiotBytesIORtminRtwriteRtintR'tgetvalueR( RRt hash_passt hash_messaget hash_pass_nthash_message_ntrand_sttoutbuft_textratouttc((s./tmp/pip-build-7KIPgS/PyMySQL/pymysql/_auth.pytscramble_old_passwordNs   $ "+   'cCsµd}d}d}xyg|D]}|dkrt|ƒ^qD]L}||d@|||d >d @N}||d >|Ad @}||d @}q>W|d@}|d@}tjd ||ƒS(Ni5W0PiiqV4t s i i i?iIÿÿÿÿiis>LL(RAs i i I€iÿÿÿI€iÿÿÿ(RR.tpack(Rtnrtaddtnr2txR?tr1tr2((s./tmp/pip-build-7KIPgS/PyMySQL/pymysql/_auth.pyR,es2"  cCs'|j|ƒ|jƒ}|jƒ|S(N(t write_packett _read_packett check_error(tconnt send_datatpkt((s./tmp/pip-build-7KIPgS/PyMySQL/pymysql/_auth.pyt _roundtripxs   cCsct|ƒ}t|ƒ}t|ƒ}x2tt|ƒƒD]}||c|||Ns>