# Data Holder

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

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

## <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>" %}
