Source code for keri.vc.proving

# -*- encoding: utf-8 -*-
"""
keri.vc.proving module

"""

from collections.abc import Iterable
from typing import Union

from .. import help
from ..core import coring, serdering
from ..core.coring import (Serials, versify)
from ..db import subing
from ..kering import Version
from ..help import helping

KERI_REGISTRY_TYPE = "KERICredentialRegistry"

logger = help.ogler.getLogger()


[docs] def credential(schema, issuer, data, recipient=None, private=False, salt=None, status=None, source=None, rules=None, version=Version, kind=Serials.json): """Utility function to create an ACDC. Creates dict SAD for credential from parameters and Saidifyies it before creation. Parameters: schema (SAID): of schema for this credential issuer (str): qb64 identifier prefix of the issuer status (str): qb64 said of the credential registry recipient (Option[str|None]): qb64 identifier prefix of the recipient data (dict): of the values being assigned to the subject of this credential private (bool): apply nonce used for privacy preserving ACDC salt (string): salt for nonce source (dict | list): of source credentials to which this credential is chained rules (dict | list): ACDC rules section for credential version (Version): version instance kind (Serials): serialization kind Returns: SerderACDC: credential instance """ vs = versify(proto=coring.Protos.acdc, version=version, kind=kind, size=0) vc = dict( v=vs, d="", ) subject = dict( d="", ) if private: vc["u"] = salt if salt is not None else coring.Salter().qb64 subject["u"] = salt if salt is not None else coring.Salter().qb64 if recipient is not None: subject['i'] = recipient subject["dt"] = data["dt"] if "dt" in data else helping.nowIso8601() subject |= data vc |= dict( i=issuer, ) if status is not None: vc["ri"] = status vc |= dict( s=schema, a={}, ) if source is not None: vc["e"] = source if rules is not None: vc["r"] = rules _, sad = coring.Saider.saidify(sad=subject, kind=kind, label=coring.Saids.d) vc["a"] = sad _, vc = coring.Saider.saidify(sad=vc) return serdering.SerderACDC(sad=vc)