use crate::error::Error;
use crate::error::Result;
use jsonprooftoken::jwp::header::PresentationProtectedHeader;
use jsonprooftoken::jwp::issued::JwpIssued;
use jsonprooftoken::jwp::presented::JwpPresentedBuilder;
pub struct SelectiveDisclosurePresentation {
jwp_builder: JwpPresentedBuilder,
}
impl SelectiveDisclosurePresentation {
pub fn new(issued_jwp: &JwpIssued) -> Self {
let mut jwp_builder = JwpPresentedBuilder::new(issued_jwp);
jwp_builder.set_undisclosed("jti").ok();
jwp_builder.set_undisclosed("issuanceDate").ok(); jwp_builder.set_undisclosed("nbf").ok();
jwp_builder.set_undisclosed("expirationDate").ok(); jwp_builder.set_undisclosed("exp").ok();
jwp_builder.set_undisclosed("termsOfUse").ok();
jwp_builder
.set_undisclosed("vc.credentialStatus.revocationBitmapIndex")
.ok();
jwp_builder.set_undisclosed("vc.credentialSubject.id").ok();
jwp_builder.set_undisclosed("sub").ok();
Self { jwp_builder }
}
pub fn conceal_in_subject(&mut self, path: &str) -> Result<(), Error> {
let _ = self
.jwp_builder
.set_undisclosed(&("vc.credentialSubject.".to_owned() + path))
.map_err(|_| Error::SelectiveDisclosureError);
Ok(())
}
pub fn conceal_in_evidence(&mut self, path: &str) -> Result<(), Error> {
let _ = self
.jwp_builder
.set_undisclosed(&("vc.evidence.".to_owned() + path))
.map_err(|_| Error::SelectiveDisclosureError);
Ok(())
}
pub fn set_presentation_header(&mut self, ph: PresentationProtectedHeader) {
self.jwp_builder.set_presentation_protected_header(ph);
}
pub fn builder(&self) -> &JwpPresentedBuilder {
&self.jwp_builder
}
}