Source code for aries_cloudagent.vc.vc_ld.issue

"""Verifiable Credential issuance methods."""

from ..ld_proofs import (
    LinkedDataProof,
    ProofPurpose,
    sign,
    CredentialIssuancePurpose,
    DocumentLoaderMethod,
    LinkedDataProofException,
)
from .models.credential import CredentialSchema


[docs]async def issue( *, credential: dict, suite: LinkedDataProof, document_loader: DocumentLoaderMethod, purpose: ProofPurpose = None, ) -> dict: """Issue a verifiable credential. Takes the base credentail document, verifies it, and adds a digital signature to it. Args: credential (dict): Base credential document. suite (LinkedDataProof): Signature suite to sign the credential with. document_loader (DocumentLoader): Document loader to use purpose (ProofPurpose, optional): A proof purpose instance that will match proofs to be verified and ensure they were created according to the appropriate purpose. Default to CredentialIssuancePurpose Raises: LinkedDataProofException: When the credential has an invalid structure OR signing fails Returns: dict: The signed verifiable credential """ # Validate credential errors = CredentialSchema().validate(credential) if len(errors) > 0: raise LinkedDataProofException( f"Credential contains invalid structure: {errors}" ) # Set default proof purpose if not set if not purpose: purpose = CredentialIssuancePurpose() # Sign the credential with LD proof signed_credential = await sign( document=credential, suite=suite, purpose=purpose, document_loader=document_loader, ) return signed_credential