Skip to content

Commit

Permalink
GITBOOK-336: ACAPY Support
Browse files Browse the repository at this point in the history
  • Loading branch information
Tweeddalex authored and gitbook-bot committed Jan 2, 2025
1 parent 2469392 commit 2f7da2c
Show file tree
Hide file tree
Showing 14 changed files with 169 additions and 32 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 8 additions & 1 deletion SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,14 @@
* [Create a new Resource version within existing Collection](sdk/veramo-plugin/did-linked-resources/create-new-version.md)
* [🍏 Credo](sdk/credo.md)
* [🫐 Walt.id SSI Kit](sdk/ssi-kit.md)
* [🍊 ACA-Py](sdk/aca-py.md)
* [🍊 ACA-Py](sdk/aca-py/README.md)
* [Setup ACA-Py Agent](sdk/aca-py/setup-aca-py-agent.md)
* [Decentralized Identifiers (DIDs)](sdk/aca-py/decentralized-identifiers-dids/README.md)
* [Create a DID](sdk/aca-py/decentralized-identifiers-dids/create-a-did.md)
* [Verifiable Credentials and Presentations](sdk/aca-py/verifiable-credentials-and-presentations/README.md)
* [Issue a Verifiable Credential](sdk/aca-py/verifiable-credentials-and-presentations/issue-a-verifiable-credential.md)
* [Present a Verifiable Credential](sdk/aca-py/verifiable-credentials-and-presentations/present-a-verifiable-credential.md)
* [Revoke a Verifiable Credential](sdk/aca-py/verifiable-credentials-and-presentations/revoke-a-verifiable-credential.md)

## 🏗️ Architecture

Expand Down
3 changes: 0 additions & 3 deletions sdk/aca-py.md

This file was deleted.

15 changes: 15 additions & 0 deletions sdk/aca-py/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
description: ACA-Py Plugin with cheqd support
---

# 🍊 ACA-Py

Aries Cloud Agent Python (ACA-Py) serves as a foundational tool for developing Verifiable Credential (VC) ecosystems. It functions at the second and third layers of the [Trust Over IP framework](https://trustoverip.org/wp-content/uploads/2020/05/toip_050520_primer.pdf) and supports multiple credential formats and protocols. As part of the [Open Wallet Foundation](https://openwallet.foundation/), ACA-Py's capabilities can be expanded with runtime-loaded plug-ins. Explore a diverse range of plug-ins in the [ACA-Py Plugins repository](https://plugins.aca-py.org/latest/).

ACA-Py now includes support for the **Cheqd DID** method, facilitating integration with Cheqd's decentralized identity ecosystem. Developers can utilize Cheqd for DID creation, resolution, and operations like issuing and verifying AnonCreds credentials. This offers an easy transition from the decommissioned Sovrin network to a modern, scalable alternative without disrupting existing workflows. Cheqd is fully supported in ACA-Py for issuing Verifiable Credentials, creating Credential Schemas, and Credential Definitions.

AnonCreds using cheqd are facilitated using the [cheqd AnonCreds Object Method](https://docs.cheqd.io/product/advanced/anoncreds).

## Get started <a href="#get-started" id="get-started"></a>

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>cheqd Agent Setup</strong></mark></td><td>Setup the ACA-Py agent with cheqd plugin.</td><td></td><td><a href="./#setup-aca-py-agent">#setup-aca-py-agent</a></td></tr><tr><td><mark style="color:blue;"><strong>Create cheqd DIDs</strong></mark></td><td>Use the agent to create cheqd DIDs.</td><td></td><td><a href="decentralized-identifiers-dids/create-a-did.md">create-a-did.md</a></td></tr><tr><td><mark style="color:blue;"><strong>Issue a Credential</strong></mark></td><td>Issue a verifiable credential using ACA-Py agent.</td><td></td><td><a href="verifiable-credentials-and-presentations/issue-a-verifiable-credential.md">issue-a-verifiable-credential.md</a></td></tr></tbody></table>
17 changes: 17 additions & 0 deletions sdk/aca-py/decentralized-identifiers-dids/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Decentralized Identifiers (DIDs)

A Decentralized Identifier "DID" is a globally unique identifier that does not require a centralized registration authority because it is registered with distributed ledger technology or other form of decentralized network.

{% hint style="info" %}
**Learn about DIDs** If you want to learn about what [DIDs are, please go over to our learning site here.](https://learn.cheqd.io/overview/introduction-to-decentralised-identity/what-is-a-decentralised-identifier-did)
{% endhint %}

## Get started

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>Create DID</strong></mark></td><td>Create an Issuer DID using the did:cheqd DID method.</td><td><a href="create-a-did.md">create-a-did.md</a></td></tr></tbody></table>

## Alternatives

Below are a list of alternatives for creating cheqd DIDs.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>cheqd Studio</strong></mark></td><td>Our API product enables users to <strong>use cheqd's functionality with minimal complexity</strong> and easily integrate APIs into existing apps. </td><td><a href="broken-reference">Broken link</a></td></tr><tr><td><mark style="color:blue;"><strong>DID Registrar</strong></mark></td><td>Simple setup for building cheqd DIDs into existing applications using REST APIs, building into the <a href="https://uniregistrar.io/">Universal Registrar</a>.</td><td><a href="../../../advanced/did-registrar/">did-registrar</a></td></tr><tr><td><mark style="color:blue;"><strong>Credo</strong></mark></td><td>Credo is an SDK which <strong>supports the European Architecture and Reference Framework (ARF)</strong> <strong>standards as well as AnonCreds</strong> with full cheqd support for DIDs. </td><td><a href="../../credo.md">credo.md</a></td></tr><tr><td><mark style="color:blue;"><strong>Veramo</strong></mark></td><td>The Veramo SDK plugin supports JSON, JSON-LD credentials as well as cheqd Credential Payments in an SDK.</td><td><a href="../../veramo-plugin/did-operations/create-did.md">create-did.md</a></td></tr><tr><td><mark style="color:blue;"><strong>Walt.id SSI Kit</strong></mark></td><td>Walt.id SSI Kit is an SDK that supports the <a href="https://digital-strategy.ec.europa.eu/en/library/european-digital-identity-architecture-and-reference-framework-outline"><strong>European Architecture and Reference Framework (ARF)</strong></a> standards for identity, with full cheqd support. </td><td><a href="../../ssi-kit.md">ssi-kit.md</a></td></tr><tr><td><mark style="color:blue;"><strong>cheqd Cosmos CLI</strong></mark></td><td>Cosmos CLI which directly communicates with the cheqd network. This should only be used for testing environments.</td><td><a href="../../../advanced/tooling/cheqd-node-cli/">cheqd-node-cli</a></td></tr></tbody></table>
7 changes: 7 additions & 0 deletions sdk/aca-py/decentralized-identifiers-dids/create-a-did.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Create a DID

The ACA-Py Agent will now have the following new endpoints:

<figure><img src="../../../.gitbook/assets/Screenshot 2024-12-24 at 14.08.25.png" alt=""><figcaption></figcaption></figure>

To create a DID using Cheqd, use the `POST /did/cheqd/create` method. For wallet storage, utilise a Postgres database to ensure key persistence, enabling future updates to the DID.
43 changes: 43 additions & 0 deletions sdk/aca-py/setup-aca-py-agent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Setup ACA-Py Agent

## Pre-requisites

Before you begin, ensure you have a DID registrar and resolver running.&#x20;

* For testnet, you can use the cheqd [DID registrar](https://did-registrar.cheqd.net) and [resolver](https://resolver.cheqd.net/).&#x20;
* For mainnet, you can run your own cheqd DID registrar with the correct mnemonic configuration. For details check [here](https://github.com/cheqd/did-registrar).

## Configuration

* The DID Registrar and the DID Resolver URL can be passed via a `plugin-config.yml`.
* The plugin works only with `askar-anoncreds` wallet type.
* Using a Postgres DB as wallet storage type is also recommended.

## Build the Agent and deploy

Build the ACA-Py Agent docker image with the plugin, and then deploy on your choice of infrastructure.&#x20;

Example Dockerfile:

```docker
FROM ghcr.io/openwallet-foundation/acapy:py3.12-1.1.0
USER root
# install plugins as binaries
RUN pip install git+https://github.com/openwallet-foundation/acapy-plugins@main#subdirectory=cheqd
USER $user
COPY ./configs configs
ENTRYPOINT ["aca-py"]
```

Sample configs are available [here](https://github.com/openwallet-foundation/acapy-plugins/tree/main/cheqd/docker).

## Next steps

Now that your ACA-Py agent is successfully set up to work with cheqd, try following our tutorials for creating a new DID or issuing Verifiable Credentials.

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>Create a DID</strong></mark></td><td>Create an Issuer DID using the did:cheqd DID method.</td><td><a href="decentralized-identifiers-dids/create-a-did.md">create-a-did.md</a></td></tr><tr><td><mark style="color:blue;"><strong>Issue a Verifiable Credential</strong></mark></td><td>Issue a Verifiable Credential using ACA-Py signed by a cheqd DID.</td><td><a href="verifiable-credentials-and-presentations/issue-a-verifiable-credential.md">issue-a-verifiable-credential.md</a></td></tr></tbody></table>

17 changes: 17 additions & 0 deletions sdk/aca-py/verifiable-credentials-and-presentations/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Verifiable Credentials and Presentations

{% hint style="info" %}
:books: **Learn about Verifiable Credentials and Presentations**

If you want to learn more about what [Verifiable Credentials and Presentations are, please go over to our learning site here.](https://learn.cheqd.io/overview/introduction-to-decentralised-identity/what-is-a-verifiable-credential-vc)
{% endhint %}

## Get started

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>Setup ACA-Py Agent</strong></mark></td><td>Before you get started, you need to setup your ACA-Py Agent. </td><td><a href="../setup-aca-py-agent.md">setup-aca-py-agent.md</a></td></tr><tr><td><mark style="color:blue;"><strong>Issue Credentials</strong></mark></td><td>Issue Verifiable Credentials signed by cheqd DIDs using ACA-Py .</td><td><a href="issue-a-verifiable-credential.md">issue-a-verifiable-credential.md</a></td></tr><tr><td><mark style="color:blue;"><strong>Present Credentials</strong></mark></td><td>Present Verifiable Credentials using ACA-Py.</td><td><a href="present-a-verifiable-credential.md">present-a-verifiable-credential.md</a></td></tr></tbody></table>

## Alternatives

Below are a list of alternatives for using Credentials with cheqd support. Each offers a different set of protocols and underlying technical capabilities.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><mark style="color:blue;"><strong>cheqd Studio</strong></mark></td><td>Our API product enables users to <strong>use cheqd's functionality with minimal complexity</strong> and easily integrate APIs into existing apps. </td><td><a href="broken-reference">Broken link</a></td></tr><tr><td><mark style="color:blue;"><strong>Credo</strong></mark></td><td>Credo is an SDK which <strong>supports the European Architecture and Reference Framework (ARF)</strong> <strong>standards as well as AnonCreds</strong> with full cheqd support for DIDs. </td><td><a href="../../credo.md">credo.md</a></td></tr><tr><td><mark style="color:blue;"><strong>Veramo</strong></mark></td><td>The Veramo SDK plugin supports JSON, JSON-LD credentials as well as cheqd Credential Payments in an SDK.</td><td><a href="../../veramo-plugin/credentials-and-presentations/issue-credential.md">issue-credential.md</a></td></tr><tr><td><mark style="color:blue;"><strong>Walt.id SSI Kit</strong></mark></td><td>Walt.id SSI Kit is an SDK that supports the <a href="https://digital-strategy.ec.europa.eu/en/library/european-digital-identity-architecture-and-reference-framework-outline"><strong>European Architecture and Reference Framework (ARF)</strong></a> standards for identity, with full cheqd support. </td><td><a href="../../ssi-kit.md">ssi-kit.md</a></td></tr></tbody></table>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Issue a Verifiable Credential

After creating cheqd DIDs, you can issue verifiable credentials using the ACA-Py agent. Here's how:

1. **Create a Schema**: Create as Anoncreds Schema with the newly created DID as `issuerId` using the API `POST /anoncreds/schema`. This will create a [DID-Linked Resource](../../veramo-plugin/did-linked-resources/) of type `anonCredsSchema`.
2. **Create a Credential Definition**: Using the Schema ID from the previous step, create an Anoncreds Credential Definition using the API `POST /anoncreds/credential-definition`. Here you can pass the `support_revocation` option. Ensure that a [Tails Server](https://github.com/bcgov/indy-tails-server) is configured for the issuer.&#x20;
3. **Create Connection with Holder:** Use any supported method to create the connection with the holder of the credential. Automated [out-of-band protocol](https://identity.foundation/didcomm-messaging/spec/#out-of-band-messages) recommended.
4. **Prepare Credential Offer**: Generate a credential offer using the `/issue-credential-2.0/send-offer` API. This offer is sent to the holder, informing them about the available credential and its attributes.
5. **Receive Credential Request**: Wait for the holder to respond with a credential request, which will include proof of possession of the necessary private keys.
6. **Issue Credential**: Once the credential request is received and validated, issue the credential using the `/issue-credential-2.0/records/<exchange-id>/issue` API endpoint.

By following these steps, you can effectively issue verifiable credentials using ACA-Py integrated with the cheqd ecosystem.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Present a Verifiable Credential

To present verifiable credentials, follow these steps:

1. **Establish a Connection with Verifier**: Initiate a DIDComm connection with the verifier using an out-of-band invitation or pre-existing connection.
2. **Receive Proof Request**: The verifier will request proof by sending a `/present-proof-2.0/send-request` message that outlines the required attributes and predicates.
3. **Create Proof**: Construct a proof presentation with valid credentials using the `/present-proof-2.0/records/<exchange-id>/send-presentation` API.
4. **Send Presentation**: Deliver the proof to the verifier and await their response.
5. **Verifiable Proof**: After the verifier evaluates the presentation, they will respond with either acceptance or rejection.

This process enables secure and trustworthy sharing of verifiable credentials within the ACA-Py framework and cheqd ecosystem.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Revoke a Verifiable Credential

To revoke credentials within the ACA-Py framework, follow these steps:

1. **Identify Credential**: Determine the credential you need to revoke by referencing its unique identifier.
2. **Send Revoke Command**: Utilise the `/anoncreds/credentials/revoke` API endpoint to initiate the revocation process, supplying the necessary credential identifiers like the connection id and the credential exchange id.
3. **Confirm Revocation**: Verify that the credential has been successfully revoked by checking the response from the revocation API and sending a new presentation request (which should fail).

Revoking credentials is crucial for maintaining control over issued credentials and preventing misuse in the cheqd ecosystem.
2 changes: 1 addition & 1 deletion sdk/credo.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: >-

# 🍏 Credo

[Credo](https://credo.js.org/) is a framework written in TypeScript for building **SSI Agents and services** that aims to be **compliant and interoperable** with the standards defined in the European Archicture and Reference Framework.
[Credo](https://credo.js.org/) is a framework written in TypeScript for building **SSI Agents and services** that aims to be **compliant and interoperable** with the standards defined in the European Architecture and Reference Framework.

The Aries Framework JavaScript project has recently been rebranded to "Credo" and was moved from the Hyperledger Foundation to the [Open Wallet Foundation](https://openwallet.foundation/).&#x20;

Expand Down
Loading

0 comments on commit 2f7da2c

Please sign in to comment.