package Ġcom . small raw . wallet . hd Ċ Ċ import Ġjava . math . BigInteger Ċ Ċ class ĠHD Key Ġ: ĠEC Key Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠH ARD EN ED _ FLAG Ġ= Ġ 0 x 8 0 0 0 0 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġchain Code : ĠByteArray ĊĠĠĠ Ġval Ġdepth : ĠInt ĊĠĠĠ Ġprivate Ġval Ġchild Number : ĠInt ĊĠĠĠ Ġprivate Ġval Ġis Hard ened : ĠBoolean ĊĊĠĠĠ Ġ@ Throws ( IllegalArgumentException :: class ) ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpriv Key : ĠBigInteger , ĊĠĠĠĠĠĠĠ Ġchain Code : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġparent : ĠHD Key ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġchild Number : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġis Hard ened : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ: Ġsuper ( priv Key ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠprivateKey Ġ= Ġpriv Key . toByteArray () ĊĠĠĠĠĠĠĠ Ġif Ġ( privateKey . size Ġ> Ġ 3 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ ĠIllegalArgumentException (" Private Ġkey Ġis Ġlonger Ġthan Ġ 3 3 Ġbytes ") ĊĠĠĠĠĠĠĠ Ġif Ġ( chain Code . size Ġ!= Ġ 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Chain Ġcode Ġis Ġnot Ġ 3 2 Ġbytes ") ĊĠĠĠĠĠĠĠ Ġthis . chain Code Ġ= Ġchain Code . copyOf Range ( 0 , Ġchain Code . size ) ĊĠĠĠĠĠĠĠ Ġthis . depth Ġ= Ġif Ġ( parent Ġ!= Ġnull ) Ġparent . depth Ġ+ Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . child Number Ġ= Ġchild Number ĊĠĠĠĠĠĠĠ Ġthis . is Hard ened Ġ= Ġis Hard ened ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IllegalArgumentException :: class ) ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ ĠpublicKey : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġchain Code : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġparent : ĠHD Key ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġchild Number : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġis Hard ened : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ: Ġsuper ( publicKey ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( publicKey . size Ġ!= Ġ 3 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ ĠIllegalArgumentException (" Private Ġkey Ġis Ġlonger Ġthan Ġ 3 3 Ġbytes ") ĊĠĠĠĠĠĠĠ Ġif Ġ( chain Code . size Ġ!= Ġ 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Chain Ġcode Ġis Ġnot Ġ 3 2 Ġbytes ") ĊĠĠĠĠĠĠĠ Ġthis . chain Code Ġ= Ġchain Code . copyOf Range ( 0 , Ġchain Code . size ) ĊĠĠĠĠĠĠĠ Ġthis . depth Ġ= Ġif Ġ( parent Ġ!= Ġnull ) Ġparent . depth Ġ+ Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . child Number Ġ= Ġchild Number ĊĠĠĠĠĠĠĠ Ġthis . is Hard ened Ġ= Ġis Hard ened ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Chain Code () Ġ= Ġchain Code ĊĊĠĠĠ Ġfun Ġget P added Priv Key Bytes (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( privateKey Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠByteArray ( 3 3 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpriv Key Bytes : ĠByteArray Ġ= ĠprivateKey . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpadded Bytes Ġ= ĠByteArray ( 3 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriv Key Bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadded Bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 3 Ġ- Ġpriv Key Bytes . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriv Key Bytes . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpadded Bytes ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }