identity_credential/sd_jwt_vc/
presentation.rs1use super::Error;
5use super::Result;
6use super::SdJwtVc;
7use super::SdJwtVcClaims;
8
9use sd_jwt_payload_rework::Disclosure;
10use sd_jwt_payload_rework::Hasher;
11use sd_jwt_payload_rework::KeyBindingJwt;
12use sd_jwt_payload_rework::SdJwtPresentationBuilder;
13
14#[derive(Debug, Clone)]
17pub struct SdJwtVcPresentationBuilder {
18 vc_claims: SdJwtVcClaims,
19 builder: SdJwtPresentationBuilder,
20}
21
22impl SdJwtVcPresentationBuilder {
23 pub fn new(token: SdJwtVc, hasher: &dyn Hasher) -> Result<Self> {
25 let SdJwtVc {
26 sd_jwt,
27 parsed_claims: vc_claims,
28 } = token;
29 let builder = sd_jwt.into_presentation(hasher).map_err(Error::SdJwt)?;
30
31 Ok(Self { vc_claims, builder })
32 }
33 pub fn conceal(mut self, path: &str) -> Result<Self> {
39 self.builder = self.builder.conceal(path).map_err(Error::SdJwt)?;
40 Ok(self)
41 }
42
43 pub fn attach_key_binding_jwt(mut self, kb_jwt: KeyBindingJwt) -> Self {
45 self.builder = self.builder.attach_key_binding_jwt(kb_jwt);
46 self
47 }
48
49 pub fn finish(self) -> Result<(SdJwtVc, Vec<Disclosure>)> {
51 let (sd_jwt, disclosures) = self.builder.finish()?;
52 Ok((SdJwtVc::new(sd_jwt, self.vc_claims), disclosures))
53 }
54}