/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠApp mat t us ĠLimited Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠB ab ylon ĠPart ners ĠLimited Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ* Ċ Ġ* ĠFile Ġmodified Ġby ĠApp mat t us ĠLimited Ċ Ġ* ĠSee : Ġhttps :// github . com / app mat t us / certificate tr ansparency / compare / e 3 d 4 6 9 df 9 be 3 5 bcb f 0 f 5 6 4 d 3 2 ca 7 4 af 4 e 5 ca 4 ae 5 ... main Ċ Ġ*/ Ċ Ċ package Ġcom . app mat t us . certificate tr ansparency Ċ Ċ import Ġcom . app mat t us . certificate tr ansparency . cache . Disk Cache Ċ import Ġcom . app mat t us . certificate tr ansparency . chain clean er . Certificate Chain Clean er Factory Ċ import Ġcom . app mat t us . certificate tr ansparency . datasource . DataSource Ċ import Ġcom . app mat t us . certificate tr ansparency . internal . verifier . Certificate Transparency Hostname Verifier Ċ import Ġcom . app mat t us . certificate tr ansparency . internal . verifier . model . Host Ċ import Ġcom . app mat t us . certificate tr ansparency . log list . Log ListResult Ċ import Ġcom . app mat t us . certificate tr ansparency . log list . Log List Service Ċ import Ġcom . app mat t us . certificate tr ansparency . log list . Log Server Ċ import Ġjavax . net . ssl . Hostname Verifier Ċ import Ġjavax . net . ssl . Trust ManagerFactory Ċ import Ġjavax . net . ssl . X 5 0 9 Trust Manager Ċ Ċ /** Ċ Ġ* ĠBuilder Ġto Ġcreate Ġa Ġ[ Hostname Verifier ] Ġthat Ġwill Ġverify Ġa Ġhost Ġis Ġtrusted Ġusing Ġcertificate Ċ Ġ* Ġtransparency Ċ Ġ* Ġ@ property Ġdelegate Ġ[ Hostname Verifier ] Ġto Ġdelegate Ġto Ġbefore Ġperforming Ġcertificate Ġtransparency Ġchecks Ċ Ġ*/ Ċ @ Suppress (" Too Many Functions ") Ċ public Ġclass ĠC TH ost name Verifier Builder ( ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") Ġpublic Ġval Ġdelegate : ĠHost name Verifier Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcertificate Chain Clean er Factory : ĠCertificate Chain Clean er Factory ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtrust Manager : ĠX 5 0 9 Trust Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlog List Service : ĠLog List Service ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlog List DataSource : ĠDataSource < Log ListResult >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġinclude Hosts Ġ= Ġmutable Set Of < Host >() ĊĠĠĠ Ġprivate Ġval Ġexclude Hosts Ġ= Ġmutable Set Of < Host >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermine Ġif Ġa Ġfailure Ġto Ġpass Ġcertificate Ġtransparency Ġresults Ġin Ġthe Ġconnection Ġbeing Ġclosed . ĠA Ġvalue Ġof Ġtrue Ġensures Ġthe Ġconnection Ġis ĊĠĠĠĠ Ġ* Ġclosed Ġon Ġerrors ĊĠĠĠĠ Ġ* ĠDefault : Ġtrue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġfail OnError : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic Ġget ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ CT Logger ] Ġwhich Ġwill Ġbe Ġcalled Ġwith Ġall Ġresults ĊĠĠĠĠ Ġ* ĠDefault : Ġnone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġlogger : ĠCT Logger ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic Ġget ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ CT Policy ] Ġwhich Ġwill Ġverify Ġcorrect Ġnumber Ġof ĠS CT s Ġare Ġpresent ĊĠĠĠĠ Ġ* ĠDefault : Ġ[ CT Policy ] Ġwhich Ġfollows Ġrules Ġof Ġhttps :// github . com / chromium / ct - policy / blob / master / ct _ policy . md ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġpolicy : ĠC TP olicy ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic Ġget ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Disk Cache ] Ġwhich Ġwill Ġcache Ġthe Ġlog Ġlist ĊĠĠĠĠ Ġ* ĠDefault : Ġnone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġdisk Cache : ĠDisk Cache ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic Ġget ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Certificate Chain Clean er Factory ] Ġused Ġto Ġprovide Ġthe Ġcleaner Ġof Ġthe Ġcertificate Ġchain ĊĠĠĠĠ Ġ* ĠDefault : Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġpublic Ġfun Ġset Certificate Chain Clean er Factory ( certificate Chain Clean er Factory : ĠCertificate Chain Clean er Factory ): ĠC TH ost name Verifier Builder Ġ= ĊĠĠĠĠĠĠĠ Ġapply Ġ{ Ġthis . certificate Chain Clean er Factory Ġ= Ġcertificate Chain Clean er Factory Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Certificate Chain Clean er Factory ] Ġused Ġto Ġprovide Ġthe Ġcleaner Ġof Ġthe Ġcertificate Ġchain ĊĠĠĠĠ Ġ* ĠDefault : Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġpublic Ġfun Ġcertificate Chain Clean er Factory ( init : Ġ() Ġ-> ĠCertificate Chain Clean er Factory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Certificate Chain Clean er Factory ( init ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ X 5 0 9 Trust Manager ] Ġused Ġto Ġclean Ġthe Ġcertificate Ġchain ĊĠĠĠĠ Ġ* ĠDefault : ĠPlatform Ġdefault Ġ[ X 5 0 9 Trust Manager ] Ġcreated Ġthrough Ġ[ Trust ManagerFactory ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġpublic Ġfun Ġset Trust Manager ( trust Manager : ĠX 5 0 9 Trust Manager ): ĠC TH ost name Verifier Builder Ġ= ĊĠĠĠĠĠĠĠ Ġapply Ġ{ Ġthis . trust Manager Ġ= Ġtrust Manager Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ X 5 0 9 Trust Manager ] Ġused Ġto Ġclean Ġthe Ġcertificate Ġchain ĊĠĠĠĠ Ġ* ĠDefault : ĠPlatform Ġdefault Ġ[ X 5 0 9 Trust Manager ] Ġcreated Ġthrough Ġ[ Trust ManagerFactory ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġpublic Ġfun Ġtrust Manager ( init : Ġ() Ġ-> ĠX 5 0 9 Trust Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Trust Manager ( init ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Log List Service ] Ġproviding Ġlog Ġlist Ġdata Ġfrom Ġnetwork ĊĠĠĠĠ Ġ* ĠDefault : ĠLog Ġlist Ġloaded Ġfrom Ġhttps :// www . gstatic . com / ct / log _ list / v 2 / log _ list . json ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġpublic Ġfun Ġset Log List Service ( log List Service : ĠLog List Service ): ĠC TH ost name Verifier Builder Ġ= ĊĠĠĠĠĠĠĠ Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . log List Service Ġ= Ġlog List Service ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Log List Service ] Ġproviding Ġlog Ġlist Ġdata Ġfrom Ġnetwork ĊĠĠĠĠ Ġ* ĠDefault : ĠLog Ġlist Ġloaded Ġfrom Ġhttps :// www . gstatic . com / ct / log _ list / v 2 / log _ list . json ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġpublic Ġfun Ġlog List Service ( init : Ġ() Ġ-> ĠLog List Service ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Log List Service ( init ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ DataSource ] Ġproviding Ġa Ġlist Ġof Ġ[ Log Server ] ĊĠĠĠĠ Ġ* ĠDefault : ĠIn Ġmemory Ġcached Ġlog Ġlist Ġloaded Ġfrom Ġhttps :// www . gstatic . com / ct / log _ list / v 2 / log _ list . json ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġpublic Ġfun Ġset Log List DataSource ( log List DataSource : ĠDataSource < Log ListResult >): ĠC TH ost name Verifier Builder Ġ= ĊĠĠĠĠĠĠĠ Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . log List DataSource Ġ= Ġlog List DataSource ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ DataSource ] Ġproviding Ġa Ġlist Ġof Ġ[ Log Server ] ĊĠĠĠĠ Ġ* ĠDefault : ĠIn Ġmemory Ġcached Ġlog Ġlist Ġloaded Ġfrom Ġhttps :// www . gstatic . com / ct / log _ list / v 2 / log _ list . json ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġpublic Ġfun Ġlog List DataSource ( init : Ġ() Ġ-> ĠDataSource < Log ListResult >) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Log List DataSource ( init ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermine Ġif Ġa Ġfailure Ġto Ġpass Ġcertificate Ġtransparency Ġresults Ġin Ġthe Ġconnection Ġbeing Ġclosed . Ġ[ fail OnError ] Ġset Ġto Ġtrue Ġcloses Ġthe ĊĠĠĠĠ Ġ* Ġconnection Ġon Ġerrors ĊĠĠĠĠ Ġ* ĠDefault : Ġtrue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġpublic Ġfun Ġset Fail OnError ( fail OnError : ĠBoolean ): ĠC TH ost name Verifier Builder Ġ= Ġapply Ġ{ Ġthis . fail OnError Ġ= Ġfail OnError Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ CT Logger ] Ġwhich Ġwill Ġbe Ġcalled Ġwith Ġall Ġresults ĊĠĠĠĠ Ġ* ĠDefault : Ġnone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġpublic Ġfun Ġset Logger ( logger : ĠCT Logger ): ĠC TH ost name Verifier Builder Ġ= Ġapply Ġ{ Ġthis . logger Ġ= Ġlogger Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ CT Policy ] Ġwhich Ġwill Ġverify Ġcorrect Ġnumber Ġof ĠS CT s Ġare Ġpresent ĊĠĠĠĠ Ġ* ĠDefault : Ġ[ CT Policy ] Ġwhich Ġfollows Ġrules Ġof Ġhttps :// github . com / chromium / ct - policy / blob / master / ct _ policy . md ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġpublic Ġfun Ġset Policy ( policy : ĠC TP olicy ): ĠC TH ost name Verifier Builder Ġ= Ġapply Ġ{ Ġthis . policy Ġ= Ġpolicy Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Disk Cache ] Ġwhich Ġwill Ġcache Ġthe Ġlog Ġlist ĊĠĠĠĠ Ġ* ĠDefault : Ġnone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġpublic Ġfun Ġset Disk Cache ( disk Cache : ĠDisk Cache ): ĠC TH ost name Verifier Builder Ġ= Ġapply Ġ{ Ġthis . disk Cache Ġ= Ġdisk Cache Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVerify Ġcertificate Ġtransparency Ġfor Ġhosts Ġthat Ġmatch Ġ[ pattern ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġpattern Ġlower - case Ġhost Ġname Ġor Ġwildcard Ġpattern Ġsuch Ġas Ġ` *. example . com `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġpublic Ġfun Ġinclude Host ( var arg Ġpattern : ĠString ): ĠC TH ost name Verifier Builder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġpattern . forEach Ġ{ Ġinclude Hosts . add ( Host ( it )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVerify Ġcertificate Ġtransparency Ġfor Ġhosts Ġthat Ġmatch Ġ[ this ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ receiver Ġlower - case Ġhost Ġname Ġor Ġwildcard Ġpattern Ġsuch Ġas Ġ` *. example . com `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġpublic Ġoperator Ġfun ĠString . unary Plus () Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude Host ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVerify Ġcertificate Ġtransparency Ġfor Ġhosts Ġthat Ġmatch Ġone Ġof Ġ[ this ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ receiver Ġ[ List ] Ġof Ġlower - case Ġhost Ġname Ġor Ġwildcard Ġpattern Ġsuch Ġas Ġ` *. example . com `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġpublic Ġoperator Ġfun ĠList < String >. unary Plus () Ġ{ ĊĠĠĠĠĠĠĠ ĠforEach Ġ{ Ġinclude Host ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIgnore Ġcertificate Ġtransparency Ġfor Ġhosts Ġthat Ġmatch Ġ[ pattern ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġpattern Ġlower - case Ġhost Ġname Ġor Ġwildcard Ġpattern Ġsuch Ġas Ġ` *. example . com `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġpublic Ġfun Ġexclude Host ( var arg Ġpattern : ĠString ): ĠC TH ost name Verifier Builder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġpattern . forEach Ġ{ Ġexclude Hosts . add ( Host ( it )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIgnore Ġcertificate Ġtransparency Ġfor Ġhosts Ġthat Ġmatch Ġ[ this ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ receiver Ġlower - case Ġhost Ġname Ġor Ġwildcard Ġpattern Ġsuch Ġas Ġ` *. example . com `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġpublic Ġoperator Ġfun ĠString . unary Minus () Ġ{ ĊĠĠĠĠĠĠĠ Ġexclude Host ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIgnore Ġcertificate Ġtransparency Ġfor Ġhosts Ġthat Ġmatch Ġone Ġof Ġ[ this ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ receiver Ġ[ List ] Ġof Ġlower - case Ġhost Ġname Ġor Ġwildcard Ġpattern Ġsuch Ġas Ġ` *. example . com `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġpublic Ġoperator Ġfun ĠList < String >. unary Minus () Ġ{ ĊĠĠĠĠĠĠĠ ĠforEach Ġ{ Ġexclude Host ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuild Ġthe Ġ[ Hostname Verifier ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġbuild (): ĠHost name Verifier Ġ= ĠCertificate Transparency Hostname Verifier ( ĊĠĠĠĠĠĠĠ Ġdelegate , ĊĠĠĠĠĠĠĠ Ġinclude Hosts . toSet (), ĊĠĠĠĠĠĠĠ Ġexclude Hosts . toSet (), ĊĠĠĠĠĠĠĠ Ġcertificate Chain Clean er Factory , ĊĠĠĠĠĠĠĠ Ġtrust Manager , ĊĠĠĠĠĠĠĠ Ġlog List Service , ĊĠĠĠĠĠĠĠ Ġlog List DataSource , ĊĠĠĠĠĠĠĠ Ġpolicy , ĊĠĠĠĠĠĠĠ Ġdisk Cache , ĊĠĠĠĠĠĠĠ Ġfail OnError , ĊĠĠĠĠĠĠĠ Ġlogger ĊĠĠĠ Ġ) Ċ } Ċ