Skip to content

Commit

Permalink
fix: Anoncreds schemas and validation
Browse files Browse the repository at this point in the history
Signed-off-by: DaevMithran <[email protected]>
  • Loading branch information
DaevMithran committed Dec 11, 2024
1 parent 4559704 commit 1f76e66
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 64 deletions.
19 changes: 13 additions & 6 deletions acapy_agent/messaging/valid.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,16 +363,20 @@ def __init__(self):


class AnoncredsDID(Regexp):
"""Validate value against indy DID."""
"""Validate value against anoncreds DID."""

METHOD = r"([a-zA-Z0-9_]+)"
NETWORK = r"(:[a-zA-Z0-9_.%-]+)?" # Optional network
METHOD_ID = r"([a-zA-Z0-9_.%-]+(:[a-zA-Z0-9_.%-]+)*)"

EXAMPLE = "did:(method):WgWxqztrNooG92RXvxSTWv"
PATTERN = re.compile("^(did:[a-z]:.+$)?$")
PATTERN = re.compile(rf"^did:{METHOD}{NETWORK}:{METHOD_ID}")

def __init__(self):
"""Initialize the instance."""

super().__init__(
IndyDID.PATTERN,
DIDValidation.PATTERN,
error="Value {input} is not an decentralized identifier (DID)",
)

Expand All @@ -381,14 +385,17 @@ class DIDValidation(Regexp):
"""Validate value against any valid DID spec."""

METHOD = r"([a-zA-Z0-9_]+)"
NETWORK = r"(:[a-zA-Z0-9_.%-]+)?" # Optional network
METHOD_ID = r"([a-zA-Z0-9_.%-]+(:[a-zA-Z0-9_.%-]+)*)"
PARAMS = r"((;[a-zA-Z0-9_.:%-]+=[a-zA-Z0-9_.:%-]*)*)"
PATH = r"(\/[^#?]*)?"
QUERY = r"([?][^#]*)?"
FRAGMENT = r"(\#.*)?$"

EXAMPLE = "did:peer:WgWxqztrNooG92RXvxSTWv"
PATTERN = re.compile(rf"^did:{METHOD}:{METHOD_ID}{PARAMS}{PATH}{QUERY}{FRAGMENT}$")
PATTERN = re.compile(
rf"^did:{METHOD}{NETWORK}:{METHOD_ID}{PARAMS}{PATH}{QUERY}{FRAGMENT}$"
)

def __init__(self):
"""Initialize the instance."""
Expand Down Expand Up @@ -485,7 +492,7 @@ def __init__(self):
"""Initialize the instance."""

super().__init__(
IndyCredDefId.PATTERN,
AnoncredsCredDefId.PATTERN,
error="Value {input} is not an anoncreds credential definition identifier",
)

Expand Down Expand Up @@ -530,7 +537,7 @@ def __init__(self):
"""Initialize the instance."""

super().__init__(
IndySchemaId.PATTERN,
AnoncredsSchemaId.PATTERN,
error="Value {input} is not an anoncreds schema identifier",
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,14 +197,12 @@ def _check_proof_vs_proposal():
proof_value = attr_spec["raw"]
sub_proof_index = attr_spec["sub_proof_index"]
schema_id = proof["identifiers"][sub_proof_index]["schema_id"]
# fetch schema for schema_issuer_did, schema_name, schema_version
cred_def_id = proof["identifiers"][sub_proof_index]["cred_def_id"]
# fetch cred_def to populate issuer_did
criteria = {
"schema_id": schema_id,
"schema_issuer_did": schema_id.split(":")[-4],
"schema_name": schema_id.split(":")[-2],
"schema_version": schema_id.split(":")[-1],
"cred_def_id": cred_def_id,
"issuer_did": cred_def_id.split(":")[-5],
f"attr::{name}::value": proof_value,
}

Expand Down Expand Up @@ -235,11 +233,7 @@ def _check_proof_vs_proposal():
cred_def_id = proof["identifiers"][sub_proof_index]["cred_def_id"]
criteria = {
"schema_id": schema_id,
"schema_issuer_did": schema_id.split(":")[-4],
"schema_name": schema_id.split(":")[-2],
"schema_version": schema_id.split(":")[-1],
"cred_def_id": cred_def_id,
"issuer_did": cred_def_id.split(":")[-5],
**{
f"attr::{name}::value": value
for name, value in proof_values.items()
Expand Down Expand Up @@ -296,11 +290,7 @@ def _check_proof_vs_proposal():
cred_def_id = proof["identifiers"][sub_proof_index]["cred_def_id"]
criteria = {
"schema_id": schema_id,
"schema_issuer_did": schema_id.split(":")[-4],
"schema_name": schema_id.split(":")[-2],
"schema_version": schema_id.split(":")[-1],
"cred_def_id": cred_def_id,
"issuer_did": cred_def_id.split(":")[-5],
}

if (
Expand Down
46 changes: 23 additions & 23 deletions acapy_agent/revocation/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@
from ..messaging.models.openapi import OpenAPISchema
from ..messaging.responder import BaseResponder
from ..messaging.valid import (
INDY_CRED_DEF_ID_EXAMPLE,
INDY_CRED_DEF_ID_VALIDATE,
ANONCREDS_CRED_DEF_ID_EXAMPLE,
ANONCREDS_CRED_DEF_ID_VALIDATE,
INDY_CRED_REV_ID_EXAMPLE,
INDY_CRED_REV_ID_VALIDATE,
INDY_REV_REG_ID_EXAMPLE,
INDY_REV_REG_ID_VALIDATE,
ANONCREDS_REV_REG_ID_EXAMPLE,
ANONCREDS_REV_REG_ID_VALIDATE,
INDY_REV_REG_SIZE_EXAMPLE,
INDY_REV_REG_SIZE_VALIDATE,
UUID4_EXAMPLE,
Expand Down Expand Up @@ -86,10 +86,10 @@ class RevRegCreateRequestSchema(OpenAPISchema):
"""Request schema for revocation registry creation request."""

credential_definition_id = fields.Str(
validate=INDY_CRED_DEF_ID_VALIDATE,
validate=ANONCREDS_CRED_DEF_ID_VALIDATE,
metadata={
"description": "Credential definition identifier",
"example": INDY_CRED_DEF_ID_EXAMPLE,
"example": ANONCREDS_CRED_DEF_ID_EXAMPLE,
},
)
max_cred_num = fields.Int(
Expand Down Expand Up @@ -143,10 +143,10 @@ def validate_fields(self, data, **kwargs):

rev_reg_id = fields.Str(
required=False,
validate=INDY_REV_REG_ID_VALIDATE,
validate=ANONCREDS_REV_REG_ID_VALIDATE,
metadata={
"description": "Revocation registry identifier",
"example": INDY_REV_REG_ID_EXAMPLE,
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
},
)
cred_rev_id = fields.Str(
Expand Down Expand Up @@ -182,18 +182,18 @@ def validate_fields(self, data, **kwargs):

rev_reg_id = fields.Str(
required=False,
validate=INDY_REV_REG_ID_VALIDATE,
validate=ANONCREDS_REV_REG_ID_VALIDATE,
metadata={
"description": "Revocation registry identifier",
"example": INDY_REV_REG_ID_EXAMPLE,
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
},
)
cred_def_id = fields.Str(
required=False,
validate=INDY_CRED_DEF_ID_VALIDATE,
validate=ANONCREDS_CRED_DEF_ID_VALIDATE,
metadata={
"description": "Credential definition identifier",
"example": INDY_CRED_DEF_ID_EXAMPLE,
"example": ANONCREDS_CRED_DEF_ID_EXAMPLE,
},
)

Expand Down Expand Up @@ -270,7 +270,7 @@ class PublishRevocationsSchema(OpenAPISchema):

rrid2crid = fields.Dict(
required=False,
keys=fields.Str(metadata={"example": INDY_REV_REG_ID_EXAMPLE}),
keys=fields.Str(metadata={"example": ANONCREDS_REV_REG_ID_EXAMPLE}),
values=fields.List(
fields.Str(
validate=INDY_CRED_REV_ID_VALIDATE,
Expand Down Expand Up @@ -303,7 +303,7 @@ class ClearPendingRevocationsRequestSchema(OpenAPISchema):

purge = fields.Dict(
required=False,
keys=fields.Str(metadata={"example": INDY_REV_REG_ID_EXAMPLE}),
keys=fields.Str(metadata={"example": ANONCREDS_REV_REG_ID_EXAMPLE}),
values=fields.List(
fields.Str(
validate=INDY_CRED_REV_ID_VALIDATE,
Expand Down Expand Up @@ -383,10 +383,10 @@ class RevRegsCreatedSchema(OpenAPISchema):

rev_reg_ids = fields.List(
fields.Str(
validate=INDY_REV_REG_ID_VALIDATE,
validate=ANONCREDS_REV_REG_ID_VALIDATE,
metadata={
"description": "Revocation registry identifiers",
"example": INDY_REV_REG_ID_EXAMPLE,
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
},
)
)
Expand All @@ -401,7 +401,7 @@ class RevRegUpdateTailsFileUriSchema(OpenAPISchema):
"description": "Public URI to the tails file",
"example": (
"http://192.168.56.133:6543/revocation/registry/"
f"{INDY_REV_REG_ID_EXAMPLE}/tails-file"
f"{ANONCREDS_REV_REG_ID_EXAMPLE}/tails-file"
),
},
)
Expand All @@ -412,10 +412,10 @@ class RevRegsCreatedQueryStringSchema(OpenAPISchema):

cred_def_id = fields.Str(
required=False,
validate=INDY_CRED_DEF_ID_VALIDATE,
validate=ANONCREDS_CRED_DEF_ID_VALIDATE,
metadata={
"description": "Credential definition identifier",
"example": INDY_CRED_DEF_ID_EXAMPLE,
"example": ANONCREDS_CRED_DEF_ID_EXAMPLE,
},
)
state = fields.Str(
Expand Down Expand Up @@ -452,10 +452,10 @@ class RevRegIdMatchInfoSchema(OpenAPISchema):

rev_reg_id = fields.Str(
required=True,
validate=INDY_REV_REG_ID_VALIDATE,
validate=ANONCREDS_REV_REG_ID_VALIDATE,
metadata={
"description": "Revocation Registry identifier",
"example": INDY_REV_REG_ID_EXAMPLE,
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
},
)

Expand All @@ -465,10 +465,10 @@ class RevocationCredDefIdMatchInfoSchema(OpenAPISchema):

cred_def_id = fields.Str(
required=True,
validate=INDY_CRED_DEF_ID_VALIDATE,
validate=ANONCREDS_CRED_DEF_ID_VALIDATE,
metadata={
"description": "Credential definition identifier",
"example": INDY_CRED_DEF_ID_EXAMPLE,
"example": ANONCREDS_CRED_DEF_ID_EXAMPLE,
},
)

Expand Down
42 changes: 21 additions & 21 deletions acapy_agent/revocation_anoncreds/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@
from ..ledger.multiple_ledger.base_manager import BaseMultipleLedgerManager
from ..messaging.models.openapi import OpenAPISchema
from ..messaging.valid import (
INDY_CRED_DEF_ID_EXAMPLE,
INDY_CRED_DEF_ID_VALIDATE,
ANONCREDS_CRED_DEF_ID_EXAMPLE,
ANONCREDS_CRED_DEF_ID_VALIDATE,
INDY_CRED_REV_ID_EXAMPLE,
INDY_CRED_REV_ID_VALIDATE,
INDY_REV_REG_ID_EXAMPLE,
INDY_REV_REG_ID_VALIDATE,
ANONCREDS_REV_REG_ID_EXAMPLE,
ANONCREDS_REV_REG_ID_VALIDATE,
UUID4_EXAMPLE,
UUID4_VALIDATE,
WHOLE_NUM_EXAMPLE,
Expand Down Expand Up @@ -99,10 +99,10 @@ def validate_fields(self, data, **kwargs):

rev_reg_id = fields.Str(
required=False,
validate=INDY_REV_REG_ID_VALIDATE,
validate=ANONCREDS_REV_REG_ID_VALIDATE,
metadata={
"description": "Revocation registry identifier",
"example": INDY_REV_REG_ID_EXAMPLE,
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
},
)
cred_rev_id = fields.Str(
Expand Down Expand Up @@ -138,18 +138,18 @@ def validate_fields(self, data, **kwargs):

rev_reg_id = fields.Str(
required=False,
validate=INDY_REV_REG_ID_VALIDATE,
validate=ANONCREDS_REV_REG_ID_VALIDATE,
metadata={
"description": "Revocation registry identifier",
"example": INDY_REV_REG_ID_EXAMPLE,
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
},
)
cred_def_id = fields.Str(
required=False,
validate=INDY_CRED_DEF_ID_VALIDATE,
validate=ANONCREDS_CRED_DEF_ID_VALIDATE,
metadata={
"description": "Credential definition identifier",
"example": INDY_CRED_DEF_ID_EXAMPLE,
"example": ANONCREDS_CRED_DEF_ID_EXAMPLE,
},
)

Expand Down Expand Up @@ -215,10 +215,10 @@ class RevRegsCreatedSchemaAnoncreds(OpenAPISchema):

rev_reg_ids = fields.List(
fields.Str(
validate=INDY_REV_REG_ID_VALIDATE,
validate=ANONCREDS_REV_REG_ID_VALIDATE,
metadata={
"description": "Revocation registry identifiers",
"example": INDY_REV_REG_ID_EXAMPLE,
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
},
)
)
Expand All @@ -233,7 +233,7 @@ class RevRegUpdateTailsFileUriSchema(OpenAPISchema):
"description": "Public URI to the tails file",
"example": (
"http://192.168.56.133:6543/revocation/registry/"
f"{INDY_REV_REG_ID_EXAMPLE}/tails-file"
f"{ANONCREDS_REV_REG_ID_EXAMPLE}/tails-file"
),
},
)
Expand All @@ -244,10 +244,10 @@ class RevRegsCreatedQueryStringSchema(OpenAPISchema):

cred_def_id = fields.Str(
required=False,
validate=INDY_CRED_DEF_ID_VALIDATE,
validate=ANONCREDS_CRED_DEF_ID_VALIDATE,
metadata={
"description": "Credential definition identifier",
"example": INDY_CRED_DEF_ID_EXAMPLE,
"example": ANONCREDS_CRED_DEF_ID_EXAMPLE,
},
)
state = fields.Str(
Expand Down Expand Up @@ -284,10 +284,10 @@ class RevRegIdMatchInfoSchema(OpenAPISchema):

rev_reg_id = fields.Str(
required=True,
validate=INDY_REV_REG_ID_VALIDATE,
validate=ANONCREDS_REV_REG_ID_VALIDATE,
metadata={
"description": "Revocation Registry identifier",
"example": INDY_REV_REG_ID_EXAMPLE,
"example": ANONCREDS_REV_REG_ID_EXAMPLE,
},
)

Expand All @@ -297,10 +297,10 @@ class RevocationCredDefIdMatchInfoSchema(OpenAPISchema):

cred_def_id = fields.Str(
required=True,
validate=INDY_CRED_DEF_ID_VALIDATE,
validate=ANONCREDS_CRED_DEF_ID_VALIDATE,
metadata={
"description": "Credential definition identifier",
"example": INDY_CRED_DEF_ID_EXAMPLE,
"example": ANONCREDS_CRED_DEF_ID_EXAMPLE,
},
)

Expand Down Expand Up @@ -348,7 +348,7 @@ class PublishRevocationsSchemaAnoncreds(OpenAPISchema):

rrid2crid = fields.Dict(
required=False,
keys=fields.Str(metadata={"example": INDY_REV_REG_ID_EXAMPLE}),
keys=fields.Str(metadata={"example": ANONCREDS_REV_REG_ID_EXAMPLE}),
values=fields.List(
fields.Str(
validate=INDY_CRED_REV_ID_VALIDATE,
Expand All @@ -368,7 +368,7 @@ class PublishRevocationsResultSchemaAnoncreds(OpenAPISchema):

rrid2crid = fields.Dict(
required=False,
keys=fields.Str(metadata={"example": INDY_REV_REG_ID_EXAMPLE}),
keys=fields.Str(metadata={"example": ANONCREDS_REV_REG_ID_EXAMPLE}),
values=fields.List(
fields.Str(
validate=INDY_CRED_REV_ID_VALIDATE,
Expand Down
Loading

0 comments on commit 1f76e66

Please sign in to comment.