/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġapp . cash . cert ifi kit . cli Ċ Ċ import Ġapp . cash . cert ifi kit . Certificate Ċ import Ġapp . cash . cert ifi kit . Object Identifiers Ċ import Ġapp . cash . cert ifi kit . decode Key Usage Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ import Ġjava . time . Instant . of Epoch Milli Ċ import Ġjavax . net . ssl . X 5 0 9 Trust Manager Ċ import Ġok io . ByteString Ċ import Ġok io . ByteString . Companion . to ByteString Ċ import Ġpic oc li . CommandLine . Help . Ansi Ċ Ċ fun ĠX 5 0 9 Certificate . publicKey Sha 2 5 6 (): ĠByte String Ġ= ĊĠ ĠpublicKey . encoded . to ByteString () ĊĠĠĠĠĠ Ġ. sha 2 5 6 () Ċ Ċ fun ĠCertificate . pretty Print Certificate ( ĊĠ Ġtrust Manager : ĠX 5 0 9 Trust Manager Ċ ): ĠString Ġ{ ĊĠ Ġval Ġsha 2 5 6 Ġ= Ġthis . publicKey Sha 2 5 6 () ĊĊĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠ Ġval Ġtrusted Root Ġ= Ġtrust Manager . accepted Iss u ers . find Ġ{ ĊĠĠĠĠĠ Ġit . publicKey Sha 2 5 6 () Ġ== Ġsha 2 5 6 ĊĠĠĠ Ġ} Ġ!= Ġnull ĊĠĠĠ Ġval Ġtrusted Ġ= Ġif Ġ( trusted Root ) Ġ{ ĊĠĠĠĠĠ ĠAn si . AUTO . string (" Ġ@ | green Ġ( signed Ġby Ġlocally - trusted Ġroot )| @ ") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġappend (" CN : Ġ\ t $ common Name $ trusted \ n ") ĊĠĠĠ Ġappend (" Pin :\ t sha 2 5 6 /${ sha 2 5 6 . hex () }\ n ") ĊĠĠĠ Ġappend (" SAN : Ġ\ t ${ subject Alternative Name Value ()?. join ToString (", Ġ") Ġ?: Ġ"< N / A > "}\ n ") ĊĠĠĠ Ġif Ġ( organization al Unit Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġappend (" OU : Ġ\ t $ organization al Unit Name \ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġkey Usage ?. let Ġ{ ĊĠĠĠĠĠ Ġappend (" Key ĠUsage : Ġ${ it . decode Key Usage (). join ToString (", Ġ") }\ n ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġext Key Usage ?. let Ġ{ ĊĠĠĠĠĠ Ġappend (" Ext ĠKey ĠUsage : Ġ${ it . join ToString (", Ġ") }\ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġauthority Info Access ?. let Ġ{ ĊĠĠĠĠĠ Ġappend (" Authority ĠInfo ĠAccess :\ n ") ĊĠĠĠĠĠ Ġit . forEach Ġ{ Ġaccess Description Ġ-> ĊĠĠĠĠĠĠĠ Ġappend ("\ t ${ access Description . name }: Ġ${ access Description . access Location . second }\ n ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġperiod Left Ġ= Ġt bs Certificate . validity . period Left ĊĠĠĠ Ġval Ġperiod Left String Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠ Ġperiod Left Ġ== Ġnull Ġ-> ĠAn si . AUTO . string (" Ġ(@ | red ĠNot Ġvalid |@ )") ĊĠĠĠĠĠ Ġperiod Left . years Ġ>= Ġ 1 Ġ-> Ġ" Ġ(${ period Left . years } Ġyears )" ĊĠĠĠĠĠ Ġperiod Left . months Ġ>= Ġ 1 Ġ-> Ġ" Ġ(${ period Left . months } Ġmonths )" ĊĠĠĠĠĠ Ġperiod Left . days Ġ< Ġ 2 0 Ġ-> ĠAn si . AUTO . string (" Ġ(@ | yellow Ġ$ period Left Ġdays |@ )") ĊĠĠĠĠĠ Ġelse Ġ-> Ġ" Ġ(${ period Left . days })" ĊĠĠĠ Ġ} ĊĠĠĠ Ġappend ( ĊĠĠĠĠĠĠĠ Ġ" Valid : Ġ\ t ${ ĊĠĠĠĠĠĠĠĠĠ Ġof Epoch Milli ( t bs Certificate . validity . not Before ) ĊĠĠĠĠĠĠĠ Ġ} .. ${ ĊĠĠĠĠĠĠĠĠĠ Ġof Epoch Milli ( t bs Certificate . validity . not After ) ĊĠĠĠĠĠĠĠ Ġ} $ period Left String " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġbasic Constraints ?. apply Ġ{ ĊĠĠĠĠĠ Ġappend ("\ n CA : Ġ$ ca ") ĊĠĠĠĠĠ Ġif Ġ( max Intermediate Cas Ġ!= Ġnull ) Ġappend (" ĠMax ĠInter mediate : Ġ$ max Intermediate Cas ") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠCertificate . subject Alternative Name Value (): ĠList < String >? Ġ{ ĊĠ Ġreturn Ġt bs Certificate . extensions . first OrNull Ġ{ ĊĠĠĠ Ġit . id Ġ== ĠObject Identifiers . subject Alternative Name ĊĠ Ġ} ĊĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġit . value Ġas ĠList < Pair < Any , ĠAny >> ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ? . map Ġ{ ĊĠĠĠĠĠĠĠ Ġit . second . toString () ĊĠĠĠĠĠ Ġ} Ċ } Ċ