/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 Ġ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 Ġokhttp 3 . internal . platform Ċ Ċ import Ġokhttp 3 . Protocol Ċ import Ġjava . security . KeyStore Ċ import Ġjava . security . Provider Ċ import Ġjavax . net . ssl . SSL Context Ċ import Ġjavax . net . ssl . SS LS ocket Ċ import Ġjavax . net . ssl . SS LS ocket Factory Ċ import Ġjavax . net . ssl . Trust ManagerFactory Ċ import Ġjavax . net . ssl . X 5 0 9 Trust Manager Ċ Ċ /** Ċ Ġ* ĠPlatform Ġusing ĠOpen JS SE Ġ( https :// github . com / open js se / open js se ) Ġif Ġinstalled Ġas Ġthe Ġfirst Ċ Ġ* ĠSecurity ĠProvider . Ċ Ġ* Ċ Ġ* ĠRequires Ġorg . open js se : open js se Ġ>= Ġ 1 . 1 . 0 Ġon Ġthe Ġclasspath . Ċ Ġ*/ Ċ class ĠOpen JS SE Platform Ġprivate Ġconstructor () Ġ: ĠPlatform () Ġ{ ĊĠ Ġprivate Ġval Ġprovider : ĠProvider Ġ= Ġorg . open js se . net . ssl . Open JS SE () ĊĊĠ Ġ// ĠSelect s ĠTLS v 1 . 3 Ġso Ġwe Ġare Ġspecific Ġabout Ġour Ġintended Ġversion Ġranges Ġ( not Ġjust Ġ 1 . 3 ) ĊĠ Ġ// Ġand Ġbecause Ġit 's Ġa Ġcommon Ġpattern Ġfor ĠVMs Ġto Ġhave Ġdifferences Ġbetween Ġsupported Ġand ĊĠ Ġ// Ġdefault ed Ġversions Ġfor ĠTLS Ġbased Ġon Ġwhat Ġis Ġrequested . ĊĠ Ġoverride Ġfun Ġnew SSL Context (): ĠSSL Context Ġ= ĊĠĠĠĠĠ ĠSSL Context . getInstance (" TLS v 1 . 3 ", Ġprovider ) ĊĊĠ Ġoverride Ġfun Ġplatform Trust Manager (): ĠX 5 0 9 Trust Manager Ġ{ ĊĠĠĠ Ġval Ġfactory Ġ= ĠTrust ManagerFactory . getInstance ( ĊĠĠĠĠĠĠĠ ĠTrust ManagerFactory . getDefault Algorithm (), Ġprovider ) ĊĠĠĠ Ġfactory . init ( null Ġas ĠKey Store ?) ĊĠĠĠ Ġval Ġtrust Managers Ġ= Ġfactory . trust Managers !! ĊĠĠĠ Ġcheck ( trust Managers . size Ġ== Ġ 1 Ġ&& Ġtrust Managers [ 0 ] Ġis ĠX 5 0 9 Trust Manager ) Ġ{ ĊĠĠĠĠĠ Ġ" Unexpected Ġdefault Ġtrust Ġmanagers : Ġ${ trust Managers . content ToString () }" ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrust Managers [ 0 ] Ġas ĠX 5 0 9 Trust Manager ĊĠ Ġ} ĊĊĠ Ġpublic Ġoverride Ġfun Ġtrust Manager ( ssl Socket Factory : ĠSSL Socket Factory ): ĠX 5 0 9 Trust Manager ? Ġ= ĊĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException ( ĊĠĠĠĠĠĠĠĠĠ Ġ" client Builder . ssl Socket Factory ( SS LS ocket Factory ) Ġnot Ġsupported Ġwith ĠOpen JS SE ") ĊĊĠ Ġoverride Ġfun Ġconfigure Tls Extensions ( ĊĠĠĠ Ġssl Socket : ĠSSL Socket , ĊĠĠĠ Ġhostname : ĠString ?, ĊĠĠĠ Ġprotocols : ĠList < @ Jvm Suppress W ild cards ĠProtocol > ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ( ssl Socket Ġis Ġorg . open js se . javax . net . ssl . SS LS ocket ) Ġ{ ĊĠĠĠĠĠ Ġval Ġssl Parameters Ġ= Ġssl Socket . ssl Parameters ĊĊĠĠĠĠĠ Ġif Ġ( ssl Parameters Ġis Ġorg . open js se . javax . net . ssl . SSL Parameters ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠEnable ĠAL PN . ĊĠĠĠĠĠĠĠ Ġval Ġnames Ġ= Ġal pn Protocol Names ( protocols ) ĊĠĠĠĠĠĠĠ Ġssl Parameters . application Protocols Ġ= Ġnames . to Typed Array () ĊĊĠĠĠĠĠĠĠ Ġssl Socket . ssl Parameters Ġ= Ġssl Parameters ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġsuper . configure Tls Extensions ( ssl Socket , Ġhostname , Ġprotocols ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Selected Protocol ( ssl Socket : ĠSSL Socket ): ĠString ? Ġ= ĊĠĠĠĠĠ Ġif Ġ( ssl Socket Ġis Ġorg . open js se . javax . net . ssl . SS LS ocket ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġprotocol Ġ= Ġssl Socket . application Protocol ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠHandles Ġboth Ġun - configured Ġand Ġnone Ġselected . ĊĠĠĠĠĠĠĠĠĠ Ġnull , Ġ"" Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġprotocol ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . getSelected Protocol ( ssl Socket ) ĊĠĠĠĠĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval Ġis Supported : ĠBoolean Ġ= Ġtry Ġ{ ĊĠĠĠĠĠ Ġ// ĠTrigger Ġan Ġearly Ġexception Ġover Ġa Ġfatal Ġerror , Ġprefer Ġa ĠRuntimeException Ġover ĠError . ĊĠĠĠĠĠ ĠClass . forName (" org . open js se . net . ssl . Open JS SE ") ĊĊĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} Ġcatch Ġ(_ : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild If Supported (): ĠOpen JS SE Platform ? Ġ= Ġif Ġ( is Supported ) ĠOpen JS SE Platform () Ġelse Ġnull ĊĠ Ġ} Ċ } Ċ