package Ġnet . cord a . node api . internal . pro ton wrapper . netty Ċ Ċ import Ġjava . security . KeyStore Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ import Ġjavax . net . ssl . Key Manager Ċ import Ġjavax . net . ssl . Key ManagerFactory Ċ import Ġjavax . net . ssl . Key ManagerFactory Spi Ċ import Ġjavax . net . ssl . ManagerFactory Parameters Ċ import Ġjavax . net . ssl . X 5 0 9 Extended Key Manager Ċ import Ġjavax . net . ssl . X 5 0 9 Key Manager Ċ Ċ class ĠCert Hold ing Key ManagerFactory Spi Wrapper ( private Ġval Ġfactory Spi : ĠKey ManagerFactory Spi , Ġprivate Ġval Ġam qp Config : ĠAMQP Configuration ) Ġ: ĠKey ManagerFactory Spi () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġengine Init ( key Store : ĠKey Store ?, Ġpassword : ĠChar Array ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġengine Init Method Ġ= ĠKey ManagerFactory Spi :: class . java . getDeclared Method (" engine Init ", ĠKey Store :: class . java , ĠChar Array :: class . java ) ĊĠĠĠĠĠĠĠ Ġengine Init Method . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġengine Init Method . invoke ( factory Spi , Ġkey Store , Ġpassword ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġengine Init ( spec : ĠManager Factory Parameters ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġengine Init Method Ġ= ĠKey ManagerFactory Spi :: class . java . getDeclared Method (" engine Init ", ĠManager Factory Parameters :: class . java ) ĊĠĠĠĠĠĠĠ Ġengine Init Method . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġengine Init Method . invoke ( factory Spi , Ġspec ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetKey Managers Impl (): ĠArray < Key Manager > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġengine GetKey Managers Method Ġ= ĠKey ManagerFactory Spi :: class . java . getDeclared Method (" engine GetKey Managers ") ĊĠĠĠĠĠĠĠ Ġengine GetKey Managers Method . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġval Ġkey Managers Ġ= Ġengine GetKey Managers Method . invoke ( factory Spi ) Ġas ĠArray < Key Manager > ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( factory Spi Ġis ĠCert Hold ing Key ManagerFactory Spi Wrapper ) Ġkey Managers Ġelse Ġkey Managers . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalias Pro viding Key Manager Ġ= ĠgetDefault Key Manager ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġthe ĠS NI Key Manager Ġif Ġkeystore Ġhas Ġseveral Ġentries Ġand Ġonly Ġfor Ġclients Ġand Ġnon - open SSL Ġservers . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCondition Ġof Ġusing ĠS NI Key Manager : Ġif Ġits Ġclient , Ġor ĠJDK Ssl Ġserver . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Client Ġ= Ġam qp Config . source X 5 0 0 Name Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenable S NI Ġ= Ġam qp Config . enable S NI Ġ&& Ġam qp Config . key Store . aliases (). size Ġ> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enable S NI Ġ&& Ġ( is Client Ġ|| Ġ! amqp Config . use Open Ssl )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS NI Key Manager ( alias Pro viding Key Manager Ġas ĠX 5 0 9 Extended Key Manager , Ġam qp Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalias Pro viding Key Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetDefault Key Manager ( key Manager : ĠKey Manager ): ĠKey Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( key Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠX 5 0 9 Extended Key Manager Ġ-> ĠAlias Pro viding Extended Key M anger Wrapper ( key Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠX 5 0 9 Key Manager Ġ-> ĠAlias Pro viding Key M anger Wrapper Impl ( key Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException (" Supported Ġkey Ġmanager Ġtypes Ġare : ĠX 5 0 9 Extended Key Manager , ĠX 5 0 9 Key Manager . ĠProvide d Ġ${ key Manager :: class . java . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġkey Managers Ġ= Ġlazy Ġ{ ĠgetKey Managers Impl () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġengine GetKey Managers (): ĠArray < Key Manager > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkey Managers . value ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠYou Ġcan Ġwrap Ġa Ġkey Ġmanager Ġfactory Ġin Ġthis Ġclass Ġif Ġyou Ġneed Ġto Ġget Ġthe Ġcert Ġchain Ġcurrently Ġused Ġto Ġidentify Ġor Ċ Ġ* Ġverify . ĠWhen Ġusing Ġfor ĠTLS Ġchannels , Ġmake Ġsure Ġto Ġwrap Ġthe Ġ( singleton ) Ġfactory Ġseparately Ġon Ġeach Ġchannel , Ġas Ċ Ġ* Ġthe Ġwrapper Ġis Ġnot Ġthread Ġsafe Ġas Ġin Ġit Ġwill Ġreturn Ġthe Ġlast Ġused Ġalias / cert Ġchain Ġand Ġhas Ġitself Ġno Ġnot ion Ċ Ġ* Ġof Ġbelong ing Ġto Ġa Ġcertain Ġchannel . Ċ Ġ*/ Ċ class ĠCert Hold ing Key ManagerFactory Wrapper ( factory : ĠKey ManagerFactory , Ġam qp Config : ĠAMQP Configuration ) Ġ: ĠKey ManagerFactory ( get Factory Spi ( factory , Ġam qp Config ), Ġfactory . provider , Ġfactory . algorithm ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Factory Spi ( factory : ĠKey ManagerFactory , Ġam qp Config : ĠAMQP Configuration ): ĠKey ManagerFactory Spi Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspi Field Ġ= ĠKey ManagerFactory :: class . java . getDeclared Field (" factory Spi ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspi Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCert Hold ing Key ManagerFactory Spi Wrapper ( spi Field . get ( factory ) Ġas ĠKey ManagerFactory Spi , Ġam qp Config ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetCurrent Cert Chain (): ĠArray < out ĠX 5 0 9 Certificate >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Manager Ġ= Ġkey Managers . first OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġalias Ġ= Ġif Ġ( key Manager Ġis ĠAlias Pro viding Key M anger Wrapper ) Ġkey Manager . last Alias Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( alias Ġ!= Ġnull Ġ&& Ġkey Manager Ġis ĠX 5 0 9 Key Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Manager . get Certificate Chain ( alias ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġ} Ċ }