ockam_entity 0.35.0

Ockam is a library for building devices that communicate securely, privately and trustfully with cloud services and other devices.
Documentation
use crate::credential::Verifier;
use crate::{
    BbsCredential, Credential, CredentialAttribute, CredentialFragment1, CredentialFragment2,
    CredentialOffer, CredentialPresentation, CredentialProof, CredentialPublicKey,
    CredentialRequest, CredentialRequestFragment, CredentialSchema, EntityCredential, Holder,
    Issuer, OfferId, PresentationManifest, Profile, ProofRequestId, SigningPublicKey,
};
use ockam_core::Result;
use ockam_core::{async_trait, compat::boxed::Box};
use signature_bls::SecretKey;

#[async_trait]
impl Issuer for Profile {
    async fn get_signing_key(&mut self) -> Result<SecretKey> {
        self.entity().await?.get_signing_key().await
    }

    async fn get_signing_public_key(&mut self) -> Result<SigningPublicKey> {
        self.entity().await?.get_signing_public_key().await
    }

    async fn create_offer(&self, schema: &CredentialSchema) -> Result<CredentialOffer> {
        self.entity().await?.create_offer(schema).await
    }

    async fn create_proof_of_possession(&self) -> Result<CredentialProof> {
        self.entity().await?.create_proof_of_possession().await
    }

    async fn sign_credential(
        &self,
        schema: &CredentialSchema,
        attributes: &[CredentialAttribute],
    ) -> Result<BbsCredential> {
        self.entity()
            .await?
            .sign_credential(schema, attributes)
            .await
    }

    async fn sign_credential_request(
        &self,
        request: &CredentialRequest,
        schema: &CredentialSchema,
        attributes: &[(String, CredentialAttribute)],
        offer_id: OfferId,
    ) -> Result<CredentialFragment2> {
        self.entity()
            .await?
            .sign_credential_request(request, schema, attributes, offer_id)
            .await
    }
}

#[async_trait]
impl Holder for Profile {
    async fn accept_credential_offer(
        &self,
        offer: &CredentialOffer,
        issuer_public_key: SigningPublicKey,
    ) -> Result<CredentialRequestFragment> {
        self.entity()
            .await?
            .accept_credential_offer(offer, issuer_public_key)
            .await
    }

    async fn combine_credential_fragments(
        &self,
        credential_fragment1: CredentialFragment1,
        credential_fragment2: CredentialFragment2,
    ) -> Result<BbsCredential> {
        self.entity()
            .await?
            .combine_credential_fragments(credential_fragment1, credential_fragment2)
            .await
    }

    async fn is_valid_credential(
        &self,
        credential: &BbsCredential,
        verifier_key: SigningPublicKey,
    ) -> Result<bool> {
        self.entity()
            .await?
            .is_valid_credential(credential, verifier_key)
            .await
    }

    async fn create_credential_presentation(
        &self,
        credential: &BbsCredential,
        presentation_manifests: &PresentationManifest,
        proof_request_id: ProofRequestId,
    ) -> Result<CredentialPresentation> {
        self.entity()
            .await?
            .create_credential_presentation(credential, presentation_manifests, proof_request_id)
            .await
    }

    async fn add_credential(&mut self, credential: EntityCredential) -> Result<()> {
        self.entity().await?.add_credential(credential).await
    }

    async fn get_credential(&mut self, credential: &Credential) -> Result<EntityCredential> {
        self.entity().await?.get_credential(credential).await
    }
}

#[async_trait]
impl Verifier for Profile {
    async fn create_proof_request_id(&self) -> Result<ProofRequestId> {
        self.entity().await?.create_proof_request_id().await
    }

    async fn verify_proof_of_possession(
        &self,
        signing_public_key: CredentialPublicKey,
        proof: CredentialProof,
    ) -> Result<bool> {
        self.entity()
            .await?
            .verify_proof_of_possession(signing_public_key, proof)
            .await
    }

    async fn verify_credential_presentation(
        &self,
        presentation: &CredentialPresentation,
        presentation_manifest: &PresentationManifest,
        proof_request_id: ProofRequestId,
    ) -> Result<bool> {
        self.entity()
            .await?
            .verify_credential_presentation(presentation, presentation_manifest, proof_request_id)
            .await
    }
}