package Ġnet . cord a . node . utilities Ċ Ċ import Ġnet . cord a . core . crypto . Composite Key Ċ import Ġnet . cord a . core . crypto . Party Ċ import Ġnet . cord a . core . crypto . composite Ċ import Ġnet . cord a . core . crypto . generate KeyPair Ċ import Ġnet . cord a . core . serialization . serialize Ċ import Ġnet . cord a . core . utilities . logger For Ċ import Ġnet . cord a . core . utilities . trace Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ Ċ object ĠService Identity Generator Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog Ġ= Ġlogger For < Service Identity Generator >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġsigning Ġkey Ġpairs Ġand Ġa Ġcommon Ġdistributed Ġservice Ġidentity Ġfor Ġa Ġset Ġof Ġnodes . ĊĠĠĠĠ Ġ* ĠThe Ġkey Ġpairs Ġand Ġthe Ġgroup Ġidentity Ġget Ġserialized Ġto Ġdisk Ġin Ġthe Ġcorresponding Ġnode Ġdirectories . ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġshould Ġbe Ġcalled Ġ* before * Ġany Ġof Ġthe Ġnodes Ġare Ġstarted . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdirs ĠList Ġof Ġnode Ġdirectories Ġto Ġplace Ġthe Ġgenerated Ġidentity Ġand Ġkey Ġpairs Ġin . ĊĠĠĠĠ Ġ* Ġ@ param Ġservice Id ĠThe Ġservice Ġid Ġof Ġthe Ġdistributed Ġservice . ĊĠĠĠĠ Ġ* Ġ@ param ĠserviceName ĠThe Ġlegal Ġname Ġof Ġthe Ġdistributed Ġservice . ĊĠĠĠĠ Ġ* Ġ@ param Ġthreshold ĠThe Ġthreshold Ġfor Ġthe Ġgenerated Ġgroup Ġ[ Composite Key . Node ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgenerate To Disk ( dirs : ĠList < Path >, Ġservice Id : ĠString , ĠserviceName : ĠString , Ġthreshold : ĠInt Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . trace Ġ{ Ġ" Generating Ġa Ġgroup Ġidentity Ġ\" serviceName \" Ġfor Ġnodes : Ġ${ dirs . join ToString () }" Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Pairs Ġ= Ġ( 1 .. dirs . size ). map Ġ{ Ġgenerate KeyPair () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnot ary Key Ġ= ĠComposite Key . Builder (). add Keys ( key Pairs . map Ġ{ Ġit . public . composite Ġ}). build ( threshold ) ĊĠĠĠĠĠĠĠ Ġval Ġnot ary Party Ġ= ĠParty ( serviceName , Ġnot ary Key ). serialize () ĊĊĠĠĠĠĠĠĠ Ġkey Pairs . zip ( dirs ) Ġ{ Ġkey Pair , Ġdir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Directories ( dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprivateKey File Ġ= Ġ"$ service Id - private - key " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey File Ġ= Ġ"$ service Id - public " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary Party . write ToFile ( dir . resolve ( publicKey File )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Pair . serialize (). write ToFile ( dir . resolve ( privateKey File )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġdirs Ġ= Ġargs [ 0 ]. split ("," ). map Ġ{ ĠPaths . get ( it ) Ġ} ĊĠĠĠ Ġval Ġservice Id Ġ= Ġargs [ 1 ] ĊĠĠĠ Ġval ĠserviceName Ġ= Ġargs [ 2 ] ĊĊĠĠĠ Ġprintln (" Generating Ġservice Ġidentity Ġfor Ġ\"$ serviceName \" ") ĊĠĠĠ ĠService Identity Generator . generate To Disk ( dirs , Ġservice Id , ĠserviceName ) Ċ }