package Ġio . pro venance . engine . crypto Ċ Ċ import Ġorg . ke thereum . crypto . CUR VE Ċ import Ġorg . ke thereum . crypto . api . ec . EC DS AS ign ature Ċ import Ġjava . math . BigInteger Ċ Ċ // ĠA ĠZero Ġvalue Ġbyte Ċ const Ġval ĠZERO Ġ= Ġ 0 x 0 . to Byte () Ċ // ĠThe Ġ( Order Ġ/ Ġ 2 ) Ġ( used Ġfor Ġsignature Ġm alle ability Ġchecks Ġ-- Ġto Ġdiscard Ġthe Ġnegative Ġsignature Ġpoint ) Ċ private Ġval ĠHAL F _ CUR VE _ ORDER Ġ= ĠCUR VE . n . shift Right ( 1 ) Ċ Ċ /** Ċ Ġ* Ġencode As BTC Ġreturns Ġthe ĠE CD SA Ġsignature Ġas Ġa ĠByteArray Ġof Ġr Ġ|| Ġs , Ċ Ġ* Ġwhere Ġboth Ġr Ġand Ġs Ġare Ġencoded Ġinto Ġ 3 2 Ġbyte Ġbig Ġendian Ġintegers . Ċ Ġ*/ Ċ fun ĠEC DS AS ign ature . encode As BTC (): ĠByteArray Ġ{ ĊĠĠĠ Ġ// ĠCan onical ize Ġ- ĠIn Ġorder Ġto Ġremove Ġm alle ability , ĊĠĠĠ Ġ// Ġwe Ġset Ġs Ġ= Ġcurve _ order Ġ- Ġs , Ġif Ġs Ġis Ġgreater Ġthan Ġcurve . Order () Ġ/ Ġ 2 . ĊĠĠĠ Ġvar Ġsig S Ġ= Ġthis . s ĊĠĠĠ Ġif Ġ( sig S Ġ> ĠHAL F _ CUR VE _ ORDER ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsig S Ġ= ĠCUR VE . n . subtract ( sig S ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġs Bytes Ġ= Ġsig S . get Unsigned Bytes () ĊĠĠĠ Ġval Ġr Bytes Ġ= Ġthis . r . get Unsigned Bytes () ĊĊĠĠĠ Ġrequire ( r Bytes . size Ġ<= Ġ 3 2 ) Ġ{ Ġ" cannot Ġencode Ġr Ġinto ĠBTC ĠFormat , Ġsize Ġoverflow Ġ(${ r Bytes . size } Ġ> Ġ 3 2 )" Ġ} ĊĠĠĠ Ġrequire ( s Bytes . size Ġ<= Ġ 3 2 ) Ġ{ Ġ" cannot Ġencode Ġs Ġinto ĠBTC ĠFormat , Ġsize Ġoverflow Ġ(${ s Bytes . size } Ġ> Ġ 3 2 )" Ġ} ĊĊĠĠĠ Ġval Ġsignature Ġ= ĠByteArray ( 6 4 ) ĊĠĠĠ Ġ// Ġ 0 Ġpad Ġthe Ġbyte Ġarrays Ġfrom Ġthe Ġleft Ġif Ġthey Ġaren 't Ġbig Ġenough . ĊĠĠĠ ĠSystem . arraycopy ( r Bytes , Ġ 0 , Ġsignature , Ġ 3 2 Ġ- Ġr Bytes . size , Ġr Bytes . size ) ĊĠĠĠ ĠSystem . arraycopy ( s Bytes , Ġ 0 , Ġsignature , Ġ 6 4 Ġ- Ġs Bytes . size , Ġs Bytes . size ) ĊĊĠĠĠ Ġreturn Ġsignature Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġbytes Ġfrom Ġa ĠBigInteger Ġas Ġan Ġunsigned Ġversion Ġby Ġtrunc ating Ġa Ġbyte Ġif Ġneeded . Ċ Ġ*/ Ċ fun ĠBigInteger . get Unsigned Bytes (): ĠByteArray Ġ{ ĊĠĠĠ Ġval Ġbytes Ġ= Ġthis . toByteArray (); ĊĊĠĠĠ Ġif Ġ( bytes [ 0 ] Ġ== ĠZERO ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbytes . drop ( 1 ). toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġbytes ; Ċ } Ċ