package Ġio . lib p 2 p . pubsub Ċ Ċ import Ġio . lib p 2 p . core . crypto . Priv Key Ċ import Ġio . lib p 2 p . core . crypto . marshal PublicKey Ċ import Ġio . lib p 2 p . core . crypto . un marshal PublicKey Ċ import Ġio . lib p 2 p . etc . types . to Protobuf Ċ import Ġpub sub . pb . Rpc Ċ Ċ val ĠSign Prefix Ġ= Ġ" lib p 2 p - pubsub :" . toByteArray () Ċ Ċ fun Ġpub sub Sign ( msg : ĠRpc . Message , Ġkey : ĠPriv Key ): ĠRpc . Message Ġ{ ĊĠĠĠ Ġif Ġ( msg . has Key () Ġ|| Ġmsg . has Signature ()) Ġthrow ĠIllegalArgumentException (" Message Ġto Ġsign Ġshould Ġnot Ġcontain Ġ' key ' Ġor Ġ' signature ' Ġfields ") ĊĠĠĠ Ġval Ġsignature Ġ= Ġkey . sign ( Sign Prefix Ġ+ Ġmsg . toByteArray ()) ĊĠĠĠ Ġreturn ĠRpc . Message . newBuilder ( msg ) ĊĠĠĠĠĠĠĠ Ġ. set Signature ( signature . to Protobuf ()) ĊĠĠĠĠĠĠĠ Ġ. set Key ( marshal PublicKey ( key . publicKey ()). to Protobuf ()) ĊĠĠĠĠĠĠĠ Ġ. build () Ċ } Ċ Ċ fun Ġpub sub Validate ( msg : ĠRpc . Message ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġmsg To Sign Ġ= ĠRpc . Message . newBuilder ( msg ) ĊĠĠĠĠĠĠĠ Ġ. clear Signature () ĊĠĠĠĠĠĠĠ Ġ. clear Key () ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġreturn Ġunmarshal PublicKey ( msg . key . toByteArray ()). verify ( ĊĠĠĠĠĠĠĠ ĠSign Prefix Ġ+ Ġmsg To Sign . toByteArray (), ĊĠĠĠĠĠĠĠ Ġmsg . signature . toByteArray () ĊĠĠĠ Ġ) Ċ } Ċ