use crate::{
BlsSecretKey, Credential, CredentialAttribute, CredentialFragment1, CredentialFragment2,
CredentialOffer, CredentialPresentation, CredentialRequest, CredentialSchema, OfferId,
PresentationManifest, ProofBytes, ProofRequestId, SigningPublicKey,
};
use ockam_core::Result;
pub trait CredentialIssuer {
fn get_signing_key(&mut self) -> Result<BlsSecretKey>;
fn get_signing_public_key(&mut self) -> Result<SigningPublicKey>;
fn create_offer(&mut self, schema: &CredentialSchema) -> Result<CredentialOffer>;
fn create_proof_of_possession(&mut self) -> Result<ProofBytes>;
fn sign_credential(
&mut self,
schema: &CredentialSchema,
attributes: &[CredentialAttribute],
) -> Result<Credential>;
fn sign_credential_request(
&mut self,
request: &CredentialRequest,
schema: &CredentialSchema,
attributes: &[(String, CredentialAttribute)],
offer_id: OfferId,
) -> Result<CredentialFragment2>;
}
pub trait CredentialHolder {
fn accept_credential_offer(
&mut self,
offer: &CredentialOffer,
signing_public_key: SigningPublicKey,
) -> Result<(CredentialRequest, CredentialFragment1)>;
fn combine_credential_fragments(
&mut self,
credential_fragment1: CredentialFragment1,
credential_fragment2: CredentialFragment2,
) -> Result<Credential>;
fn is_valid_credential(
&mut self,
credential: &Credential,
verifier_key: SigningPublicKey,
) -> Result<bool>;
fn present_credentials(
&mut self,
credential: &[Credential],
presentation_manifests: &[PresentationManifest],
proof_request_id: ProofRequestId,
) -> Result<Vec<CredentialPresentation>>;
}
pub trait CredentialVerifier {
fn create_proof_request_id(&mut self) -> Result<ProofRequestId>;
fn verify_proof_of_possession(
&mut self,
issuer_vk: SigningPublicKey,
proof: ProofBytes,
) -> Result<bool>;
fn verify_credential_presentations(
&mut self,
presentations: &[CredentialPresentation],
presentation_manifests: &[PresentationManifest],
proof_request_id: ProofRequestId,
) -> Result<bool>;
}