package Ġnet . cord a . node info Ċ Ċ import Ġnet . cord a . cli utils . C ord aC li Wrapper Ċ import Ġnet . cord a . cli utils . start Ċ import Ġnet . cord a . core . crypto . sign Ċ import Ġnet . cord a . core . identity . Party And Certificate Ċ import Ġnet . cord a . core . internal . div Ċ import Ġnet . cord a . core . internal . read All Ċ import Ġnet . cord a . core . node . NodeInfo Ċ import Ġnet . cord a . core . serialization . Serialization Context Ċ import Ġnet . cord a . core . serialization . Serialized Bytes Ċ import Ġnet . cord a . core . serialization . deserialize Ċ import Ġnet . cord a . core . serialization . internal . Serialization Environment Ċ import Ġnet . cord a . core . serialization . internal . node Serialization Env Ċ import Ġnet . cord a . core . serialization . serialize Ċ import Ġnet . cord a . core . utilities . Network Host And Port Ċ import Ġnet . cord a . node api . internal . Signed NodeInfo Ċ import Ġnet . cord a . node api . internal . crypto . X 5 0 9 KeyStore Ċ import Ġnet . cord a . serialization . internal . AM QP _ P 2 P _ CONTEXT Ċ import Ġnet . cord a . serialization . internal . C ord a Serialization Magic Ċ import Ġnet . cord a . serialization . internal . Serialization Factory Impl Ċ import Ġnet . cord a . serialization . internal . amqp . Abstract AM QP Serialization Scheme Ċ import Ġnet . cord a . serialization . internal . amqp . amqp Magic Ċ import Ġpic oc li . CommandLine . I Type Converter Ċ import Ġpic oc li . CommandLine . Option Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Path Ċ import Ġjava . security . cert . Certificate Factory Ċ Ċ /** Ċ Ġ* ĠNode Info Ġsigning Ġtool Ġfor ĠC ord a Ċ Ġ* Ċ Ġ* ĠThis Ġutility Ġcan Ġbe Ġused Ġto Ġgenerate Ġnode Info Ġfiles Ġwithout Ġhaving Ġto Ġrun Ġa Ġc ord a Ġnode Ċ Ġ* Ċ Ġ* ĠThe Ġjava Ġkeystore Ġcontaining Ġthe Ġsigning Ġkey Ġfor Ġthe Ġnode Info Ġmust Ġspecified Ġat Ġthe Ġcommand line Ċ Ġ* Ġusing Ġthe Ġ-- key Store Ġparameter . ĠHSM Ġare Ġnot Ġcurrently Ġsupported . Ċ Ġ* Ċ Ġ* ĠThe Ġresulting Ġfilename Ġof Ġthe Ġnode info Ġwill Ġbe Ġdisplayed Ġto Ġstdout Ċ Ġ* Ċ Ġ* ĠExample Ġusage : Ċ Ġ* Ċ Ġ* ĠĠ Ġ# Ġgenerate Ġa Ġnode info Ċ Ġ* ĠĠ Ġjava Ġ- jar Ġnode info . jar Ġ-- address Ġhost : port Ġ-- outdir Ġ/ node dir Ġ-- keystore Ġ/ node dir / certificates / node keystore . j ks Ċ Ġ* Ċ Ġ* ĠĠ Ġnode info Ġwill Ġprompt Ġyou Ġfor Ġthe Ġkeystore Ġpassword , Ġand Ġthe Ġpassword Ġof Ġthe Ġnode Ġidentity Ġprivate Ġkey : Ċ Ġ* ĠĠĠ ĠStore Ġpassword Ġ( node keystore . j ks ): Ġ* ****** Ċ Ġ* ĠĠĠ ĠKey Ġpassword Ġ( identity - private - key ): Ġ* ****** Ċ Ġ* Ċ Ġ* ĠĠ Ġ# Ġdisplay Ġinformation Ġabout Ġan Ġexisting Ġnode info Ġ( name , Ġaddress Ġetc ) Ċ Ġ* ĠĠ Ġjava Ġ- jar Ġnode info . jar Ġ-- display Ġnode info - 1 2 3 4 5 6 7 8 Ċ Ġ* Ċ Ġ*/ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠNode Info Signer (). start ( args ) Ċ } Ċ Ċ class ĠNetwork Host And Port Converter Ġ: ĠI Type Converter < Network Host And Port > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġconvert ( value : ĠString ?): ĠNetwork Host And Port Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNetwork Host And Port . parse ( value !! ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠNode Info Signer Ġ: ĠC ord aC li Wrapper (" node info - signer ", Ġ" Display Ġand Ġgenerate Ġnode infos ") Ġ{ ĊĊĠĠĠ Ġ@ Option ( names Ġ= Ġ[" -- display "], Ġparam Label Ġ= Ġ" node info - file ", Ġdescription Ġ= Ġ[" Path Ġto ĠNode Info "]) ĊĠĠĠ Ġprivate Ġvar Ġdisplay Path : ĠPath ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Option ( names Ġ= Ġ[" -- address "], Ġparam Label Ġ= Ġ" host : port ", Ġdescription Ġ= Ġ[" Public Ġaddress Ġof Ġnode "], Ġconverter Ġ= Ġ[ Network Host And Port Converter :: class ]) ĊĠĠĠ Ġprivate Ġvar Ġaddress List : ĠMutable List < Network Host And Port > Ġ= Ġmutable ListOf < Network Host And Port >() ĊĊĠĠĠ Ġ@ Option ( names Ġ= Ġ[" -- platform - version "], Ġparam Label Ġ= Ġ" int ", Ġdescription Ġ= Ġ[" Platform Ġversion Ġthat Ġthis Ġnode Ġsupports "]) ĊĠĠĠ Ġprivate Ġvar Ġplatform Version : ĠInt Ġ= Ġ 4 ĊĊĠĠĠ Ġ@ Option ( names Ġ= Ġ[" -- serial "], Ġparam Label Ġ= Ġ" long ", Ġdescription Ġ= Ġ[ "" ]) ĊĠĠĠ Ġprivate Ġvar Ġserial : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Option ( names Ġ= Ġ[" -- outdir "], Ġparam Label Ġ= Ġ" directory ", Ġdescription Ġ= Ġ[" Output Ġdirectory "]) ĊĠĠĠ Ġprivate Ġvar Ġoutput Directory : ĠPath ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Option ( names Ġ= Ġ[" -- keystore "], Ġ Ġdescription Ġ= Ġ[" Ke yst ore Ġcontaining Ġidentity Ġcertificate Ġfor Ġsigning "]) ĊĠĠĠ Ġprivate Ġvar Ġkey Store Path : ĠPath ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Option ( names Ġ= Ġ[" -- keystore - pass "], Ġdescription Ġ= Ġ[" Ke yst ore Ġpassword Ġ( will Ġprompt Ġif Ġnot Ġspecified )" ]) ĊĠĠĠ Ġprivate Ġvar Ġkey Store Pass : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Option ( names Ġ= Ġ[" -- key alias "], Ġ Ġdescription Ġ= Ġ[" Alias Ġof Ġsigning Ġkey Ġ- Ġdefault Ġis Ġidentity - private - key "]) ĊĠĠĠ Ġprivate Ġvar Ġkey Alias : ĠString ? Ġ= Ġ" identity - private - key " ĊĊĠĠĠ Ġ@ Option ( names Ġ= Ġ[" -- key pass "], Ġdescription Ġ= Ġ[" Password Ġof Ġsigning Ġkey Ġ( will Ġprompt Ġif Ġnot Ġspecified )" ]) ĊĠĠĠ Ġprivate Ġvar Ġkey Pass : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġget Input ( prompt : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ( prompt ) ĊĠĠĠĠĠĠĠ ĠSystem . out . flush () ĊĠĠĠĠĠĠĠ Ġval Ġconsole Ġ= ĠSystem . console () ĊĠĠĠĠĠĠĠ Ġif ( console Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconsole . read Password (). toString () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġread Line () !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠAMQP Inspector Serialization Scheme Ġ: ĠAbstract AM QP Serialization Scheme ( emptyList ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcan Deserialize Version ( magic : ĠC ord a Serialization Magic , Ġtarget : ĠSerialization Context . UseCase ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmagic Ġ== Ġam qp Magic ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrpc Client Serializer Factory ( context : ĠSerialization Context ) Ġ= Ġthrow ĠUnsupportedOperationException () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrpc Server Serializer Factory ( context : ĠSerialization Context ) Ġ= Ġthrow ĠUnsupportedOperationException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialise Serialization () Ġ{ ĊĠĠĠĠĠĠĠ Ġnode Serialization Env Ġ= ĠSerialization Environment . with ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSerialization Factory Impl (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Scheme ( AM QP Inspector Serialization Scheme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAMQP _ P 2 P _ CONTEXT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠNode Info And Signed NodeInfo ( val Ġnode Info Ġ: ĠNode Info , Ġ Ġval Ġsigned Info Node : ĠSigned NodeInfo ) ĊĊĠĠĠ Ġfun Ġgenerate NodeInfo () Ġ: ĠNode Info And Signed NodeInfo Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Store ĠĠ Ġ= ĠX 5 0 9 KeyStore . from File ( key Store Path !! , Ġkey Store Pass !! ) ĊĠĠĠĠĠĠĠ Ġval Ġsigning Key Ġ= Ġkey Store . get Certificate And KeyPair ( key Alias !! , Ġkey Pass !! ) ĊĠĠĠĠĠĠĠ Ġval Ġx 5 0 9 Chain Ġ Ġ= Ġkey Store . get Certificate Chain ( key Alias !! ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcf Ġ= ĠCertificate Factory . getInstance (" X . 5 0 9 ") ĊĠĠĠĠĠĠĠ Ġval Ġcert Path Ġ= Ġcf . generate Cert Path ( x 5 0 9 Chain ) ĊĠĠĠĠĠĠĠ Ġval Ġidentity List Ġ= ĠlistOf ( Party And Certificate ( cert Path )) ĊĊĠĠĠĠĠĠĠ Ġval Ġnode Info Ġ= ĠNode Info ( address List , Ġidentity List , Ġplatform Version , Ġserial ) ĊĠĠĠĠĠĠĠ Ġval Ġserialized NodeInfo Ġ= Ġnode Info . serialize () ĊĊĠĠĠĠĠĠĠ Ġval Ġsig Ġ= Ġsigning Key . key Pair . sign ( serialized NodeInfo . bytes ). without Key () Ġ Ġ// Ġpure ĠDigital Signature ĊĠĠĠĠĠĠĠ Ġval Ġs ni Ġ= ĠSigned NodeInfo ( serialized NodeInfo , ĠlistOf ( sig )) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠNode Info And Signed NodeInfo ( node Info , Ġs ni ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun Program (): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinitialise Serialization () ĊĊĠĠĠĠĠĠĠ Ġif ( display Path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Info Ġ= Ġnode Info FromFile ( display Path !!. to File ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ident ities : ĠĠĠĠĠ Ġ" Ġ+ Ġnode Info . legal Id entities [ 0 ]. name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" address : ĠĠĠĠĠĠĠĠ Ġ" Ġ+ Ġnode Info . addresses [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" platform Version : Ġ" Ġ+ Ġnode Info . platform Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" serial ĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ+ Ġnode Info . serial ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( address List . size Ġ> Ġ 0 ){ Ġ" At Ġleast Ġone Ġ-- address Ġmust Ġbe Ġspecified " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( output Directory Ġ!= Ġnull ) Ġ{ Ġ" The Ġ-- outdir Ġparameter Ġmust Ġbe Ġspecified " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( key Store Path Ġ!= Ġnull Ġ&& Ġkey Alias Ġ!= Ġnull ) Ġ{ Ġ" The Ġ-- keystore Ġand Ġ-- key alias Ġparameters Ġmust Ġbe Ġspecified " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( key Store Pass Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Store Pass Ġ= Ġget Input (" Store Ġpassword Ġ(${ key Store Path ?. fileName }): Ġ") ĊĊĠĠĠĠĠĠĠ Ġif ( key Pass Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Pass Ġ= Ġget Input (" Key Ġpassword Ġ(${ key Alias }): Ġ") ĊĊĊĠĠĠĠĠĠĠ Ġval Ġnode Info Signed Ġ= Ġgenerate NodeInfo () ĊĠĠĠĠĠĠĠ Ġval ĠfileName Hash Ġ= Ġnode Info Signed . node Info . legal Id entities [ 0 ]. name . serialize (). hash ĊĊĠĠĠĠĠĠĠ Ġval ĠoutputFile Ġ= Ġoutput Directory !!. toString () Ġ/ Ġ" node info -${ fileName Hash . toString () }" ĊĊĠĠĠĠĠĠĠ Ġprintln ( outputFile ) ĊĊĠĠĠĠĠĠĠ ĠoutputFile . to File (). write Bytes ( node Info Signed . signed Info Node . serialize (). bytes ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnode Info FromFile ( node Info Path : ĠFile ) Ġ: ĠNode Info Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġserialized NodeInfo Ġ= ĠSerialized Bytes < Signed NodeInfo >( node Info Path . to Path (). read All ()) ĊĠĠĠĠĠĠĠ Ġvar Ġsigned NodeInfo Ġ= Ġserialized NodeInfo . deserialize () ĊĠĠĠĠĠĠĠ Ġreturn Ġsigned NodeInfo . verified () ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ