package Ġorg . know ledger . ledger . crypto . serial Ċ Ċ import Ġkotlinx . serialization . Composite Decoder Ċ import Ġkotlinx . serialization . Decoder Ċ import Ġkotlinx . serialization . Encoder Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . Serial Descriptor Ċ import Ġkotlinx . serialization . Serialization Exception Ċ import Ġjava . security . KeyPair Ċ import Ġjava . security . PrivateKey Ċ import Ġjava . security . PublicKey Ċ Ċ object ĠKey Pair Serializer Ġ: ĠK Serializer < KeyPair > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĊĠĠĠĠĠĠĠ ĠSerial Descriptor (" key Pair ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Name Ġ= Ġ" private ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor Ġ= ĠPrivate Key Serializer . descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Name Ġ= Ġ" public ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor Ġ= ĠPublicKey Serializer . descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠKey Pair Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith ( decoder . begin Structure ( descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġprivate : ĠPrivate Key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġpublic : ĠPublicKey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloop @ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġi Ġ= Ġdecode Element Index ( descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Decoder . READ _ DONE Ġ-> Ġbreak @ loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġprivate Ġ= Ġdecode Serializable Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor , Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate Key Serializer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġpublic Ġ= Ġdecode Serializable Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor , Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPublicKey Serializer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSerialization Exception (" Unknown Ġindex Ġ$ i ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Structure ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Pair ( public , Ġprivate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠKey Pair ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( encoder . begin Structure ( descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Serializable Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate Key Serializer , Ġvalue . private ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Serializable Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPublicKey Serializer , Ġvalue . public ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Structure ( descriptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }