indy-sdk tutorials数字身份认证(二)

三、在ledger保存schema和credential定义
0、
0.1 作为设置,Steward(已在分类帐中)将Trust Anchor添加到分类帐。
0.2 Steward构建SCHEMA请求以将新schema添加到分类帐。
一旦成功,Trust Anchor将使用匿名凭据为Steward添加的schema发布和存储定义。
1-8、 同(一)1-8
我们需要为SDK提供一些处理indy分类帐所需的上下文。 这要求我们将SDK指向一些创世纪交易,告诉SDK如何联系网络上的分类账,以及如何相信它所联系的节点拥有适当的密钥。 我们还需要创建一个钱包,以便SDK可以存储DID以及我们将要使用的密钥材料。 此外,我们需要创建一个信任锚标识,该标识具有创建模式和凭证定义的权限。
9、现在我们需要创建和定义一个模式schema。 indy中的模式是非常简单的JSON文档,它们指定了它们的名称和版本,并列出了将出现在凭证credential中的属性。 今天,它们没有描述数据类型,重复规则,嵌套和其他复杂的结构。
构建SCHEMA请求以将新模式作为Steward添加到分类帐

*Schema data*: 
{'attrNames': ['age', 'sex', 'height', 'name'],
 'id': '1',
 'name': 'gvt',
 'ver': '1.0',
 'version': '1.0'}
*Schema*: 
{'data': {'attrNames': ['age', 'sex', 'height', 'name'],
          'id': '1',
          'name': 'gvt',
          'ver': '1.0',
          'version': '1.0'},
 'dest': '$(Steward DID)',
 'seqNo': 1}
*Schema request*: 
{'identifier': '$(Steward DID)',
 'operation': {'data': {'attr_names': ['height', 'sex', 'age', 'name'],
                        'name': 'gvt',
                        'version': '1.0'},
               'type': '101'},
 'protocolVersion': 2,
 'reqId': 1547705470104372004}

10、将SCHEMA请求发送到分类帐

*Schema response*:
{'op': 'REPLY',
 'result': {'auditPath': ['3cQgnDAZFZLbzxrAxQLeBXDnczLBoXQebYXq6QBUY69X',
                          '3i3FMwaYKSTDRRn4M3cKZPrXQRm8XyQ9G2NcHYLTKBRm',
                          'AcctzGMWr4TrdWtcAfdr2h8NsxCepyg99k5yxkScG9F7'],
            'reqSignature': {'type': 'ED25519',
                             'values': [{'from': '$(Steward DID)',
                                         'value': 'FEPpzMFxhGLW9mzZRU1mm9DWrao5wpVEiorzVgFQh1scNHwUjfwYMFGM8sy1TpKbtM6Eymgy2ZoPd6nHEcAaAXZ'}]},
            'rootHash': 'EKLGW5YWYyW8swwEeWFkV6F9n5qXY8JNnRKkTVEEfBMJ',
            'txn': {'data': {'data': {'attr_names': ['height',
                                                     'sex',
                                                     'age',
                                                     'name'],
                                      'name': 'gvt',
                                      'version': '1.0'}},
                    'metadata': {'digest': '25929fb2becde460a365c91628c6e38e3860c4f8f333155c71d9273dfd02cf6a',
                                 'from': '$(Steward DID)',
                                 'reqId': 1547705470104372004},
                    'protocolVersion': 2,
                    'type': '101'},
            'txnMetadata': {'seqNo': 20,
                            'txnId': '$(Steward DID):2:gvt:1.0',
                            'txnTime': 1547705471},
            'ver': '1'}}

11、接下来,我们创建一个credential定义。 这引用了我们刚刚添加的模式,并宣布了谁将要发布具有该模式的凭证(在本例中为我们的信任锚标识),他们计划使用什么类型的签名方法(“CL”=“Camenisch Lysyanskya” ,indy用于零知识证明的默认方法,它们如何计划处理撤销,等等。

使用anoncred作为信任锚来创建和存储CRED DEFINITION,用于给定的Schema。

{'id': '$(Trust anchor DID):3:CL:1:cred_def_tag',
 'schemaId': '1',
 'tag': 'cred_def_tag',
 'type': 'CL',
 'value': {'primary': {'n': '79310241650606152057559266926426261928114154483729036050683313574784409652062025066806824090336602018198711458673561374866126168113782161660827876929700609615492509494876453689438261351281389802293215359821400251276211430779291227627994495974176691504996406687103068262168023475540877612192742089721371452241600965881325014795325558615520468904965111281665951836545184291668236073931490091706635763405289073198182463427370186634243288947077422339913068813410137392327375365792229119826406458480292427029641267299661485841793804068585892577723574727563611096133521736575509265259370186593052350456839301604021613675297',
                       'r': {'age': '36746685679029309158070213227365346158206758313153238043517394594716925962884028095946576783302110004006262457811100648321284300367745111735936074879893109481947203507966179402968806874180222793662433353018144021579368311635063724438449816757693821317607938907088355832151065216547810093650020405162665856112769656744917799588585406170700307587592916558916819674058407630313739495716920897012030885596364172643256810380741361675834173405966451053253184994047969773198313683343779041653925601450924631090990833313414892175351225827081625121303587765808824141755666938408241183372392246114835966424715382136203812732951',
                             'height': '69372565822986746182751086591783373183164900433566353067843213027483731280672832487932364755231557207564864172050216810484713584126852133136520411437358196685864375269958886972109251761463067800541524405961926351489089673500130556954587076889772002517686012751826213307274208771841861469012222340287482463667249297658880242869749773444198344857983495247353087172442000475163796037478685872043964474731139079745903045467952226632881286765977280197507249895446762031468835161271821535017220325538726753307195644604562553799995832689240456866321846885541579863357182399783260476611232880587936509140300603504068611966896',
                             'master_secret': '23552872724495065310821725693036468826542686349934588140823723467719742873671984965999080804724219321687637797641574862962706318812601145446324405018887576975927577355513609083014232581104969010816095504522019145698436124549444108440177319413665156338998910852607008000008166995695740891148609517434252691226079900360768453057905077114344805752746036103509594199789090795815508994568406524531589634496879787117442893044710902869968210579314994283724211651237635299945169757413052552978452342595508235870957707166666794213961527673744915290436407330284213764793376582965103439005857107843767331359299060498820582772099',
                             'name': '65687266652641137472419078064964358874116480328070600811894886006114380600859659692356821486584848885968619038738838260996001652799332581187647527573877396924251805747132754110293277875387629977805316312239236093868187695304421756825299975678217101025151511254323905398589127663438661396421665270990808368447876116639591114086667180589922950385658746018428937267616242214968513540362188725355365814337546261681400786320380818540219486968117798290710457859159974432119313556199327153566495815699393337803075684166557313325179449772349644417891532655171101739568231542811708912104530772648949257318347071629491695305492',
                             'sex': '73299004155691877455450384704963860852065594653902958993009225675580808087404182729894913349757417158196882196411058525729383479353041304222074525052136084760308470481285893859265832449754499618623197027355540861609680847251343538743429153112405318944304167297901354724937936922988032341230375061117109752148292304394563549888690139991920739418508568254559810136966659195553507777598945761907402140779595312343793730297982605129570910802105334988893727325105223672843810654749338669890018882560540004703875319776109498022743671721450025428061836304680780576118642551933251589462594277144211073445112763321081582959352'},
                       'rctxt': '32209450973421621802510556184283437345036327028204004585485818710797654642665993585997551304367513935506273976685143946321388312530719519667672885384322724558469573855561142139405421800967392709812044833994699127954666767248295735350426145795787793765992520155213088821587893423169082004077379630678794966059508080859761930282829285376738042990805234441511380196318847441592363309756271314348658888224630908442589123774499477023724827894730419317290621237948892067293552277615875287893526464520343363548291592237225225542190989117971584470425002280523205012272742232486918617095370360266016258855693014161932981736902',
                       's': '5162172743011484140304796702025798829951905633394271253752932041692661898605453671270199922755756471483841394066610134858679535743920252260358649739699410747470398763225241169579021346206511299079336636818071201688608006460020490139985742558255052867238154246593802532935395373782420188334982577206561327827421517041306891272217508068952047861606680769972515834285429705270629924227296316994366133544077353950389961309681373743844378919329509389034941401042540043446305455558159176658035456154564363825671818291066039265218332165593048169778708601822012210640654436277827537783459686955414023232780288572584407280463',
                       'z': '9244275509447139953557167001393607943672873727041561492933461101967674169860363369206651857331077526065763512784373571699066997762771868359532794426221736423211669264026223398601375084575837850116372514324912303606976403335621847067800172875268413711143135758289736582088711651690114067613311848689459514142248879502867078706315024828733437518565828525457802179118694989421683452155763308830963849582883606828502955628562071692031963290370149778281662240411207159514910168496658103755169514106259543097207273418491389091698652586417187169350197218630971369387453880209107217264074918033137524484511549698031477232354'}},

四、发行凭证
显示如何将凭证作为信任锚发布,该信任锚已为现有架构创建了信用定义。
在Trust Anchor使用匿名凭据成功创建并存储Cred定义之后,
Prover的钱包已创建并打开,用于生成Prover的主密钥。
之后,Trust Anchor为给定的Cred定义生成Credential Offer,使用Prover的DID Prover使用Credential Offer创建Credential Request
然后,Trust Anchor使用Prover的凭证请求来颁发凭证。
最后,Prover将Credential存放在钱包里。
1-11 同(三)1-11
10、
```
Schema response:
{‘identifier’: ‘Th7MpTaRZVRYnPiabds81Y’,
‘op’: ‘REJECT’,
‘reason’: 'client request invalid: ’
“InvalidClientRequest(‘Th7MpTaRZVRYnPiabds81Y can have one and only "
"one SCHEMA with name gvt and version 1.0’,)”,
‘reqId’: 1547718461791291005}

12、到目前为止,我们已经创建了一个可用于颁发凭据的标识。 现在,我们需要另一个可用于在颁发凭证后保留凭据。
创建Prover钱包并打开它以获取句柄
13、Prover创造Master Secret
14、
[此时,发行者和接收凭证的人(称为持有者)参与导致发行的交互协议。
首先,发行人提供凭证。 这一步是可选的; 我们将它包括在内以保证完整性 接下来,持有者请求凭证,提供将它绑定到它们的盲法链接秘密。 最后,发行人生成凭证并将其交给持有人。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190117150821766.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h0dHAxODgxODg=,size_16,color_FFFFFF,t_70)
这三个步骤体现了在许多indy交互中使用的协商模式(例如,在证明中)。 任何一方都可以开始; 另一方承认并接受 - 或提出反建议。 对于反建议,新的谈判周期开始; 在更简单的情况下,谈判成功结束。 在凭证发行期间可以使用谈判来协商对凭证的更改(例如,纠正错字或要求发行者包括或省略他们最初未提出的数据); 但是,我们不会在此处介绍该高级工作流程。]

发行人 (Trust Anchor) 为 证明人Prover创建 Credential Offer 

Credential Offer:
{‘cred_def_id’: ‘$(Credential definition id)’,
‘key_correctness_proof’: {‘c’: ‘24431823888456419811910928350610176845394020598725999377437960393737022664041’,
‘xr_cap’: [[‘height’,
‘276195973841910508728901955456603312881573985269077860858538813616347634365458784356963620699901359733112855207988329155667145333595577839822500118362184872539947183958978903922380677592084985532616666313894622598225022752140725310109360365487183203582102446438619548995289407996782933016208372858434425114741422883233185535815610952365586523835029543671558998640940361161311269562840211759413823895669554129726414522600786866629494771884999216284061895432156131435920079037524842364475442551362268564536256004223855971161799938691762038715359873200026992649078236584052875859780427472559805095443664142085205839126400141075701140361882662033979049397446638351735693096341219217809516433906650’],
[‘sex’,
‘34186938256071606300502061371191649019141227050349062799437392956533200386139266772880672082054659155893455897810253806788210053765323610216882059636280882019972795411330378999166490901874936500113737593910272741035527655434781105101630254313655138151297238814000818201894740602027923231006185329260138028615203197954581362265658652133652370533802905799935195568059377708732512307953976042111795714279942642004537143907687984441781448109445459330873691453529657214465964926740471989569219780735179373719133530478582392372606790722770884143196460801680941977858430639664537543004192191956477984439943429069790284482046125107630405995234640698649691999138313133657365218612135930657443728465943’],
[‘age’,
‘566179124791556324043697531954414793479764935854907744366169230457328960559321654984168587997547504007714425914514509888147490739049002482210608863955996081317278997759655456004346562056316774343839290844162147416023526251877585973782834301276326532234900997897913278459689845151452334042145989389383745611360680279438184173423074236210823464225035898312229993914580762181111938536269857380288146208550377503147445598613010943481622252584140018911427358016394876359887631522018797847373992399885433653896973813227340573484598962797285023027490365314596488251234411353767566833184893628734419775665330310220217169965981897086780609700443932545221336743582534064518254209201049165282574527925972’],
[‘name’,
‘560775840008164166816313195974835957113802170213947974841473536194218609180539521658929818975377194033151970033666418046827110314737238401671812757767048660507941460474241383978582205153341433035613550335865584014885234776112278738717001448497036496566582867081258440658866558460940798242085356516354609536531485307118519305322151632381729889473943816347691067894303361325329814760617163529541709606915864878307199958007384143672634928848148462574240112874118069916178092128329332749562742470257182937985249404211340796375060783902726843208226129173164040742108302552548513645661226691931834500968181110034004963447759250109635104196805802406227113477902044189593492477386156708273530235246574’],
[‘master_secret’,
‘524107686495845473921200697502678509786834786214155370863481918951024889644429726431577568595672668075497702908155357941809420157174315928144271668440667408110845997070832449960174032002704668417991356400249102367611868683984106167028192071993313982851612566265384339837604697052115656419573995523792387342289307955776937681601389329180687824708807826656639070877987663618801249091542196645875952214191106417544145351931476430621314061680502016838843764300188014413491951982461175290202661315567903553542985087790469929684465032086545484895032215828561131081128373846881183783529128934164454600066568672435981721072567713277692138848900063420348120339758431510440816185061131090365296595730615’]],
‘xz_cap’: ‘332917886562335299274180027866797663930866563821315861323962344914954336058991455317047563634062995343880491233587313456002090231265237933089118966696452571937344952640807169815100161174357623463206528481986365603503184430101587314874170254657699315105055773120494069671085674148725928518518092851424071662321594780694898289872637681329045394408187120583825596271557423718112713112348118383338566386569193248488565332414842968744129696897292109288601901709891980037305791623407188890398991492005638052083494036522689718424800163498154812497711472852839584063561198116881912963879164170559310351170261112249599962454597671682879358093147819195575822136216076807861862047836906419064786995723088’},
‘nonce’: ‘829931018822260014383905’,
‘schema_id’: ‘1’}

15、Prover 创建Credential 请求 对于给定的 credential offer

{‘blinded_ms’: {‘committed_attributes’: {},
‘hidden_attributes’: [‘master_secret’],
‘u’: ‘49757726005964920438614004587438815559784260796471861041864149922134285571587912758994586182925281077394442817336101003366159907579513436159596747370592570405852644061552734465094636433035986059618293660152196190626918992426739023184910225389544232291499923431051594364348927832439838818754505313261654501564905336530561445920359090328774390162747260154035492379445456150551816923672393311207480087863318561956118297878635300963720169136293125417744485315427568324872433121179285315250267025378997985712502672012322031887935916577545028702727795186623629216288524940815760548782616689498710281093854608368475738059136’,
‘ur’: None},
‘blinded_ms_correctness_proof’: {‘c’: ‘105920773147603722457541891994290678201807323900424295651621053656814172767248’,
‘m_caps’: {‘master_secret’: ‘22838231575512296888239941077420199812013520431001144691116478934136370979584709107715517298987612569404935024497108279911508654533689210581657449166363216952714105568258677214721’},
‘r_caps’: {},
‘v_dash_cap’: ‘3510947780743230439744581239107913433669549542117352766909821438583951092291790410549544939252375988049243431371458024421317825531166958338919537825181908853109146118270758511426082413064138983161225012892922385569764465184466493767782991032194492196840528750874447689275542860101865375276800252106817920140998885801214211560348763415255243905267752319957725230577101826434936969411152654865000428703047018816933511360125438428392048042726123669025764799673441968056125179022272148563998778097912422748439839061791089772006820781876662027723885375396128973382260418789205221484306946827848818779866589966506851358122889863105790646524260273085212258306151043859537643642836339498621421317234700623308629120233459520782’},
‘cred_def_id’: ‘$(Credential definition id) 9M5xMzjVmyfxE7RJzvMUN4:3:CL:1:cred_def_tag’,
‘nonce’: ‘232279728588766005645699’,
‘prover_did’: ‘VsKV7grR1BUE29mG2Fm2kX’}

16、Issuer(Trust Anchor)为凭证请求创建凭证

Credential:
{‘cred_def_id’: ‘$(Credential definition id) 9M5xMzjVmyfxE7RJzvMUN4:3:CL:1:cred_def_tag’,
‘rev_reg’: None,
‘rev_reg_id’: None,
‘schema_id’: ‘1’,
‘signature’: {‘p_credential’: {‘a’: ‘56432813301334303356367446855918735504950110701893541152968859931888616221628182270150548477451472339819589552837029554497741416485176251028183205612717976129947731890185049498887184075761108298934396089313254234136874945485801231168805696826144901809334777792908933746791851892984556505821622302837773884375027913742306979433527205940062287034297127509505891658265935314176334566220654117232013714047279110050958397833298592147562395252263214247698389431979513024846233580503638348659579502491668392261123601801792370279724062775140481632837309259588845411748593958524805970342976028143066999721793753351304480476793’,
‘e’: ‘259344723055062059907025491480697571938277889515152306249728583105665800713306759149981690559193987143012367913206299323899696942213235956742929731076337722935263941317431791663759’,
‘m_2’: ‘87933324484247736755432182254530234578539725681347360397600269871642228431291’,
‘v’: ‘6069182766442528844681283096164308836398468942896241866108040862256712934731183656544675612025574144628243600869046957609648426184503877259047845107581270657377522683363722358599552831548681937354871237292237322307951584282674720272554379164995303783557883901445269065875568147941794366562746045237415907659675894469708059612397735719327782255221560105584831150214644641734008092084457772298190637058032674195201411675806463701805267463410825047890183179221133152074295793314628185223010343663521894848630838083858260886952873864896017479251277716332319271664018965869544242334592341593808000432214670095652631539340511011106151679720155857197142821126884990590798223993104921099049915344212167177350467253769879055003551486696149717215249342177820294844128787063816587886039489921247687886180090569266988860236349653194’},
‘r_credential’: None},
‘signature_correctness_proof’: {‘c’: ‘89014097783699979368034669322104775542078992115522677098431352259297036386497’,
‘se’: ‘4095256482706653810024973947215501821939588852368400523959249780612871537856709314182296630828261327291720808975763282605013399988279359029566778367893859470236194742185534207775076936313725104898270572284962482445815012081925412570005182826722273429480854608986932649728698480636312390292467454042593044571702701627501355426417729721974102009643975135178294133434223649284485406172414340361215095977331137475005926474581645300677957068925621582526726632566291654273509634618916333986942961163269401288968982596136550506651715942511784717583730254453391920566790047902591158281461849648114341698249719257705841912447’},
‘values’: {‘age’: {‘encoded’: ‘28’, ‘raw’: ‘28’},
‘height’: {‘encoded’: ‘175’, ‘raw’: ‘175’},
‘name’: {‘encoded’: ‘1139481716457488690172217916278103335’,
‘raw’: ‘Alex’},
‘sex’: {‘encoded’: ‘5944657099558967239210949258394887428692050081607692519917050011144233115103’,
‘raw’: ‘male’}},
‘witness’: None}

17、证明流程并存储凭证
prover_store_credential(prover_wallet_handle, None, $(Credential Request)cred_req_metadata_json, $(Credential), $(Credential definition), None)
18-20、clean up
![保存模式和凭证定义、发行凭证](https://img-blog.csdnimg.cn/20190118095852941.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h0dHAxODgxODg=,size_16,color_FFFFFF,t_70)

你可能感兴趣的:(indy-sdk数字身份认证)