package Ġcom . example . bitcoin hand son Ċ Ċ import Ġcom . example . bitcoin hand son . Network . MAIN NET Ċ import Ġcom . example . bitcoin hand son . Network . TEST NET Ċ import Ġcom . example . bitcoin hand son . Utils . Companion . generate Key Data And Chain Code Ċ import Ġcom . example . bitcoin hand son . Utils . Companion . get Ec Curve Ċ import Ġcom . example . bitcoin hand son . Utils . Companion . sha 2 5 6 ri pe md 1 6 0 Ċ import Ġcom . example . bitcoin hand son . Utils . Companion . sequence Data Ċ import Ġcom . example . bitcoin hand son . Utils . Companion . serialize Key Ċ import Ġcom . example . bitcoin hand son . Utils . Companion . sha 2 5 6 Ċ import Ġio . ipfs . mult ibase . Base 5 8 Ċ import Ġorg . bouncycastle . j ce . provider . Bo unc y Castle Provider Ċ import Ġorg . bouncycastle . math . ec . EC Point Ċ import Ġorg . bouncycastle . math . ec . Fixed Point Com b Multiplier Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . security . Security Ċ Ċ class ĠPublicKey Ġprivate Ġconstructor ( ĊĠĠĠ Ġval Ġnetwork : ĠNetwork , ĊĠĠĠ Ġval Ġkey Data : ĠEC Point , ĊĠĠĠ Ġval Ġencoded Key : ĠString , ĊĠĠĠ Ġval Ġchecksum : ĠByteArray , ĊĠĠĠ Ġval Ġdepth : ĠByte , ĊĠĠĠ Ġval Ġparent Fingerprint : ĠByteArray , ĊĠĠĠ Ġval Ġchild Number : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠP 2 PK H _ PREFIX ES : ĠMap < Network , ĠByte > Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMAIN NET Ġto Ġ 0 x 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTEST NET Ġto Ġ 0 x 6 F ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠP 2 W PK H _ PREFIX ES : ĠMap < Network , ĠString > Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMAIN NET Ġto Ġ" bc ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTEST NET Ġto Ġ" tb " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork : ĠNetwork , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Data : ĠEC Point , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchain Code : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepth : ĠByte , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Fingerprint : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Number : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠPublicKey Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( key Serialized , Ġchecksum ) Ġ= Ġserialize Key ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . publicKey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdepth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Fingerprint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Data . get Encoded ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPublicKey ( network , Ġkey Data , Ġkey Serialized , Ġchecksum , Ġdepth , Ġparent Fingerprint , Ġchild Number ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠSecurity . add Provider ( Bo unc y Castle Provider ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Fingerprint () Ġ= Ġsha 2 5 6 ri pe md 1 6 0 ( key Data . get Encoded ( true )). slice ( 0 .. 3 ). toByteArray () ĊĊĠĠĠ Ġfun Ġderived Child ( parent Chain Code : ĠByteArray , Ġindex : ĠInt ): ĠPublicKey Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsequence Data Ġ= Ġsequence Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Data . get Encoded ( true ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByteBuffer . allocate ( 4 ). put Int ( index ). array () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( child Key Data , Ġchild Chain Code ) Ġ= Ġgenerate Key Data And Chain Code ( sequence Data , Ġparent Chain Code ) ĊĊĠĠĠĠĠĠĠ Ġval Ġchild PublicKey Ġ= ĠFixed Point Com b Multiplier () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. multiply ( get Ec Curve (). g , Ġchild Key Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( key Data ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠgetInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild PublicKey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Chain Code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( depth Ġ+ Ġ 1 ). to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Fingerprint (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget P 2 PK H Address (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix : ĠByte Ġ= ĠP 2 PK H _ PREFIX ES [ network ] !! ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠByteBuffer . allocate ( 1 ). put ( prefix ). array () Ġ+ Ġsha 2 5 6 ri pe md 1 6 0 ( key Data . get Encoded ( true )) ĊĠĠĠĠĠĠĠ Ġval Ġpayload Checksum Ġ= Ġsha 2 5 6 ( sha 2 5 6 ( payload )). slice ( 0 .. 3 ). toByteArray () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠBase 5 8 . encode ( payload Ġ+ Ġpayload Checksum ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget P 2 W PK H Address (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= ĠP 2 W PK H _ PREFIX ES [ network ] !! ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġkey Hash Ġ= Ġsha 2 5 6 ri pe md 1 6 0 ( key Data . get Encoded ( true )) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠBe ch 3 2 . encode Address ( prefix , Ġversion , Ġkey Hash ) ĊĠĠĠ Ġ} Ċ } Ċ