package Ġme . uport . sdk . credentials Ċ Ċ import Ġme . uport . sdk . core . IT ime Provider Ċ import Ġme . uport . sdk . core . System Time Provider Ċ import Ġme . uport . sdk . credentials . model . Credential Params Ċ import Ġme . uport . sdk . credentials . model . Presentation Params Ċ import Ġme . uport . sdk . jwt . Invalid JWT Exception Ċ import Ġme . uport . sdk . jwt . JWT Tools Ċ import Ġme . uport . sdk . jwt . JWT Tools . Companion . DEFAULT _ JWT _ VALID ITY _ SECONDS Ċ import Ġme . uport . sdk . jwt . JWT Utils . Companion . normalize Known DID Ċ import Ġme . uport . sdk . jwt . model . Jwt Header . Companion . ES 2 5 6 K Ċ import Ġme . uport . sdk . jwt . model . Jwt Header . Companion . ES 2 5 6 K _ R Ċ import Ġme . uport . sdk . jwt . model . Jwt Payload Ċ import Ġme . uport . sdk . signer . Signer Ċ Ċ /** Ċ Ġ* ĠThe Ġ[ Credentials ] Ġclass Ġshould Ġallow Ġyou Ġto Ġcreate Ġthe Ġsigned Ġpayload s Ġused Ġin Ġu Port Ġincluding Ċ Ġ* Ġver ifiable Ġclaims Ġand Ġsigned Ġmobile Ġapp Ġrequests Ġ( ex . Ġselect ive Ġdis closure Ġrequests Ċ Ġ* Ġfor Ġuser Ġdata ). ĠIt Ġshould Ġalso Ġprovide Ġsignature Ġverification Ġover Ġsigned Ġpayload s . Ċ Ġ*/ Ċ class ĠCredentials ( ĊĠĠĠ Ġprivate Ġval Ġdid : ĠString , ĊĠĠĠ Ġprivate Ġval Ġsigner : ĠSign er , ĊĠĠĠ Ġprivate Ġval Ġclock : ĠI Time Provider Ġ= ĠSystem Time Provider Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠCreates Ġa Ġ[ Select ive ĠDis closure ĠRequest ĠJWT ]( https :// github . com / uport - project / specs / blob / develop / messages / shar ere q . md ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġ Ġval Ġreq Params Ġ= ĠSelect ive Dis closure Request Params ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Ġ= ĠlistOf (" name ", Ġ" country "), ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Url Ġ= Ġ" https :// my server . com " ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠ Ġ* Ġ Ġval Ġjwt Ġ= Ġcredentials . create Dis closure Request ( req Params ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ// Ġ... Ġsend Ġjwt Ġto Ġthe Ġrelevant Ġparty Ġand Ġexpect Ġa Ġcallback Ġwith Ġthe Ġresponse Ġat Ġhttps :// my server . com ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcreate Dis closure Request ( params : ĠSelect ive Dis closure Request Params ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġbuild Payload For Share Req ( params ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . sign JWT ( payload , Ġparams . expires InSeconds Ġ?: ĠDEFAULT _ SHARE _ REQ _ VALID ITY _ SECONDS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa ĠJWT Ġrequesting Ġan Ġeth _ sign / personal _ sign Ġfrom Ġa Ġuser Ġof Ġanother Ġu Port Ġclient Ġapp . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġhttps :// github . com / uport - project / specs / blob / develop / messages / personal sign req . md ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġ Ġval Ġreq Params Ġ= ĠPersonal Sign Request Params ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġ" This Ġis Ġthe Ġmessage Ġto Ġbe Ġsigned ", ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Url Ġ= Ġ" https :// my server . com " ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠ Ġ* Ġ Ġval Ġjwt Ġ= Ġcredentials . create Personal Sign Request ( req Params ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ// Ġ... Ġsend Ġjwt Ġto Ġthe Ġrelevant Ġparty Ġand Ġexpect Ġa Ġcallback Ġwith Ġthe Ġresponse Ġat Ġhttps :// my server . com ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcreate Personal Sign Request ( params : ĠPersonal Sign Request Params ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġbuild Payload For Personal Sign Req ( params ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . sign JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . expires InSeconds Ġ?: ĠDEFAULT _ PERSON AL _ SIGN _ REQ _ VALID ITY _ SECONDS ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa ĠJWT Ġrequesting Ġa Ġverified Ġclaim Ġfrom Ġa Ġuser Ġof Ġanother Ġu Port Ġclient Ġapp . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġhttps :// github . com / uport - project / specs / blob / develop / messages / verification req . md ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġ Ġval Ġreq Params Ġ= ĠVerified Claim Request Params ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsigned Claim Ġ= Ġmap Of ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C it izen Ġof Ġcity ĠX " Ġto Ġmap Of ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Allowed Ġto Ġvote " Ġto Ġtrue , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Document " Ġto Ġ" Qm ZZ BB K PS 2 NW c 6 PM Zb Uk 9 z UH Co 1 SH Kz Q PP X 4 nd f wa Y zm PW " ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Url Ġ= Ġ" https :// my server . com " ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠ Ġ* Ġ Ġval Ġjwt Ġ= Ġcredentials . create Verification Signature Request ( req Params ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ// Ġ... Ġsend Ġjwt Ġto Ġthe Ġrelevant Ġparty Ġand Ġexpect Ġa Ġcallback Ġwith Ġthe Ġresponse Ġat Ġhttps :// my server . com ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcreate Verification Signature Request ( params : ĠVerified Claim Request Params ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġbuild Payload For Verified Claim Req ( params ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . sign JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . expires InSeconds Ġ?: ĠDEFAULT _ VER IFI ED _ CL AIM _ REQ _ VALID ITY _ SECONDS ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa ĠJWT Ġrequesting Ġe thereum Ġtransaction Ġsigning Ġfrom Ġa Ġuser Ġof Ġanother Ġu Port Ġclient Ġapp . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġhttps :// github . com / uport - project / specs / blob / develop / messages / tx . md ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠExample : ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġ Ġval Ġparams Ġ= ĠEthereum Transaction Request Params ( ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġ= Ġissuer Address , ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠBigInteger (" 1 "), ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Url Ġ= Ġ" https :// my server . com ", ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Id Ġ= ĠNetworks . rin ke by . network Id ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġval Ġjwt Ġ= Ġcredentials . create E thereum Transaction Request ( params ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ// Ġ... Ġsend Ġjwt Ġto Ġthe Ġrelevant Ġparty Ġand Ġexpect Ġa Ġcallback Ġwith Ġthe Ġresponse Ġat Ġhttps :// my server . com ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcreate E thereum Transaction Request ( params : ĠEthereum Transaction Request Params ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġbuild Payload For E thereum Transaction Req ( params ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . sign JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . expires InSeconds Ġ?: ĠDEFAULT _ ET HERE UM _ TRANSACTION _ REQ _ VALID ITY _ SECONDS ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa ĠJWT Ġwith Ġa Ġsigned Ġclaim . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsub Ġ** REQUIRED ** Ġa Ġvalid ĠD ID Ġfor Ġthe Ġsubject Ġof Ġcredential ĊĠĠĠĠ Ġ* Ġ@ param Ġclaim Ġ** REQUIRED ** Ġclaim Ġabout Ġsubject Ġsingle Ġkey Ġvalue Ġor Ġkey Ġmapping ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġobject Ġwith Ġmultiple Ġvalues ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Url Ġ** OPTIONAL ** Ġthe ĠURL Ġthat Ġreceives Ġthe Ġresponse ĊĠĠĠĠ Ġ* Ġ@ param Ġexpires InSeconds Ġ** OPTIONAL ** Ġnumber Ġof Ġseconds Ġof Ġvalidity Ġof Ġthe Ġclaim . ĊĠĠĠĠ Ġ* Ġ@ param Ġverified Claims Ġ** OPTIONAL ** Ġa Ġlist Ġof Ġverified Ġclaims Ġwhich Ġcan Ġbe Ġabout Ġanything ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelated Ġto Ġthe Ġclaim Ġand Ġin Ġmost Ġcases Ġit Ġis Ġrelated Ġto Ġthe Ġissuer ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcreate Verification ( ĊĠĠĠĠĠĠĠ Ġsub : ĠString , ĊĠĠĠĠĠĠĠ Ġclaim : ĠMap < String , ĠAny >, ĊĠĠĠĠĠĠĠ Ġcallback Url : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġverified Claims : ĠCollection < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġexpires InSeconds : ĠLong ? Ġ= Ġ 6 0 0 L ĊĠĠĠ Ġ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġmutable Map Of < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġpayload [" sub "] Ġ= Ġsub ĊĠĠĠĠĠĠĠ Ġpayload [" claim "] Ġ= Ġclaim ĊĠĠĠĠĠĠĠ Ġpayload [" vc "] Ġ= Ġverified Claims Ġ?: Ġempty List < String >() ĊĠĠĠĠĠĠĠ Ġpayload [" callback "] Ġ= Ġcallback Url Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . sign JWT ( payload , Ġexpires InSeconds Ġ?: Ġ 6 0 0 L ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa ĠW 3 C Ġcompliant Ġ[ ver ifiable Ġcredential ]( https :// w 3 c . github . io / vc - data - model /# credentials ) ĊĠĠĠĠ Ġ* Ġserialized Ġas Ġa ĠJWT . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsubject Ġthe Ġsubject Ġof Ġthe Ġclaim Ġin Ġthe Ġ[ credential ] ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠThis Ġbecomes Ġthe Ġ` sub ` Ġfield Ġin Ġthe ĠJWT ĊĠĠĠĠ Ġ* Ġ@ param Ġcredential Ġthe Ġcredential Ġdetails ; Ġcontains Ġthe Ġclaim Ġbeing Ġmade Ġabout Ġthe Ġ[ subject ] ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠThis Ġbecomes Ġthe Ġ` vc ` Ġfield Ġin Ġthe ĠJWT ĊĠĠĠĠ Ġ* Ġ@ param Ġnot Valid Before Ġ[** optional **] Ġthe ĠUNIX Ġtimestamp Ġthat Ġmarks Ġthe Ġbeginning Ġof Ġthe Ġvalidity Ġperiod . ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠIf Ġthis Ġis Ġnot Ġspecified , Ġthe Ġcurrent Ġtimestamp Ġis Ġused Ġas Ġgiven Ġby Ġ[ clock ] ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠThis Ġbecomes Ġthe Ġ` nb f ` Ġfield Ġof Ġthe ĠJWT . ĠIt Ġis Ġmeasured Ġin Ġseconds . ĊĠĠĠĠ Ġ* Ġ@ param Ġvalidity Period Ġ[** optional **] Ġthe Ġnumber Ġof Ġseconds Ġof Ġvalidity Ġof Ġthis Ġcredential . ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠThis Ġinflu ences Ġthe Ġ` exp ` Ġfield Ġin Ġthe ĠJWT ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠIf Ġthis Ġis Ġnegative , Ġthere Ġwill Ġbe Ġno Ġexpiry Ġdate Ġset Ġon Ġthe Ġcredential . ĊĠĠĠĠ Ġ* Ġ@ param Ġaudience Ġ[** optional **] Ġthe Ġintended Ġaudience Ġof Ġthis Ġcredential . ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠThis Ġresults Ġin Ġthe Ġ` aud ` Ġfield Ġof Ġthe ĠJWT . ĠIf Ġit Ġis Ġ` null `, Ġno Ġaudience Ġwill Ġbe Ġset Ġfor Ġthe ĠJWT . ĊĠĠĠĠ Ġ* Ġ@ param Ġid Ġ[** optional **] Ġthe ĠID Ġof Ġthis Ġcredential . ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠThis Ġbecomes Ġthe Ġ` j ti ` Ġfield Ġin Ġthe Ġresulting ĠJWT . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcreate Ver ifiable Credential ( ĊĠĠĠĠĠĠĠ Ġsubject : ĠString , ĊĠĠĠĠĠĠĠ Ġcredential : ĠCredential Params , ĊĠĠĠĠĠĠĠ Ġnot Valid Before : ĠLong Ġ= Ġclock . now Ms () Ġ/ Ġ 1 0 0 0 L , ĊĠĠĠĠĠĠĠ Ġvalidity Period : ĠLong Ġ= Ġ- 1 L , ĊĠĠĠĠĠĠĠ Ġaudience : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġid : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġmutable Map Of < String , ĠAny ?> () ĊĠĠĠĠĠĠĠ Ġpayload [" sub "] Ġ= Ġsubject ĊĊĠĠĠĠĠĠĠ Ġ// add Ġdefaults Ġif Ġthey Ġare Ġnot Ġset ĊĠĠĠĠĠĠĠ Ġval Ġprocessed Credential Ġ= Ġcredential . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcredential . context . to Mutable Set (). apply Ġ{ Ġadd (" https :// www . w 3 . org / 2 0 1 8 / credentials / v 1 ") Ġ}. toList (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġcredential . type . to Mutable Set (). apply Ġ{ Ġadd (" Ver ifiable Credential ") Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġpayload [" vc "] Ġ= Ġprocessed Credential ĊĠĠĠĠĠĠĠ Ġpayload [" nb f "] Ġ= Ġnot Valid Before ĊĠĠĠĠĠĠĠ Ġpayload [" iat "] Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( validity Period Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexp Ġ= Ġnot Valid Before Ġ+ Ġvalidity Period ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload [" exp "] Ġ= Ġexp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( audience Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload [" aud "] Ġ= Ġaudience ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload [" j ti "] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . sign JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ= Ġpayload , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpires InSeconds Ġ= Ġvalidity Period , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalgorithm Ġ= ĠES 2 5 6 K ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa ĠW 3 C Ġcompliant Ġ[ ver ifiable Ġpresentation ]( https :// w 3 c . github . io / vc - data - model /# present ations ) ĊĠĠĠĠ Ġ* Ġserialized Ġas Ġa ĠJWT . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvp Ġencaps ulates Ġthe Ġcore Ġpresentation Ġparameters ĊĠĠĠĠ Ġ* Ġ@ param Ġnot Valid Before Ġthe Ġ` iss u ance Date ` Ġas Ġa Ġunix Ġtimestamp Ġ( seconds ). ĠDefaults Ġto Ġthe Ġclock Ġtime ĊĠĠĠĠ Ġ* Ġ( trans lates Ġto Ġ` nb f ` Ġand Ġ` iat `) ĊĠĠĠĠ Ġ* Ġ@ param Ġvalidity Period Ġthe Ġnumber Ġof Ġseconds Ġof Ġvalidity Ġof Ġthe Ġresulting ĠJWT . Ġ( in flu ences Ġ` exp `) ĊĠĠĠĠ Ġ* Ġ@ param Ġaudience Ġthe Ġintended Ġaudience Ġof Ġthe Ġresulting ĠJWT Ġ( trans lates Ġto Ġ` aud `) ĊĠĠĠĠ Ġ* Ġ@ param Ġid Ġan Ġoptional ĠID Ġof Ġthe Ġpresentation Ġ( trans lates Ġto Ġ` j ti `) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcreate Presentation ( ĊĠĠĠĠĠĠĠ Ġvp : ĠPresentation Params , ĊĠĠĠĠĠĠĠ Ġnot Valid Before : ĠLong Ġ= Ġclock . now Ms () Ġ/ Ġ 1 0 0 0 L , ĊĠĠĠĠĠĠĠ Ġvalidity Period : ĠLong Ġ= Ġ- 1 L , ĊĠĠĠĠĠĠĠ Ġaudience : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġid : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġmutable Map Of < String , ĠAny ?> () ĊĊĠĠĠĠĠĠĠ Ġval Ġprocessed Presentation Ġ= Ġvp . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġvp . context . to Mutable Set (). apply Ġ{ Ġadd (" https :// www . w 3 . org / 2 0 1 8 / credentials / v 1 ") Ġ}. toList (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġvp . type . to Mutable Set (). apply Ġ{ Ġadd (" Ver ifiable Presentation ") Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpayload [" vp "] Ġ= Ġprocessed Presentation ĊĠĠĠĠĠĠĠ Ġpayload [" nb f "] Ġ= Ġnot Valid Before ĊĠĠĠĠĠĠĠ Ġpayload [" iat "] Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( validity Period Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexp Ġ= Ġnot Valid Before Ġ+ Ġvalidity Period ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload [" exp "] Ġ= Ġexp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( audience Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload [" aud "] Ġ= Ġaudience ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload [" j ti "] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . sign JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ= Ġpayload , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpires InSeconds Ġ= Ġvalidity Period , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalgorithm Ġ= ĠES 2 5 6 K ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVerify Ġand Ġreturn Ġprofile Ġfrom Ġa ĊĠĠĠĠ Ġ* Ġ[ Select ive ĠDis closure ĠResponse ĠJWT ]( https :// github . com / uport - project / specs / blob / develop / messages / sh arer esp . md ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtoken Ġ** REQUIRED ** ĠThe ĠJWT Ġresponse Ġtoken Ġfrom Ġa Ġselect ive Ġdis closure Ġrequest ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġ[ U port Profile ] Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġverify Dis closure ( token : ĠString ): ĠU port Profile Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠJWT Tools (). verify ( token , Ġaudience Ġ= Ġthis . did ) ĊĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġmutable ListOf < Jwt Payload >() ĊĠĠĠĠĠĠĠ Ġval Ġinvalid Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠ Ġpayload . verified ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid . add ( JWT Tools (). verify ( it , Ġaudience Ġ= Ġthis . did )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid JWT Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Id Ġ= Ġpayload . net Ġ?: ĠJWT Tools (). decode ( payload . req Ġ?: Ġ""). second . net ĊĊĠĠĠĠĠĠĠ Ġreturn ĠU port Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload . iss , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload . own ?. get (" email "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload . own ?. get (" name "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJWT Tools (). decode Raw ( token ). second ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAuth entic ates Ġ[ Select ive ĠDis closure ĠResponse ĠJWT ]( https :// github . com / uport - project / specs / blob / develop / messages / sh arer esp . md ) Ġfrom Ġu Port ĊĠĠĠĠ Ġ* Ġclient Ġas Ġpart Ġof Ġthe Ġ[ Select ive ĠDis closure ĠFlow ]( https :// github . com / uport - project / specs / blob / develop / flows / select ived is closure . md ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt ĠVerifies Ġand Ġparses Ġthe Ġgiven Ġresponse Ġtoken Ġand Ġverifies Ġthe Ġchallenge Ġresponse Ġflow . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtoken Ġ** REQUIRED ** Ġa Ġvalid ĠJWT Ġresponse Ġtoken ĊĠĠĠĠ Ġ* Ġ@ returns Ġ Ġa Ġverified Ġ[ Jwt Payload ] ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ JWT Authentication Exception ] Ġwhen Ġthe Ġchallenge Ġis Ġfailed Ġor Ġwhen Ġthe Ġrequest Ġtoken Ġis Ġunavailable ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġauthenticate Dis closure ( token : ĠString ): ĠJwt Payload Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= ĠJWT Tools (). verify ( token , Ġauth Ġ= Ġtrue , Ġaudience Ġ= Ġthis . did ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( payload . req Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJWT Authentication Exception (" Challenge Ġwas Ġnot Ġincluded Ġin Ġresponse ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġchallenge Ġ= ĠJWT Tools (). verify ( payload . req Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( challenge . iss Ġ!= Ġthis . did ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJWT Authentication Exception (" Challenge Ġissuer Ġdoes Ġnot Ġmatch Ġcurrent Ġidentity : Ġ${ challenge . iss } Ġ!= Ġ${ this . did }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( challenge . type Ġ!= ĠJWT Types . share Req . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJWT Authentication Exception (" Challenge Ġpayload Ġtype Ġinvalid : Ġ${ challenge . type }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpayload ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠCreates Ġa ĠJWT Ġusing Ġthe Ġgiven Ġ[ payload ], Ġissued Ġand Ġsigned Ġusing Ġthe Ġ[ did ] Ġand Ġ[ signer ] ĊĠĠĠĠ Ġ* Ġ Ġfields Ġof Ġthis Ġ[ Credentials ] Ġinstance . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġpayload Ġa Ġmap Ġdetail ing Ġthe Ġpayload Ġof Ġthe Ġresulting ĠJWT ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġexpires InSeconds Ġ_ optional _ Ġnumber Ġof Ġseconds Ġof Ġvalidity Ġof Ġthe ĠJWT . ĠThis Ġparameter ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġignored Ġif Ġthe Ġ[ payload ] Ġalready Ġcontains Ġan Ġ` exp ` Ġfield ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġsign JWT ( ĊĠĠĠĠĠĠĠ Ġpayload : ĠMap < String , ĠAny ? >, ĊĠĠĠĠĠĠĠ Ġexpires InSeconds : ĠLong Ġ= ĠDEFAULT _ JWT _ VALID ITY _ SECONDS , ĊĠĠĠĠĠĠĠ Ġalgorithm : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnorm DID Ġ= Ġnormalize Known DID ( this . did ) ĊĠĠĠĠĠĠĠ Ġval Ġalg Ġ= Ġalgorithm Ġ?: Ġif Ġ( norm DID . startsWith (" did : uport :" )) ĠES 2 5 6 K Ġelse ĠES 2 5 6 K _ R ĊĠĠĠĠĠĠĠ Ġreturn ĠJWT Tools ( clock ). create JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnorm DID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . signer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpires InSeconds Ġ= Ġexpires InSeconds , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalgorithm Ġ= Ġalg ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ