// Ċ // Ġ ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠCouch base , ĠInc . ĠAll Ġrights Ġreserved . Ċ // Ċ // Ġ ĠLicensed Ġunder Ġthe ĠCouch base ĠLicense ĠAgreement Ġ( the Ġ" License "); Ċ // Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ // Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ // Ġ Ġhttps :// info . couch base . com / rs / 3 0 2 - GJ Y - 0 3 4 / images / 2 0 1 7 - 1 0 - 3 0 _ License _ Agreement . pdf Ċ // Ċ // Ġ Ġ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 Ġcom . couch base . lite . internal Ċ Ċ import Ġcom . couch base . lite . C ouch base Lite Exception Ċ import Ġcom . couch base . lite . Platform Security Test Ċ import Ġcom . couch base . lite . TLS Identity Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertNotNull Ċ import Ġorg . junit . Test Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . G regorian Calendar Ċ import Ġkotlin . math . abs ĊĊ Ċ class ĠTLS Identity Test Ġ: ĠPlatform Security Test () Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Identity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalias Ġ= Ġnew Key Alias () ĊĠĠĠĠĠĠĠ Ġload Test Key ( alias ) ĊĊĠĠĠĠĠĠĠ Ġval Ġidentity Ġ= Ġget Identity ( alias ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( identity ) ĊĠĠĠĠĠĠĠ Ġvalidate Certificate ( identity !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create Client Identity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalias Ġ= Ġnew Key Alias () ĊĊĠĠĠĠĠĠĠ Ġval Ġidentity Ġ= Ġcreate Identity ( false , ĠX 5 0 9 _ ATTRIBUTES , Ġnull , Ġalias ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( identity ) ĊĠĠĠĠĠĠĠ Ġvalidate Certificate ( identity ) ĊĊĠĠĠĠĠĠĠ Ġval Ġabstract Id Ġ= Ġidentity Ġas ĠAbstract TLS Identity ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( abstract Id . alias , Ġabstract Id . alias ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create Server Identity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalias Ġ= Ġnew Key Alias () ĊĊĠĠĠĠĠĠĠ Ġval Ġidentity Ġ= Ġcreate Identity ( true , ĠX 5 0 9 _ ATTRIBUTES , Ġnull , Ġalias ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( identity ) ĊĠĠĠĠĠĠĠ Ġvalidate Certificate ( identity ) ĊĊĠĠĠĠĠĠĠ Ġval Ġabstract Id Ġ= Ġidentity Ġas ĠAbstract TLS Identity ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( abstract Id . alias , Ġabstract Id . alias ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġtest Create Identity With No Attributes () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Identity ( true , Ġempty Map (), Ġnull , Ġnew Key Alias ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create Identity With Minimal Attributes () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalias Ġ= Ġnew Key Alias () ĊĊĠĠĠĠĠĠĠ Ġval Ġattrs Ġ= Ġmap Of ( TLS Identity . CERT _ ATTRIBUTE _ COMMON _ NAME Ġto Ġ" C BL ĠTest ") ĊĊĠĠĠĠĠĠĠ Ġval Ġidentity Ġ= Ġcreate Identity ( true , Ġattrs , Ġnull , Ġalias ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( identity ) ĊĠĠĠĠĠĠĠ Ġvalidate Certificate ( identity ) ĊĊĠĠĠĠĠĠĠ Ġval Ġabstract Id Ġ= Ġidentity Ġas ĠAbstract TLS Identity ĊĠĠĠĠĠĠĠ ĠassertEquals ( abstract Id . alias , Ġabstract Id . alias ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcert Ġ= Ġabstract Id . cert Ġas ĠX 5 0 9 Certificate ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ TLS Identity . CERT _ ATTRIBUTE _ COMMON _ NAME } =${ attrs [ TLS Identity . CERT _ ATTRIBUTE _ COMMON _ NAME ] }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcert . issuer DN . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create Identity With Reason able Expiration () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpiration Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġexpiration . add ( Calendar . YEAR , Ġ 3 ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( create Identity ( true , ĠX 5 0 9 _ ATTRIBUTES , Ġexpiration . time , Ġnew Key Alias ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġtest Create Identity With Old Expiration () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Identity ( true , ĠX 5 0 9 _ ATTRIBUTES , ĠG regorian Calendar ( 1 9 0 0 , Ġ 1 , Ġ 1 ). time , Ġnew Key Alias ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠCouch base Lite Exception :: class ) ĊĠĠĠ Ġfun Ġtest Create Duplicate Client Identity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalias Ġ= Ġnew Key Alias () ĊĊĠĠĠĠĠĠĠ Ġval Ġidentity : ĠTLS Identity ? Ġ= Ġcreate Identity ( false , ĠX 5 0 9 _ ATTRIBUTES , Ġnull , Ġalias ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( identity ) ĊĠĠĠĠĠĠĠ Ġvalidate Certificate ( identity !! ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġagain Ġwith Ġthe Ġsame Ġalias : Ġshould Ġfail ĊĠĠĠĠĠĠĠ Ġcreate Identity ( true , ĠX 5 0 9 _ ATTRIBUTES , Ġnull , Ġalias ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠCouch base Lite Exception :: class ) ĊĠĠĠ Ġfun Ġtest Create Duplicate Server Identity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalias Ġ= Ġnew Key Alias () ĊĊĠĠĠĠĠĠĠ Ġval Ġidentity : ĠTLS Identity ? Ġ= Ġcreate Identity ( true , ĠX 5 0 9 _ ATTRIBUTES , Ġnull , Ġalias ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( identity ) ĊĠĠĠĠĠĠĠ Ġvalidate Certificate ( identity !! ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġagain Ġwith Ġthe Ġsame Ġalias : Ġshould Ġfail ĊĠĠĠĠĠĠĠ Ġcreate Identity ( true , ĠX 5 0 9 _ ATTRIBUTES , Ġnull , Ġalias ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Certificate Expiration () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . YEAR , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpiration Ġ= Ġcalendar . time ĊĊĠĠĠĠĠĠĠ Ġval Ġidentity Ġ= Ġcreate Identity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠX 5 0 9 _ ATTRIBUTES , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpiration , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Key Alias () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( identity ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġidentity . certs . count ()) ĊĠĠĠĠĠĠĠ Ġvalidate Certificate ( identity ) ĊĊĠĠĠĠĠĠĠ Ġprintln ("$ expiration Ġ== Ġ${ identity . expiration }") ĊĊĠĠĠĠĠĠĠ Ġassert ( abs ( expiration . time Ġ- Ġidentity . expiration . time ) Ġ< Ġ( 2 Ġ* ĠKey Store Manager . CLOCK _ DR IFT _ MS )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Certificate ( identity : ĠTLS Identity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( identity . certs . size Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcert Ġ= Ġidentity . certs [ 0 ] Ġas ĠX 5 0 9 Certificate ĊĠĠĠĠĠĠĠ Ġcert . check Validity () ĊĠĠĠ Ġ} Ċ } Ċ