package Ġid . walt . aud itor Ċ Ċ import Ġcom . be ust . kl ax on . Kl ax on Ċ import Ġcom . be ust . kl ax on . Parser Ċ import Ġcom . jay way . json path . Json Path Ċ import Ġid . walt . model . Attribute Info Ċ import Ġid . walt . model . Trusted Issuer Ċ import Ġid . walt . model . oidc . Vp Token Claim Ċ import Ġid . walt . services . did . Did Service Ċ import Ġid . walt . services . ess if . Trusted Issuer Client Ċ import Ġid . walt . services . key . Key Service Ċ import Ġid . walt . services . vc . Json Ld Credential Service Ċ import Ġid . walt . services . vc . Jwt Credential Service Ċ import Ġid . walt . sign atory . Rev ocation Client Service Ċ import Ġid . walt . vc lib . credentials . Ver ifiable Presentation Ċ import Ġid . walt . vc lib . credentials . g ai ax . G ai ax Credential Ċ import Ġid . walt . vc lib . model . Ver ifiable Credential Ċ import Ġid . walt . vc lib . schema . Schema Service Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġid . walt . vc lib . credentials . Credential Status Credential Ċ import Ġid . walt . vc lib . credentials . Ver ifiable M and ate Ċ import Ġio . ktor . client . plugins .* Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġjava . net . URL Ċ Ċ private Ġconst Ġval ĠT IR _ TYPE _ ATTRIBUTE Ġ= Ġ" attribute " Ċ private Ġconst Ġval ĠT IR _ NAME _ IS SU ER Ġ= Ġ" issuer " Ċ private Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} Ċ private Ġval Ġjson Ld Credential Service Ġ= ĠJson Ld Credential Service . getService () Ċ private Ġval Ġjwt Credential Service Ġ= ĠJwt Credential Service . getService () Ċ private Ġval Ġdate Formatter Ġ= ĊĠĠĠ ĠSimpleDateFormat (" yyyy - MM - dd ' T ' HH : mm : ss ' Z ' "). also Ġ{ Ġit . time Zone Ġ= ĠTime Zone . getTime Zone (" UTC ") Ġ} Ċ Ċ @ Serializable Ċ data Ġclass ĠVerification Policy Metadata ( val Ġdescription : ĠString , Ġval Ġid : ĠString , Ġval Ġapply To VC : ĠBoolean , Ġval Ġapply To VP : ĠBoolean ) Ċ Ċ abstract Ġclass ĠVerification Policy Ġ{ ĊĠĠĠ Ġval Ġid : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . java Class . simple Name ĊĠĠĠ Ġabstract Ġval Ġdescription : ĠString ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean ĊĠĠĠ Ġopen Ġvar Ġapply To VC : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġopen Ġvar Ġapply To VP : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġopen Ġvar Ġarguments : ĠAny ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġverify ( vc : ĠVer ifiable Credential ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġvc Ġis ĠVer ifiable Presentation Ġ&& Ġapply To VP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġvc Ġ! is ĠVer ifiable Presentation Ġ&& Ġapply To VC Ġ-> Ġdo Verify ( vc ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSignature Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby Ġsignature " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ) Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" is Ġjwt : Ġ${ vc . jwt Ġ!= Ġnull }" Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġissuer Did Ġ= Ġvc . issuer !! ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Key Service . getService (). has Key ( issuer Did )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDid Service . import Key ( issuer Did ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( vc . jwt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġjson Ld Credential Service . verify ( vc . json !! ). verified ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġjwt Credential Service . verify ( vc . jwt !! ). verified ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . error ( it . localized Message ) ĊĠĠĠ Ġ}. get OrDefault ( false ) Ċ } Ċ Ċ class ĠJson Schema Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby ĠJSON Ġschema " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ= ĠSchema Service . validate Schema ( vc . json !! ). run Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( valid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error Ġ{ Ġ" Credential Ġnot Ġvalid Ġaccording Ġthe Ġjson - schema Ġof Ġtype Ġ${ vc . type }. ĠThe Ġvalidation Ġerrors Ġare :" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors ?. forEach Ġ{ Ġerror Ġ-> Ġlog . error Ġ{ Ġerror Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTr usted Schema Registry Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby ĠEB SI ĠTr usted ĠSchema ĠRegistry " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ) Ġ= Ġwhen Ġ( vc . jwt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull Ġ-> Ġjson Ld Credential Service . validate Schema T sr ( vc . encode ()) Ġ// ĠSchema Ġalready Ġvalidated Ġby Ġjson - ld ? ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġjwt Credential Service . validate Schema T sr ( vc . encode ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTr usted Issuer Did Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby Ġtrusted Ġissuer Ġdid " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDid Service . load Or Resolve Any Did ( vc . issuer !! ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClient RequestException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! e . message . contains (" did Ġmust Ġbe Ġa Ġvalid ĠD ID ") Ġ&& Ġ! e . message . contains (" Identifier ĠNot ĠFound ")) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTr usted Issuer Registry Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby Ġtrusted ĠEB SI ĠTr usted ĠIss uer ĠRegistry Ġrecord " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠV Ps Ġare Ġnot Ġconsidered ĊĠĠĠĠĠĠĠ Ġif Ġ( vc Ġis ĠVer ifiable Presentation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġissuer Did Ġ= Ġvc . issuer !! ĊĊĠĠĠĠĠĠĠ Ġval Ġresolved Issuer Did Ġ= ĠDid Service . load Or Resolve Any Did ( issuer Did ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠException (" Could Ġnot Ġresolve Ġissuer ĠD ID Ġ$ issuer Did ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( resolved Issuer Did . id Ġ!= Ġissuer Did ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" Resolved ĠD ID Ġ${ resolved Issuer Did . id } Ġdoes Ġnot Ġmatch Ġthe Ġissuer ĠD ID Ġ$ issuer Did " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġt ir Record Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr usted Issuer Client . get Issuer ( issuer Did ) ĊĠĠĠĠĠĠĠ Ġ}. getOrElse Ġ{ Ġthrow ĠException (" Could Ġnot Ġresolve Ġissuer ĠT IR Ġrecord Ġof Ġ$ issuer Did ", Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠisValid Trusted Issuer Record ( t ir Record ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisValid Trusted Issuer Record ( t ir Record : ĠTr usted Issuer ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( attribute Ġin Ġt ir Record . attributes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattribute Info Ġ= ĠAttribute Info . from ( attribute . body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TI R _ TYPE _ ATTRIBUTE Ġ== Ġattribute Info ?. type Ġ&& ĠT IR _ NAME _ IS SU ER Ġ== Ġattribute Info . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġapply To VP : ĠBoolean Ġ= Ġfalse Ċ } Ċ Ċ class ĠTr usted Subject Did Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby Ġtrusted Ġsubject Ġdid " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvc . subject ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDid Service . load Or Resolve Any Did ( it ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClient RequestException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! e . message . contains (" did Ġmust Ġbe Ġa Ġvalid ĠD ID ") Ġ&& Ġ! e . message . contains (" Identifier ĠNot ĠFound ")) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠIss ued Date Before Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby Ġiss u ance Ġdate " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( vc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVer ifiable Presentation Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġparse Date ( vc . iss ued ). let Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġit . before ( Date ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠValid From Before Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby Ġvalid Ġfrom " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( vc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVer ifiable Presentation Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġparse Date ( vc . valid From ). let Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġit . before ( Date ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠExp iration Date After Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby Ġexpiration Ġdate " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( vc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVer ifiable Presentation Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġparse Date ( vc . expiration Date ). let Ġ{ Ġit Ġ== Ġnull Ġ|| Ġit . after ( Date ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCredential Status Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġby Ġcredential Ġstatus " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcs Ġ= ĠK l ax on (). parse < Credential Status Credential >( vc . json !! ) !!. credential Status !! ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( cs . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Simple Credential Status 2 0 2 2 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrs Ġ= ĠRev ocation Client Service . getService () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrs . check Rev oked ( cs . id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ! result . is Rev oked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Credential Status Ġtype Ġ\" \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠChallenge Policy (): ĠVerification Policy () Ġ{ ĊĠĠĠ Ġconstructor ( challenge : ĠString ) Ġ: Ġthis () Ġ{ Ġarguments Ġ= Ġchallenge Ġ} ĊĠĠĠ Ġconstructor ( challenges : ĠSet < String >) Ġ: Ġthis () Ġ{ Ġarguments Ġ= Ġchallenges Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġchallenge " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// vc . challenge ?. let Ġ{ Ġverify Challenge ( it ) Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( arguments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvc . challenge ?. let Ġ{ Ġit Ġ== Ġarguments Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSet < *> Ġ-> Ġvc . challenge ?. let Ġ{ Ġ( arguments Ġas ĠSet < *> ). contains ( it ) Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠV p Token Claim Policy () Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġconstructor ( vp Token Claim : ĠV p Token Claim ?): Ġthis () Ġ{ Ġarguments Ġ= Ġvp Token Claim Ġ} ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify Ġver ifiable Ġpresentation Ġby ĠO IDC / SI OP v 2 ĠV P Ġtoken Ġclaim " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( arguments Ġ!= Ġnull Ġ&& Ġarguments Ġis ĠV p Token Claim Ġ&& Ġvc Ġis ĠVer ifiable Presentation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( arguments Ġas ĠV p Token Claim ). presentation _ definition . input _ descriptors . all Ġ{ Ġdesc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvc . ver ifiable Credential . any Ġ{ Ġcred Ġ-> Ġdesc . schema ?. uri Ġ== Ġcred . credential Schema ?. id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġelse : Ġnothing Ġto Ġcheck ĊĠĠĠĠĠĠĠ Ġreturn Ġ!( vc Ġis ĠVer ifiable Presentation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġapply To VC : ĠBoolean Ġ= Ġfalse Ċ } Ċ Ċ class ĠG ai ax Trusted Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify ĠG ai ax Ġtrusted Ġfields " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠV Ps Ġare Ġnot Ġconsidered ĊĠĠĠĠĠĠĠ Ġif Ġ( vc Ġis ĠVer ifiable Presentation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġg ai ax Vc Ġ= Ġvc Ġas ĠG ai ax Credential ĊĠĠĠĠĠĠĠ Ġif Ġ( g ai ax Vc . credential Subject Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġvalidate Ġtrusted Ġfields Ġproperly ĊĠĠĠĠĠĠĠ Ġif Ġ( g ai ax Vc . credential Subject !!. DNS publicKey . length Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" DNS ĠPublic Ġkey Ġnot Ġvalid ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( g ai ax Vc . credential Subject !!. ethereum Address . id . length Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" ETH Ġaddress Ġnot Ġvalid ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠG ai ax SD Policy Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" Verify ĠG ai ax ĠSD Ġfields " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠVer ifiable M and ate Policy () Ġ: ĠVerification Policy () Ġ{ ĊĠĠĠ Ġconstructor ( input Json : ĠString ): Ġthis () Ġ{ Ġarguments Ġ= Ġinput Json Ġ} ĊĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" Verify Ġver ifiable Ġmand ate Ġpolicy " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( vc Ġis ĠVer ifiable M and ate Ġ&& Ġarguments Ġ!= Ġnull Ġ&& Ġarguments Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRe go Validator . validate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Input Ġ= Ġarguments Ġas ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠJson Path . parse ( vc . json !! )?. read (" $. credential Subject . holder ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre go Ġ= Ġvc . credential Subject !!. policy Schema URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre go Query Ġ= Ġ" data . system . main " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠRe go Policy Arg Ġ( ĊĠĠĠ Ġval Ġinput : ĠString , ĊĠĠĠ Ġval Ġre go : ĠString , ĊĠĠĠ Ġval Ġdata Path : ĠString Ġ= Ġ"\ $. credential Subject ", Ġ// Ġfor Ġspecifying Ġthe Ġinput Ġdata ĊĠĠĠ Ġval Ġre go Query : ĠString Ġ= Ġ" data . system . main " Ġ// Ġfor Ġevaluating Ġthe Ġresult Ġfrom Ġthe Ġre go Ġengine ĊĠĠĠ Ġ) Ċ Ċ class ĠRe go Policy () Ġ: ĠVerification Policy () Ġ{ ĊĊĠĠĠ Ġconstructor ( reg o Policy Arg : ĠRe go Policy Arg ): Ġthis () Ġ{ Ġarguments Ġ= Ġre go Policy Arg Ġ} ĊĠĠĠ Ġconstructor ( reg o Policy Str : ĠString ): Ġthis () Ġ{ Ġarguments Ġ= Ġre go Policy Str Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" Verify Ġcredential Ġby Ġre go Ġpolicy " ĊĠĠĠ Ġoverride Ġfun Ġdo Verify ( vc : ĠVer ifiable Credential ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġparams : Ġre go Ġ( string , ĠURL , Ġfile , Ġcredential Ġproperty ), Ġinput Ġ( json Ġstring ), Ġdata Ġjson path Ġ( default : Ġ$. credential Subject ) ĊĠĠĠĠĠĠĠ Ġif ( arguments Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre go Policy Arg Ġ= Ġif ( arguments Ġis ĠRe go Policy Arg ) Ġ{ Ġarguments Ġas ĠRe go Policy Arg Ġ} Ġelse Ġ{ ĠK l ax on (). parse < Re go Policy Arg >( arguments . toString ()) Ġ} Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre go Ġ= Ġif Ġ( reg o Policy Arg . reg o . startsWith ("$ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Path . parse ( vc . json !! ). read < String >( reg o Policy Arg . reg o ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre go Policy Arg . reg o ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRe go Validator . validate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Input Ġ= Ġre go Policy Arg . input , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠJson Path . parse ( vc . json !! )?. read ( reg o Policy Arg . data Path ) !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre go Ġ= Ġre go , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre go Query Ġ= Ġre go Policy Arg . reg o Query ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġparse Date ( date : ĠString ?) Ġ= Ġtry Ġ{ ĊĠĠĠ Ġdate Formatter . parse ( date ) Ċ } Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠ Ġnull Ċ } Ċ Ċ data Ġclass ĠVerification Result ( ĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* ĠValidation Ġstatus Ġover Ġall Ġpolicy Ġresults . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġvalid : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġpolicy Results : ĠMap < String , ĠBoolean > Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= ĊĠĠĠĠĠĠĠ Ġ" Verification Result ( valid =$ valid , Ġpolicy Results ={ ${ policy Results . entries . join ToString Ġ{ Ġit . key Ġ+ Ġ"=" Ġ+ Ġit . value Ġ}}} )" Ċ } Ċ