This is a large task to implement Overlays Capture Architecture (OCA) in the wallet that will take some coordination and breaking down into smaller chunks. Putting this out here to get the thinking started. The user stories are:
As a wallet user I want to be able to see a beautiful presentation of the credentials in my wallet in the language of my choice so I can understand what the credential is for and how I should use it.
As a Schema Publisher or Issuer I want to be able to define details (attribute labels, help text, etc.) about how a wallet should present a credential to users so that my intentions for the use of the credential is understood by the user.
The long term (a few months, I hope) is outlined in this presentation about OCA and AnonCreds verifiable credentials -- a general purpose approach to using OCA for any verifiable credential issued to a holder using BC Wallet. This issue assumes the goals and approach from that presentation are understood. Although we won't be implementing all that is outlined in the presentation in the first cut, the Wallet work should be done with idea of being able to be extended when the additional components are implemented.
This issue focuses on the Wallet part of the solution. In particular:
The wallet receives a verifiable credential from an issuer.
The wallet finds an OCA Bundle related to either the SchemaId or CredDefId (Issuer) of the verifiable credential
The wallet loads the OCA Bundle, verifies it and relates it to the VC
When displaying the VC, some elements of the OCA Bundle should be used to improve the presentation.
The following are things to consider in starting this work:
In the first cut, we will only have a couple of OCA Bundles for specific VC types, and we expect to either load them into the wallet app itself, or to be loaded dynamically from a "well-known" place. However, we would like the interface to "retrieve the OCA Bundle" to mimic the long term goal --- given an issued credential, request the OCA Bundle (parameters -- SchemaID, CredDefID), and have an implementation of the retrieval mechanism that mocks the intended query mechanism.
The first credentials that we will implement will be the Pan-Canadian "Person" schema, and credentials issued by the issuers of credentials of that type -- BC, Ontario and Quebec.
Verification of the OCA Bundle is supposed to include that the OCA Bundle be signed by the Schema Publisher (if related to the SchemaID), or by the Issuer (if related to the CredDef). For this first implementation, that signature may not be present (but great if it is!) and if not, verification of the signature can be skipped. The verification should also include that the Capture Base attributes match those of the AnonCreds Schema. That should be enforced.
The Quebec team has worked on an Aries Bifold Proof of Concept implementation of using an OCA Bundle in presenting a credential. Please work with that team (contacts available) to access the code and use it where it makes sense. Let's not start from scratch if we don't have to.
As the design of the capability comes together, decide where to put the various pieces -- AFJ, AFJ-Ext(??), Bifold. This is a feature that can be used by all implementations, so the higher the implementation in the stack, the better (within reason, of course). This is definitely not a BC-only feature!
Share the design/approach/code with the community to get feedback and collaborators. Please use the collaboration meetings (Aries Bifold, Aries, ACA-Pug) to share the work as it progresses.
We may need not implement all the features of an OCA Bundle from the start. Just having multi-lingual labels would be a great start -- bonus if we also have help text about each attribute. We can add more overlays over time.
Happy to discuss your ideas in getting this going. I'm sure I've missed things or there are mistakes in what I've proposed above. It should not be consider gospel!
This is a large task to implement Overlays Capture Architecture (OCA) in the wallet that will take some coordination and breaking down into smaller chunks. Putting this out here to get the thinking started. The user stories are:
The long term (a few months, I hope) is outlined in this presentation about OCA and AnonCreds verifiable credentials -- a general purpose approach to using OCA for any verifiable credential issued to a holder using BC Wallet. This issue assumes the goals and approach from that presentation are understood. Although we won't be implementing all that is outlined in the presentation in the first cut, the Wallet work should be done with idea of being able to be extended when the additional components are implemented.
This issue focuses on the Wallet part of the solution. In particular:
The following are things to consider in starting this work:
Happy to discuss your ideas in getting this going. I'm sure I've missed things or there are mistakes in what I've proposed above. It should not be consider gospel!