package Ġcom . lux oft . blockchain lab . cord a . hyperledger . ind y . flow . b 2 b Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġcom . lux oft . blockchain lab . cord a . hyperledger . ind y . contract . Ind y Credential Contract Ċ import Ġcom . lux oft . blockchain lab . cord a . hyperledger . ind y . data . state . Ind y Credential Proof Ċ import Ġcom . lux oft . blockchain lab . cord a . hyperledger . ind y . flow .* Ċ import Ġcom . lux oft . blockchain lab . hyperledger . ind y . models .* Ċ import Ġnet . cord a . core . contracts . Command Ċ import Ġnet . cord a . core . contracts . State And Contract Ċ import Ġnet . cord a . core . flows .* Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġnet . cord a . core . transactions . Transaction Builder Ċ import Ġnet . cord a . core . utilities . unwrap Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠFlow s Ġto Ġverify Ġpredicates Ġon Ġattributes Ċ Ġ* Ġ*/ Ċ object ĠVerify Credential Flow B 2 B Ġ{ ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġflow Ġto Ġverify Ġsome Ġconditions Ġfrom Ġ[ proof Request ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpro ver Name ĠĠĠĠĠĠĠ Ġnode Ġthat Ġwill Ġprove Ġthe Ġcredentials ĊĠĠĠĠ Ġ* Ġ@ param Ġproof Request ĠĠĠĠĠ Ġproof Ġrequest Ġ- Ġuse Ġ[ proof Request ] ĠDSL Ġbuilder Ġto Ġget Ġit ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ returns Ġ[ Pair ] Ġof Ġ[ String ] Ġto Ġ[ Boolean ] Ġ- Ġwhere Ġ[ first ] Ġis Ġproof Ġid , Ġif Ġverification Ġsucceed , Ġ[ null ] Ġotherwise , ĊĠĠĠĠ Ġ* Ġ Ġand Ġ[ second ] Ġis Ġverification Ġstatus ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġ@ Initi ating Flow ĊĠĠĠ Ġ@ Start able By RPC ĊĠĠĠ Ġopen Ġclass ĠVer ifier ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpro ver Name : ĠC ord a X 5 0 0 Name , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproof Request : ĠPro of Request ĊĠĠĠ Ġ) Ġ: ĠFlow Logic < Pair < String ?, ĠBoolean >>() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall (): ĠPair < String ?, ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpro ver : ĠParty Ġ= Ġwho Is ( pro ver Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflow Session : ĠFlow Session Ġ= Ġinitiate Flow ( pro ver ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠUUID . randomUUID (). toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġverify Credential Out Ġ= Ġflow Session . send And Receive < Proof Info >( proof Request ). unwrap Ġ{ Ġproof Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġused Data Ġ= Ġind y User (). ledger User . retrieve Data Used In Proof ( proof Request , Ġproof ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential Proof Out Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIn dy Credential Proof ( id , Ġproof Request , Ġproof , Ġused Data , ĠlistOf ( our Identity , Ġpro ver )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ind y User (). verify Proof With Ledger Data ( credential Proof Out . proof Req , Ġproof )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFlow Exception (" Proof Ġverification Ġfailed ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState And Contract ( credential Proof Out , ĠIn dy Credential Contract :: class . java . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġverify Credential Cmd Type Ġ= ĠIn dy Credential Contract . Command . Verify () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġverify Credential Cmd Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand ( verify Credential Cmd Type , ĠlistOf ( our Identity . own ing Key , Ġpro ver . own ing Key )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtr x Builder Ġ= ĠTransaction Builder ( who IsNot ary ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Items ( verify Credential Out , Ġverify Credential Cmd ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr x Builder . to Wire Transaction ( service Hub ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Ledger Transaction ( service Hub ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġself Signed Tx Ġ= Ġservice Hub . sign Initial Transaction ( trx Builder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsigned Tr x Ġ= Ġsub Flow ( Collect Signatures Flow ( self Signed Tx , ĠlistOf ( flow Session ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot ar ise Ġand Ġrecord Ġthe Ġtransaction Ġin Ġboth Ġparties ' Ġvault s . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Flow ( Final ity Flow ( signed Tr x )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( id , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ("", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( null , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Initi ated By ( Verify Credential Flow B 2 B . Verifier :: class ) ĊĠĠĠ Ġopen Ġclass ĠPro ver ( private Ġval Ġflow Session : ĠFlow Session ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġind y Proof Request Ġ= Ġflow Session . receive < Proof Request >(). unwrap Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproof Ġ= Ġind y User (). create Proof From Ledger Data ( ind y Proof Request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow Session . send ( proof ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġobject Ġ: ĠSign Transaction Flow ( flow Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAdd Ġsome Ġchecks Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Transaction ( st x : ĠSigned Transaction ) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Flow ( flow ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ("", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFlow Exception ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ