package Ġcom . rim mer . mysql . protocol . encoder Ċ Ċ import Ġcom . rim mer . mysql . protocol . constants . Server Capability Ċ import Ġcom . rim mer . mysql . protocol . constants . default Auth Method Ċ import Ġcom . rim mer . mysql . protocol . decoder . write CString Ċ import Ġio . netty . buffer . Byte Buf Ċ import Ġio . netty . util . Charset Util Ċ import Ġjava . security . Message Digest Ċ Ċ val Ġdefault Client Flags Ġ= ĊĠĠĠ ĠServer Capability . PROTOCOL 4 1 Ġor ĊĠĠĠ ĠServer Capability . SECURE _ CONNECTION Ġor ĊĠĠĠ ĠServer Capability . MULTI _ RESULTS Ġor ĊĠĠĠ ĠServer Capability . TRANSACTION S Ġor ĊĠĠĠ ĠServer Capability . PLUGIN _ AUTH Ċ Ċ fun Ġmake Token ( password : ĠString , Ġsecret : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠ Ġval Ġsha Ġ= ĠMessage Digest . getInstance (" SHA - 1 ") ĊĠĠĠ Ġval Ġpassword Bytes Ġ= Ġpassword . toByteArray ( Charset Util . US _ ASCII ) ĊĊĠĠĠ Ġ// ĠHash Ġthe Ġprovided Ġpassword . ĊĠĠĠ Ġval Ġpass 1 Ġ= Ġsha . digest ( password Bytes ) ĊĠĠĠ Ġsha . reset () ĊĊĠĠĠ Ġ// ĠHash Ġthe Ġhashed Ġpassword . ĊĠĠĠ Ġval Ġpass 2 Ġ= Ġsha . digest ( pass 1 ) ĊĠĠĠ Ġsha . reset () ĊĊĠĠĠ Ġ// ĠHash Ġthe Ġserver Ġsecret Ġtogether Ġwith Ġdual - hashed Ġpassword . ĊĠĠĠ Ġsha . update ( secret ) ĊĠĠĠ Ġsha . update ( pass 2 ) ĊĠĠĠ Ġval Ġtoken Ġ= Ġsha . digest () ĊĊĠĠĠ Ġ// ĠX or Ġeach Ġbyte Ġin Ġthe Ġtoken Ġwith Ġthe Ġpassword Ġhash . ĊĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġtoken . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoken [ i ] Ġ= Ġ( token [ i ]. toInt () Ġxor Ġpass 1 [ i ]. toInt ()). to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġtoken Ċ } Ċ Ċ fun Ġwrite Authentication ( max Packet Size : ĠInt , Ġcharset : ĠInt , Ġuser : ĠString , Ġpassword : ĠString , Ġseed : ĠByteArray , Ġdatabase : ĠString ?): ĠByte Buf Ġ{ ĊĠĠĠ Ġval Ġpacket Ġ= Ġpacket Buffer ( 1 2 8 ) ĊĊĠĠĠ Ġval Ġclient Flags Ġ= Ġif ( database Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault Client Flags ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault Client Flags Ġor ĠServer Capability . WITH _ DB ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtoken Ġ= Ġmake Token ( password , Ġseed ) ĊĠĠĠ Ġpacket . writeInt ( client Flags ) ĊĠĠĠ Ġpacket . writeInt ( max Packet Size ) ĊĠĠĠ Ġpacket . write Byte ( charset ) ĊĠĠĠ Ġpacket . write Bytes ( auth Padding ) ĊĠĠĠ Ġpacket . write CString ( user ) ĊĠĠĠ Ġpacket . write Byte ( token . size ) ĊĠĠĠ Ġpacket . write Bytes ( token ) ĊĊĠĠĠ Ġif ( database Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpacket . write CString ( database ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpacket . write CString ( default Auth Method ) ĊĠĠĠ Ġwrite Packet Length ( packet , Ġ 1 ) ĊĠĠĠ Ġreturn Ġpacket Ċ } Ċ Ċ // ĠWe Ġcache Ġthis Ġhere Ġto Ġavoid Ġre creating Ġit Ġeach Ġtime . Ċ private Ġval Ġauth Padding Ġ= ĠByteArray ( 2 3 )