# Wallet VC Storage ## `CredentialResponse` DWeb Message ```json= { "descriptor": { "target": "did:key:z6MkpBmJNwPU7vubZWa9YBZU3EjW5SVnGhhjCJQFMYBW4V2E", "recipient": "did:key:z6MkpWqpHZdJavfxmvY1rTZD87uxYeMhXWLRWUKmyEycSkP6", "method": "CollectionsWrite", "protocol": "https://identity.foundation/decentralized-web-node/protocols/credential-issuance", "contextId": "ee2c39ef-bd4e-43a1-86ee-233ba6468dfc", "schema": "https://identity.foundation/credential-manifest/schemas/credential-response", "recordId": "cd8beacb-9bcc-405d-9d6d-b36c4f5b7333", "parentId": "59af0ca5-aa32-4a30-8f37-f25aef7c7f7b", "dataCid": "bafybeieryaey3yclgoselp26q6s4mqgkm7kuybdoeq5qsew5wikaimogmq", "dateCreated": 1666387234799, "dataFormat": "application/json" }, "authorization": { "payload": "eyJkZXNjcmlwdG9yQ2lkIjoiYmFmeXJlaWR1YWM1dzQ1bWM0aXFoNGQ2amxjb2lxNWRiZmJ5Z2RzeHNkZTNlZ2lrdHRlcmI3M3luc2EifQ", "signatures": [ { "protected": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa3BCbUpOd1BVN3Z1YlpXYTlZQlpVM0VqVzVTVm5HaGhqQ0pRRk1ZQlc0VjJFI3o2TWtwQm1KTndQVTd2dWJaV2E5WUJaVTNFalc1U1ZuR2hoakNKUUZNWUJXNFYyRSJ9", "signature": "4wkSkZCpvm6KYFYqYftnmypxD2aAC6jRfgRSdhZOKYSzfYkFq17t7Un1_573LVZQ7w9TpGQ3rL3XE_RpLwDeDQ" } ] }, "encodedData": "eyJjcmVkZW50aWFsX3Jlc3BvbnNlIjp7ImlkIjoiOTE0ZTliZGMtMDJhMS00MTNhLTk1ZTItYjU5Zjc3MTc2ZTJlIiwic3BlY192ZXJzaW9uIjoiaHR0cHM6Ly9pZGVudGl0eS5mb3VuZGF0aW9uL2NyZWRlbnRpYWwtbWFuaWZlc3Qvc3BlYy92MS4wLjAvIiwibWFuaWZlc3RfaWQiOiJiY2MzNTg5NC0wZDMwLTQxMTgtOWY4Yi1lYzI3NzhmOTg4NjAiLCJhcHBsaWNhdGlvbl9pZCI6ImlkMTIzIiwiZnVsZmlsbG1lbnQiOnsiZGVzY3JpcHRvcl9tYXAiOlt7ImlkIjoiYzdlNGNiMTMtMzc3OC00NGEwLWE1ZGMtMjY5MzE3ZDkwZWJhIiwiZm9ybWF0Ijoiand0X3ZjIiwicGF0aCI6IiQudmVyaWZpYWJsZUNyZWRlbnRpYWxzWzBdIn1dfX0sInZlcmlmaWFibGVDcmVkZW50aWFscyI6WyJleUpoYkdjaU9pSkZaRVJUUVNJc0ltdHBaQ0k2SW1ScFpEcHJaWGs2ZWpaTmEzZE1VMmwwTkhWVE9IVlRSMFJDT1RGdE5tTmliMkpqWkV4RU5HbHRibVU0YmtadmFWQnBWVFJ1ZW10eElpd2lkSGx3SWpvaVNsZFVJbjAuZXlKcGMzTWlPaUprYVdRNmEyVjVPbm8yVFd0M1RGTnBkRFIxVXpoMVUwZEVRamt4YlRaalltOWlZMlJNUkRScGJXNWxPRzVHYjJsUWFWVTBibnByY1NJc0ltcDBhU0k2SW1NM1pUUmpZakV6TFRNM056Z3RORFJoTUMxaE5XUmpMVEkyT1RNeE4yUTVNR1ZpWVNJc0ltNWlaaUk2TVRZMk5qTTROekl6TkN3aWMzVmlJam9pWkdsa09tdGxlVHA2TmsxcmRUZzNZMVZTVWxaVE5HUnhiamh5WlhaQ04yUk5ka1pOWkdaTWEzaDZjVkV5T1dobVkxRjZPV1J1T0ZjaUxDSjJZeUk2ZXlKQVkyOXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3ZNakF4T0M5amNtVmtaVzUwYVdGc2N5OTJNU0pkTENKcFpDSTZJbU0zWlRSallqRXpMVE0zTnpndE5EUmhNQzFoTldSakxUSTJPVE14TjJRNU1HVmlZU0lzSW5SNWNHVWlPbHNpVm1WeWFXWnBZV0pzWlVOeVpXUmxiblJwWVd3aVhTd2lhWE56ZFdWeUlqb2laR2xrT210bGVUcDZOazFyZDB4VGFYUTBkVk00ZFZOSFJFSTVNVzAyWTJKdlltTmtURVEwYVcxdVpUaHVSbTlwVUdsVk5HNTZhM0VpTENKcGMzTjFZVzVqWlVSaGRHVWlPaUl5TURJeUxURXdMVEl4VkRJeE9qSXdPak0wV2lJc0ltTnlaV1JsYm5ScFlXeFRkV0pxWldOMElqcDdJbWxrSWpvaVpHbGtPbXRsZVRwNk5rMXJkVGczWTFWU1VsWlROR1J4YmpoeVpYWkNOMlJOZGtaTlpHWk1hM2g2Y1ZFeU9XaG1ZMUY2T1dSdU9GY2lmU3dpWTNKbFpHVnVkR2xoYkZOamFHVnRZU0k2ZXlKcFpDSTZJamxqTnpJek1EQXdMVGN3T0RrdE5EaGpZUzA0TkdRMExUSXlZV1pqWmpRd09XRmlNQ0lzSW5SNWNHVWlPaUpLYzI5dVUyTm9aVzFoVm1Gc2FXUmhkRzl5TWpBeE9DSjlmWDAuWkVqb19KSnZyNmotUU9fSjB1NEJWT2VGV0gxSmJhSmpGVVJRQmJ1Wll1b3R2OU8xVTFsWG5lcDNnNktNbVVPT1RFUzZuSElEeVotZC1PdVBTaFZWQ2ciXSwicmVzcG9uc2VKd3QiOiJleUpoYkdjaU9pSkZaRVJUUVNJc0ltdHBaQ0k2SW1ScFpEcHJaWGs2ZWpaTmEzZE1VMmwwTkhWVE9IVlRSMFJDT1RGdE5tTmliMkpqWkV4RU5HbHRibVU0YmtadmFWQnBWVFJ1ZW10eElpd2lkSGx3SWpvaVNsZFVJbjAuZXlKaGJHY2lPaUpGWkVSVFFTSXNJbU55WldSbGJuUnBZV3hmY21WemNHOXVjMlVpT25zaVlYQndiR2xqWVhScGIyNWZhV1FpT2lKcFpERXlNeUlzSW1aMWJHWnBiR3h0Wlc1MElqcDdJbVJsYzJOeWFYQjBiM0pmYldGd0lqcGJleUptYjNKdFlYUWlPaUpxZDNSZmRtTWlMQ0pwWkNJNkltTTNaVFJqWWpFekxUTTNOemd0TkRSaE1DMWhOV1JqTFRJMk9UTXhOMlE1TUdWaVlTSXNJbkJoZEdnaU9pSWtMblpsY21sbWFXRmliR1ZEY21Wa1pXNTBhV0ZzYzFzd1hTSjlYWDBzSW1sa0lqb2lPVEUwWlRsaVpHTXRNREpoTVMwME1UTmhMVGsxWlRJdFlqVTVaamMzTVRjMlpUSmxJaXdpYldGdWFXWmxjM1JmYVdRaU9pSmlZMk16TlRnNU5DMHdaRE13TFRReE1UZ3RPV1k0WWkxbFl6STNOemhtT1RnNE5qQWlMQ0p6Y0dWalgzWmxjbk5wYjI0aU9pSm9kSFJ3Y3pvdkwybGtaVzUwYVhSNUxtWnZkVzVrWVhScGIyNHZZM0psWkdWdWRHbGhiQzF0WVc1cFptVnpkQzl6Y0dWakwzWXhMakF1TUM4aWZTd2lhV0YwSWpveE5qWTJNemczTWpNMExDSnBjM01pT2lKa2FXUTZhMlY1T25vMlRXdDNURk5wZERSMVV6aDFVMGRFUWpreGJUWmpZbTlpWTJSTVJEUnBiVzVsT0c1R2IybFFhVlUwYm5wcmNTSXNJbXRwWkNJNkltUnBaRHByWlhrNmVqWk5hM2RNVTJsME5IVlRPSFZUUjBSQ09URnRObU5pYjJKalpFeEVOR2x0Ym1VNGJrWnZhVkJwVlRSdWVtdHhJaXdpZG1WeWFXWnBZV0pzWlVOeVpXUmxiblJwWVd4eklqcGJJbVY1U21oaVIyTnBUMmxLUmxwRlVsUlJVMGx6U1cxMGNGcERTVFpKYlZKd1drUndjbHBZYXpabGFscE9ZVE5rVFZVeWJEQk9TRlpVVDBoV1ZGSXdVa05QVkVaMFRtMU9hV0l5U21wYVJYaEZUa2RzZEdKdFZUUmlhMXAyWVZaQ2NGWlVVblZsYlhSNFNXbDNhV1JJYkhkSmFtOXBVMnhrVlVsdU1DNWxlVXB3WXpOTmFVOXBTbXRoVjFFMllUSldOVTl1YnpKVVYzUXpWRVpPY0dSRVVqRlZlbWd4VlRCa1JWRnFhM2hpVkZwcVdXMDVhVmt5VWsxU1JGSndZbGMxYkU5SE5VZGlNbXhSWVZaVk1HSnVjSEpqVTBselNXMXdNR0ZUU1RaSmJVMHpXbFJTYWxscVJYcE1WRTB6VG5wbmRFNUVVbWhOUXpGb1RsZFNha3hVU1RKUFZFMTRUakpSTlUxSFZtbFpVMGx6U1cwMWFWcHBTVFpOVkZreVRtcE5ORTU2U1hwT1EzZHBZek5XYVVscWIybGFSMnhyVDIxMGJHVlVjRFpPYXpGeVpGUm5NMWt4VmxOVmJGcFVUa2RTZUdKcWFIbGFXRnBEVGpKU1RtUnJXazVhUjFwTllUTm9ObU5XUlhsUFYyaHRXVEZHTms5WFVuVlBSbU5wVEVOS01sbDVTVFpsZVVwQldUSTVkV1JIVmpSa1EwazJWM2xLYjJSSVVuZGplbTkyVEROa00yUjVOVE5OZVRWMlkyMWpkazFxUVhoUFF6bHFZMjFXYTFwWE5UQmhWMFp6WTNrNU1rMVRTbVJNUTBwd1drTkpOa2x0VFROYVZGSnFXV3BGZWt4VVRUTk9lbWQwVGtSU2FFMURNV2hPVjFKcVRGUkpNazlVVFhoT01sRTFUVWRXYVZsVFNYTkpibEkxWTBkVmFVOXNjMmxXYlZaNVlWZGFjRmxYU25OYVZVNTVXbGRTYkdKdVVuQlpWM2RwV0ZOM2FXRllUbnBrVjFaNVNXcHZhVnBIYkd0UGJYUnNaVlJ3Tms1ck1YSmtNSGhVWVZoUk1HUldUVFJrVms1SVVrVkpOVTFYTURKWk1rcDJXVzFPYTFSRlVUQmhWekYxV2xSb2RWSnRPWEJWUjJ4V1RrYzFObUV6UldsTVEwcHdZek5PTVZsWE5XcGFWVkpvWkVkVmFVOXBTWGxOUkVsNVRGUkZkMHhVU1hoV1JFbDRUMnBKZDA5cVRUQlhhVWx6U1cxT2VWcFhVbXhpYmxKd1dWZDRWR1JYU25GYVYwNHdTV3B3TjBsdGJHdEphbTlwV2tkc2EwOXRkR3hsVkhBMlRtc3hjbVJVWnpOWk1WWlRWV3hhVkU1SFVuaGlhbWg1V2xoYVEwNHlVazVrYTFwT1drZGFUV0V6YURaalZrVjVUMWRvYlZreFJqWlBWMUoxVDBaamFXWlRkMmxaTTBwc1drZFdkV1JIYkdoaVJrNXFZVWRXZEZsVFNUWmxlVXB3V2tOSk5rbHFiR3BPZWtsNlRVUkJkMHhVWTNkUFJHdDBUa1JvYWxsVE1EUk9SMUV3VEZSSmVWbFhXbXBhYWxGM1QxZEdhVTFEU1hOSmJsSTFZMGRWYVU5cFNrdGpNamwxVlRKT2IxcFhNV2hXYlVaellWZFNhR1JIT1hsTmFrRjRUME5LT1daWU1DNWFSV3B2WDBwS2RuSTJhaTFSVDE5S01IVTBRbFpQWlVaWFNERktZbUZLYWtaVlVsRkNZblZhV1hWdmRIWTVUekZWTVd4WWJtVndNMmMyUzAxdFZVOVBWRVZUTm01SVNVUjVXaTFrTFU5MVVGTm9WbFpEWnlKZGZRLlgzdXFmbms1MW51S2oxRW9kWURyUEJMdl8xbXpNanlLUC16VkdYejlLU3JENzFkdmwtX1dDWjZEa0I3R1laVWtvdHN2UkRvNVprMjY0LTA2em9HUUFnIn0" } ``` ## Decoded Data ```json= { "credential_response": { "id": "914e9bdc-02a1-413a-95e2-b59f77176e2e", "spec_version": "https://identity.foundation/credential-manifest/spec/v1.0.0/", "manifest_id": "bcc35894-0d30-4118-9f8b-ec2778f98860", "application_id": "id123", "fulfillment": { "descriptor_map": [ { "id": "c7e4cb13-3778-44a0-a5dc-269317d90eba", "format": "jwt_vc", "path": "$.verifiableCredentials[0]" } ] } }, "verifiableCredentials": [ "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa3dMU2l0NHVTOHVTR0RCOTFtNmNib2JjZExENGltbmU4bkZvaVBpVTRuemtxIiwidHlwIjoiSldUIn0.eyJpc3MiOiJkaWQ6a2V5Ono2TWt3TFNpdDR1Uzh1U0dEQjkxbTZjYm9iY2RMRDRpbW5lOG5Gb2lQaVU0bnprcSIsImp0aSI6ImM3ZTRjYjEzLTM3NzgtNDRhMC1hNWRjLTI2OTMxN2Q5MGViYSIsIm5iZiI6MTY2NjM4NzIzNCwic3ViIjoiZGlkOmtleTp6Nk1rdTg3Y1VSUlZTNGRxbjhyZXZCN2RNdkZNZGZMa3h6cVEyOWhmY1F6OWRuOFciLCJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJpZCI6ImM3ZTRjYjEzLTM3NzgtNDRhMC1hNWRjLTI2OTMxN2Q5MGViYSIsInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiXSwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rd0xTaXQ0dVM4dVNHREI5MW02Y2JvYmNkTEQ0aW1uZThuRm9pUGlVNG56a3EiLCJpc3N1YW5jZURhdGUiOiIyMDIyLTEwLTIxVDIxOjIwOjM0WiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rdTg3Y1VSUlZTNGRxbjhyZXZCN2RNdkZNZGZMa3h6cVEyOWhmY1F6OWRuOFcifSwiY3JlZGVudGlhbFNjaGVtYSI6eyJpZCI6IjljNzIzMDAwLTcwODktNDhjYS04NGQ0LTIyYWZjZjQwOWFiMCIsInR5cGUiOiJKc29uU2NoZW1hVmFsaWRhdG9yMjAxOCJ9fX0.ZEjo_JJvr6j-QO_J0u4BVOeFWH1JbaJjFURQBbuZYuotv9O1U1lXnep3g6KMmUOOTES6nHIDyZ-d-OuPShVVCg" ], "responseJwt": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa3dMU2l0NHVTOHVTR0RCOTFtNmNib2JjZExENGltbmU4bkZvaVBpVTRuemtxIiwidHlwIjoiSldUIn0.eyJhbGciOiJFZERTQSIsImNyZWRlbnRpYWxfcmVzcG9uc2UiOnsiYXBwbGljYXRpb25faWQiOiJpZDEyMyIsImZ1bGZpbGxtZW50Ijp7ImRlc2NyaXB0b3JfbWFwIjpbeyJmb3JtYXQiOiJqd3RfdmMiLCJpZCI6ImM3ZTRjYjEzLTM3NzgtNDRhMC1hNWRjLTI2OTMxN2Q5MGViYSIsInBhdGgiOiIkLnZlcmlmaWFibGVDcmVkZW50aWFsc1swXSJ9XX0sImlkIjoiOTE0ZTliZGMtMDJhMS00MTNhLTk1ZTItYjU5Zjc3MTc2ZTJlIiwibWFuaWZlc3RfaWQiOiJiY2MzNTg5NC0wZDMwLTQxMTgtOWY4Yi1lYzI3NzhmOTg4NjAiLCJzcGVjX3ZlcnNpb24iOiJodHRwczovL2lkZW50aXR5LmZvdW5kYXRpb24vY3JlZGVudGlhbC1tYW5pZmVzdC9zcGVjL3YxLjAuMC8ifSwiaWF0IjoxNjY2Mzg3MjM0LCJpc3MiOiJkaWQ6a2V5Ono2TWt3TFNpdDR1Uzh1U0dEQjkxbTZjYm9iY2RMRDRpbW5lOG5Gb2lQaVU0bnprcSIsImtpZCI6ImRpZDprZXk6ejZNa3dMU2l0NHVTOHVTR0RCOTFtNmNib2JjZExENGltbmU4bkZvaVBpVTRuemtxIiwidmVyaWZpYWJsZUNyZWRlbnRpYWxzIjpbImV5SmhiR2NpT2lKRlpFUlRRU0lzSW10cFpDSTZJbVJwWkRwclpYazZlalpOYTNkTVUybDBOSFZUT0hWVFIwUkNPVEZ0Tm1OaWIySmpaRXhFTkdsdGJtVTRia1p2YVZCcFZUUnVlbXR4SWl3aWRIbHdJam9pU2xkVUluMC5leUpwYzNNaU9pSmthV1E2YTJWNU9ubzJUV3QzVEZOcGREUjFVemgxVTBkRVFqa3hiVFpqWW05aVkyUk1SRFJwYlc1bE9HNUdiMmxRYVZVMGJucHJjU0lzSW1wMGFTSTZJbU0zWlRSallqRXpMVE0zTnpndE5EUmhNQzFoTldSakxUSTJPVE14TjJRNU1HVmlZU0lzSW01aVppSTZNVFkyTmpNNE56SXpOQ3dpYzNWaUlqb2laR2xrT210bGVUcDZOazFyZFRnM1kxVlNVbFpUTkdSeGJqaHlaWFpDTjJSTmRrWk5aR1pNYTNoNmNWRXlPV2htWTFGNk9XUnVPRmNpTENKMll5STZleUpBWTI5dWRHVjRkQ0k2V3lKb2RIUndjem92TDNkM2R5NTNNeTV2Y21jdk1qQXhPQzlqY21Wa1pXNTBhV0ZzY3k5Mk1TSmRMQ0pwWkNJNkltTTNaVFJqWWpFekxUTTNOemd0TkRSaE1DMWhOV1JqTFRJMk9UTXhOMlE1TUdWaVlTSXNJblI1Y0dVaU9sc2lWbVZ5YVdacFlXSnNaVU55WldSbGJuUnBZV3dpWFN3aWFYTnpkV1Z5SWpvaVpHbGtPbXRsZVRwNk5rMXJkMHhUYVhRMGRWTTRkVk5IUkVJNU1XMDJZMkp2WW1Oa1RFUTBhVzF1WlRodVJtOXBVR2xWTkc1NmEzRWlMQ0pwYzNOMVlXNWpaVVJoZEdVaU9pSXlNREl5TFRFd0xUSXhWREl4T2pJd09qTTBXaUlzSW1OeVpXUmxiblJwWVd4VGRXSnFaV04wSWpwN0ltbGtJam9pWkdsa09tdGxlVHA2TmsxcmRUZzNZMVZTVWxaVE5HUnhiamh5WlhaQ04yUk5ka1pOWkdaTWEzaDZjVkV5T1dobVkxRjZPV1J1T0ZjaWZTd2lZM0psWkdWdWRHbGhiRk5qYUdWdFlTSTZleUpwWkNJNklqbGpOekl6TURBd0xUY3dPRGt0TkRoallTMDROR1EwTFRJeVlXWmpaalF3T1dGaU1DSXNJblI1Y0dVaU9pSktjMjl1VTJOb1pXMWhWbUZzYVdSaGRHOXlNakF4T0NKOWZYMC5aRWpvX0pKdnI2ai1RT19KMHU0QlZPZUZXSDFKYmFKakZVUlFCYnVaWXVvdHY5TzFVMWxYbmVwM2c2S01tVU9PVEVTNm5ISUR5Wi1kLU91UFNoVlZDZyJdfQ.X3uqfnk51nuKj1EodYDrPBLv_1mzMjyKP-zVGXz9KSrD71dvl-_WCZ6DkB7GYZUkotsvRDo5Zk264-06zoGQAg" } ``` ## Decoded Verifiable Credential ### Header ```json= { "alg": "EdDSA", "kid": "did:key:z6MkwLSit4uS8uSGDB91m6cbobcdLD4imne8nFoiPiU4nzkq", "typ": "JWT" } ``` ### Payload ```json= { "iss": "did:key:z6MkwLSit4uS8uSGDB91m6cbobcdLD4imne8nFoiPiU4nzkq", "jti": "c7e4cb13-3778-44a0-a5dc-269317d90eba", "nbf": 1666387234, "sub": "did:key:z6Mku87cURRVS4dqn8revB7dMvFMdfLkxzqQ29hfcQz9dn8W", "vc": { "@context": [ "https://www.w3.org/2018/credentials/v1" ], "id": "c7e4cb13-3778-44a0-a5dc-269317d90eba", "type": [ "VerifiableCredential" ], "issuer": "did:key:z6MkwLSit4uS8uSGDB91m6cbobcdLD4imne8nFoiPiU4nzkq", "issuanceDate": "2022-10-21T21:20:34Z", "credentialSubject": { "id": "did:key:z6Mku87cURRVS4dqn8revB7dMvFMdfLkxzqQ29hfcQz9dn8W" }, "credentialSchema": { "id": "9c723000-7089-48ca-84d4-22afcf409ab0", "type": "JsonSchemaValidator2018" } } } ``` ## DWN Storage Context ```mermaid stateDiagram-v2 state "Credential Application" as CA state "Credential Response" as CR state "Verifiable Credential" as VC1 state "Verifiable Credential" as VC2 state "Verifiable Credential" as VC3 CA --> CR CR --> VC1 CR --> VC2 CR --> VC3 ``` ## TODO * Add DWN SDK to Janky Wallet * figure out * add method to query for all creds * add metho ## `window.web5.vc.apply` - webpage calls `window.web5.vc.renderApplication(url || credManifest)` - (BG) if URL, fetch cred manifest - return exception if cred manifest could not be fetched - (BG) parse/validate cred manifest - return exception if cred manifest is invalid - (BG) query DWN for all creds - (BG) trigger popup window - (POPUP) render options - (POPUP) await human verification - (?) prepare credential application - (BG) store credential application - (?) send credential application to Issuer DWN - (?) wait for response - (?) parse `CredentialResponse` - (?) store `CredentialResponse` - (?) for each VC in `CredentialResponse` - `DWM'ify` VC and store Author and recipient are **not** bound to the signer and target of the authorization