package Ġjp . dat ach ain . cord a . ib c . clients . cord a Ċ Ċ import Ġcom . google . protobuf . ByteString Ċ import Ġjp . dat ach ain . cord a . ib c . ics 2 3 . Commit ment Proof Ċ import Ġnet . cord a . core . crypto .* Ċ import Ġnet . cord a . core . serialization . Serialized Bytes Ċ import Ġnet . cord a . core . transactions . Core Transaction Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . Data InputStream Ċ import Ġjava . io . Data OutputStream Ċ Ċ fun ĠSigned Transaction . to Proof (): ĠCommit ment Proof Ġ{ ĊĠĠĠ Ġval Ġraw Out Ġ= ĠByteArrayOutputStream () ĊĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( raw Out ) ĊĠĠĠ Ġout . writeInt ( tx Bits . bytes . size ) ĊĠĠĠ Ġout . write ( tx Bits . bytes ) ĊĠĠĠ Ġout . writeInt ( sigs . size ) ĊĠĠĠ Ġsig s . forEach { ĊĠĠĠĠĠĠĠ Ġout . writeInt ( it . bytes . size ) ĊĠĠĠĠĠĠĠ Ġout . write ( it . bytes ) ĊĠĠĠĠĠĠĠ Ġval Ġby Ġ= Ġit . by . encoded ĊĠĠĠĠĠĠĠ Ġout . writeInt ( by . size ) ĊĠĠĠĠĠĠĠ Ġout . write ( by ) ĊĠĠĠĠĠĠĠ Ġout . writeInt ( it . signature Metadata . platform Version ) ĊĠĠĠĠĠĠĠ Ġout . writeInt ( it . signature Metadata . scheme Number ID ) ĊĠĠĠĠĠĠĠ Ġif Ġ( it . partial Mer kle Tree Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġit . partial Mer kle Tree !!. root ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( root ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPartial Mer kle Tree . Partial Tree . Included Leaf Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt ( root . hash . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( root . hash . bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPartial Mer kle Tree . Partial Tree . Leaf Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt ( root . hash . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( root . hash . bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPartial Mer kle Tree . Partial Tree . Node Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNotImplementedError () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġout . flush () ĊĠĠĠ Ġreturn ĠCommit ment Proof ( ByteString . copyFrom ( raw Out . toByteArray ())) Ċ } Ċ Ċ fun ĠCommit ment Proof . to Signed Transaction (): ĠSigned Transaction Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= ĠData InputStream ( ByteArray InputStream ( bytes )) ĊĊĠĠĠ Ġval Ġtx Bits Bytes Ġ= ĠByteArray ( input . readInt ()) ĊĠĠĠ Ġinput . read Fully ( tx Bits Bytes ) ĊĠĠĠ Ġval Ġtx Bits Ġ= ĠSerialized Bytes < Core Transaction >( tx Bits Bytes ) ĊĊĠĠĠ Ġval Ġsig s Ġ= ĠArrayList < Transaction Signature >() ĊĠĠĠ Ġval Ġn Sig s Ġ= Ġinput . readInt () ĊĠĠĠ Ġrepeat ( n Sig s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( input . readInt ()) ĊĠĠĠĠĠĠĠ Ġinput . read Fully ( bytes ) ĊĊĠĠĠĠĠĠĠ Ġval Ġby Bytes Ġ= ĠByteArray ( input . readInt ()) ĊĠĠĠĠĠĠĠ Ġinput . read Fully ( by Bytes ) ĊĠĠĠĠĠĠĠ Ġval Ġby Ġ= ĠCrypto . decode PublicKey ( by Bytes ) ĊĊĠĠĠĠĠĠĠ Ġval Ġplatform Version Ġ= Ġinput . readInt () ĊĠĠĠĠĠĠĠ Ġval Ġscheme Number ID Ġ= Ġinput . readInt () ĊĠĠĠĠĠĠĠ Ġval Ġsignature Metadata Ġ= ĠSignature Metadata ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplatform Version Ġ= Ġplatform Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheme Number ID Ġ= Ġscheme Number ID ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpartial Mer kle Tree Ġ= Ġwhen Ġ( input . readInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Bytes Ġ= ĠByteArray ( input . readInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . read Fully ( hash Bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= ĠSecure Hash . SHA 2 5 6 ( hash Bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPartial Mer kle Tree ( Partial Mer kle Tree . Partial Tree . Included Leaf ( hash )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Bytes Ġ= ĠByteArray ( input . readInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . read Fully ( hash Bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= ĠSecure Hash . SHA 2 5 6 ( hash Bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPartial Mer kle Tree ( Partial Mer kle Tree . Partial Tree . Leaf ( hash )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠNotImplementedError () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsig s . add ( Transaction Signature ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes Ġ= Ġbytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġ= Ġby , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Metadata Ġ= Ġsignature Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpartial Mer kle Tree Ġ= Ġpartial Mer kle Tree ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġst x Ġ= ĠSigned Transaction ( tx Bits Ġ= Ġtx Bits , Ġsig s Ġ= Ġsig s ) ĊĠĠĠ Ġst x . verify Required Signatures () ĊĠĠĠ Ġreturn Ġst x Ċ }