# Data Holder

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

1. [Retrieving the DVR from the Proof Verifier](data-holder/1.-retrieving-the-dvr)
2. [Retrieving the user data from the Data Issuer](data-holder/2.-retrieving-the-user-data)
3. [Generating the ZkPass Proof from the two inputs: DVR and user data](data-holder/3.-generating-the-proof)
4. [Sending the ZkPass Proof to the Proof Verifier for the proof verification](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" %}
