"""Revocation artifacts."""
from typing import Sequence
from marshmallow import EXCLUDE, fields, validate
from ...messaging.models.base import BaseModel, BaseModelSchema
from ...messaging.valid import (
BASE58_SHA256_HASH,
INDY_CRED_DEF_ID,
INDY_REV_REG_ID,
INDY_VERSION,
NATURAL_NUM,
)
[docs]class IndyRevRegDefValuePublicKeysAccumKey(BaseModel):
"""Indy revocation registry definition value public keys accum key."""
def __init__(self, z: str = None):
"""Initialize."""
self.z = z
[docs]class IndyRevRegDefValuePublicKeysAccumKeySchema(BaseModelSchema):
"""Indy revocation registry definition value public keys accum key schema."""
z = fields.Str(
description="Value for z", example="1 120F522F81E6B7 1 09F7A59005C4939854"
)
[docs]class IndyRevRegDefValuePublicKeys(BaseModel):
"""Indy revocation registry definition value public keys."""
def __init__(self, accum_key: IndyRevRegDefValuePublicKeysAccumKey = None):
"""Initialize."""
self.accum_key = accum_key
[docs]class IndyRevRegDefValuePublicKeysSchema(BaseModelSchema):
"""Indy revocation registry definition value public keys schema."""
accum_key = fields.Nested(
IndyRevRegDefValuePublicKeysAccumKeySchema(), data_key="accumKey"
)
[docs]class IndyRevRegDefValue(BaseModel):
"""Indy revocation registry definition value."""
def __init__(
self,
issuance_type: str = None,
max_cred_num: int = None,
public_keys: IndyRevRegDefValuePublicKeys = None,
tails_hash: str = None,
tails_location: str = None,
):
"""Initialize."""
self.issuance_type = issuance_type
self.max_cred_num = max_cred_num
self.public_keys = public_keys
self.tails_hash = tails_hash
self.tails_location = tails_location
[docs]class IndyRevRegDefValueSchema(BaseModelSchema):
"""Indy revocation registry definition value schema."""
issuance_type = fields.Str(
validate=validate.OneOf(["ISSUANCE_ON_DEMAND", "ISSUANCE_BY_DEFAULT"]),
data_key="issuanceType",
description="Issuance type",
)
max_cred_num = fields.Int(
description="Maximum number of credentials; registry size",
strict=True,
data_key="maxCredNum",
**NATURAL_NUM,
)
public_keys = fields.Nested(
IndyRevRegDefValuePublicKeysSchema(),
data_key="publicKeys",
description="Public keys",
)
tails_hash = fields.Str(
data_key="tailsHash",
description="Tails hash value",
**BASE58_SHA256_HASH,
)
tails_location = fields.Str(
description="Tails file location",
data_key="tailsLocation",
)
[docs]class IndyRevRegDef(BaseModel):
"""Indy revocation registry definition."""
def __init__(
self,
ver: str = None,
id_: str = None,
revoc_def_type: str = None,
tag: str = None,
cred_def_id: str = None,
value: IndyRevRegDefValue = None,
):
"""Initialize."""
self.ver = ver
self.id_ = id_
self.revoc_def_type = revoc_def_type
self.tag = tag
self.cred_def_id = cred_def_id
self.value = value
[docs]class IndyRevRegDefSchema(BaseModelSchema):
"""Indy revocation registry definition schema."""
ver = fields.Str(
description="Version of revocation registry definition",
**INDY_VERSION,
)
id_ = fields.Str(
description="Indy revocation registry identifier",
data_key="id",
**INDY_REV_REG_ID,
)
revoc_def_type = fields.Str(
description="Revocation registry type (specify CL_ACCUM)",
data_key="revocDefType",
example="CL_ACCUM",
validate=validate.Equal("CL_ACCUM"),
)
tag = fields.Str(description="Revocation registry tag")
cred_def_id = fields.Str(
data_key="credDefId",
description="Credential definition identifier",
**INDY_CRED_DEF_ID,
)
value = fields.Nested(
IndyRevRegDefValueSchema(), description="Revocation registry definition value"
)
[docs]class IndyRevRegEntryValue(BaseModel):
"""Indy revocation registry entry value."""
[docs] class Meta:
"""Model metadata."""
schema_class = "IndyRevRegEntryValueSchema"
def __init__(
self,
prev_accum: str = None,
accum: str = None,
revoked: Sequence[int] = None,
):
"""Initialize."""
self.prev_accum = prev_accum
self.accum = accum
self.revoked = revoked
[docs]class IndyRevRegEntryValueSchema(BaseModelSchema):
"""Indy revocation registry entry value schema."""
[docs] class Meta:
"""Schema metadata."""
model_class = "IndyRevRegEntryValue"
unknown = EXCLUDE
prev_accum = fields.Str(
description="Previous accumulator value",
data_key="prevAccum",
required=False,
example="21 137AC810975E4 6 76F0384B6F23",
)
accum = fields.Str(
description="Accumulator value",
example="21 11792B036AED0AAA12A4 4 298B2571FFC63A737",
)
revoked = fields.List(
fields.Int(strict=True),
required=False,
description="Revoked credential revocation identifiers",
)
[docs]class IndyRevRegEntry(BaseModel):
"""Indy revocation registry entry."""
[docs] class Meta:
"""Model metadata."""
schema_class = "IndyRevRegEntrySchema"
def __init__(self, ver: str = None, value: IndyRevRegEntryValue = None):
"""Initialize."""
self.ver = ver
self.value = value
[docs]class IndyRevRegEntrySchema(BaseModelSchema):
"""Indy revocation registry entry schema."""
[docs] class Meta:
"""Schema metadata."""
model_class = IndyRevRegEntry
unknown = EXCLUDE
ver = fields.Str(
description="Version of revocation registry entry",
**INDY_VERSION,
)
value = fields.Nested(
IndyRevRegEntryValueSchema(),
description="Revocation registry entry value",
)