> For the complete documentation index, see [llms.txt](https://gl-docs.gitbook.io/zkpass/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gl-docs.gitbook.io/zkpass/zkpass-developers-guide/zkpass-modules/dvr/dvr-client-roles/data-holder.md).

# Data Holder

The Data Holder should follow four steps to integrate with zkPass:

1. [Retrieving the DVR from the Proof Verifier](/zkpass/zkpass-developers-guide/zkpass-modules/dvr/dvr-client-roles/data-holder/1.-retrieving-the-dvr.md)
2. [Retrieving the user data from the Data Issuer](/zkpass/zkpass-developers-guide/zkpass-modules/dvr/dvr-client-roles/data-holder/2.-retrieving-the-user-data.md)
3. [Generating the ZkPass Proof from the two inputs: DVR and user data](/zkpass/zkpass-developers-guide/zkpass-modules/dvr/dvr-client-roles/data-holder/3.-generating-the-proof.md)
4. [Sending the ZkPass Proof to the Proof Verifier for the proof verification](/zkpass/zkpass-developers-guide/zkpass-modules/dvr/dvr-client-roles/data-holder/4.-verifying-the-proof.md)

## <mark style="color:blue;">Sample Implementation</mark>

Sample codes for the Data Holder implementation follow. Each step is explained in detail in the subsections. The code is also available on the zkpass-sdk repo, as shown here:

{% @github-files/github-code-block url="<https://github.com/gl-zkPass/zkpass-sdk/blob/main/rust/zkpass-demo/src/data_holder.rs>" %}
