diff --git a/MANIFEST.in b/MANIFEST.in index 49df71cbdf..9b3d4d0ed5 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -6,4 +6,6 @@ include aries_cloudagent/vc/ld_proofs/resources/status_list_context.jsonld include aries_cloudagent/vc/ld_proofs/resources/security-v1-context.jsonld include aries_cloudagent/vc/ld_proofs/resources/security-v2-context.jsonld include aries_cloudagent/vc/ld_proofs/resources/ed25519-2020-context.jsonld +include aries_cloudagent/vc/ld_proofs/resources/bbs-v1-context.jsonld +include aries_cloudagent/vc/ld_proofs/resources/dif-presentation-exchange-submission-v1.jsonld include README.md diff --git a/aries_cloudagent/protocols/present_proof/dif/pres_exch_handler.py b/aries_cloudagent/protocols/present_proof/dif/pres_exch_handler.py index e5d0aa7509..a553eb3e67 100644 --- a/aries_cloudagent/protocols/present_proof/dif/pres_exch_handler.py +++ b/aries_cloudagent/protocols/present_proof/dif/pres_exch_handler.py @@ -1260,9 +1260,7 @@ async def create_vp( ) if not issuer_id and len(filtered_creds_list) == 0: vp = await create_presentation(credentials=applicable_creds_list) - vp["presentation_submission"] = submission_property.serialize() - if self.proof_type is BbsBlsSignature2020.signature_type: - vp["@context"].append(SECURITY_CONTEXT_BBS_URL) + vp = self.__add_dif_fields_to_vp(vp, submission_property) result_vp.append(vp) continue else: @@ -1279,9 +1277,7 @@ async def create_vp( vp = await create_presentation( credentials=applicable_creds_list ) - vp["presentation_submission"] = submission_property.serialize() - if self.proof_type is BbsBlsSignature2020.signature_type: - vp["@context"].append(SECURITY_CONTEXT_BBS_URL) + vp = self.__add_dif_fields_to_vp(vp, submission_property) result_vp.append(vp) continue else: @@ -1289,9 +1285,7 @@ async def create_vp( else: issuer_id = self.pres_signing_did vp = await create_presentation(credentials=applicable_creds_list) - vp["presentation_submission"] = submission_property.serialize() - if self.proof_type is BbsBlsSignature2020.signature_type: - vp["@context"].append(SECURITY_CONTEXT_BBS_URL) + vp = self.__add_dif_fields_to_vp(vp, submission_property) issue_suite = await self._get_issue_suite( issuer_id=issuer_id, ) @@ -1306,6 +1300,19 @@ async def create_vp( return result_vp[0] return result_vp + def __add_dif_fields_to_vp( + self, + vp: dict, + submission_property: PresentationSubmission + ) -> dict: + vp["@context"].append(PRESENTATION_SUBMISSION_JSONLD_CONTEXT) + vp["type"].append(PRESENTATION_SUBMISSION_JSONLD_TYPE) + vp["presentation_submission"] = submission_property.serialize() + if self.proof_type is BbsBlsSignature2020.signature_type: + vp["@context"].append(SECURITY_CONTEXT_BBS_URL) + + return vp + def check_if_cred_id_derived(self, id: str) -> bool: """Check if credential or credentialSubject id is derived.""" if id.startswith("urn:bnid:_:c14n"): diff --git a/aries_cloudagent/vc/ld_proofs/document_downloader.py b/aries_cloudagent/vc/ld_proofs/document_downloader.py index aac93839e9..a2deb37b5b 100644 --- a/aries_cloudagent/vc/ld_proofs/document_downloader.py +++ b/aries_cloudagent/vc/ld_proofs/document_downloader.py @@ -45,6 +45,8 @@ class StaticCacheJsonLdDownloader: "https://w3id.org/security/v2": "security-v2-context.jsonld", "https://w3id.org/security/suites/ed25519-2020/v1": "ed25519-2020-context.jsonld", "https://w3id.org/security/bbs/v1": "bbs-v1-context.jsonld", + "https://identity.foundation/presentation-exchange/submission/v1": + "dif-presentation-exchange-submission-v1.jsonld", } def __init__( diff --git a/aries_cloudagent/vc/ld_proofs/resources/dif-presentation-exchange-submission-v1.jsonld b/aries_cloudagent/vc/ld_proofs/resources/dif-presentation-exchange-submission-v1.jsonld new file mode 100644 index 0000000000..49653cebb3 --- /dev/null +++ b/aries_cloudagent/vc/ld_proofs/resources/dif-presentation-exchange-submission-v1.jsonld @@ -0,0 +1,15 @@ +{ + "@context": { + "@version": 1.1, + "PresentationSubmission": { + "@id": "https://identity.foundation/presentation-exchange/#presentation-submission", + "@context": { + "@version": 1.1, + "presentation_submission": { + "@id": "https://identity.foundation/presentation-exchange/#presentation-submission", + "@type": "@json" + } + } + } + } +} diff --git a/aries_cloudagent/vc/tests/contexts/__init__.py b/aries_cloudagent/vc/tests/contexts/__init__.py index 8b84bd07ef..c00106a0bd 100644 --- a/aries_cloudagent/vc/tests/contexts/__init__.py +++ b/aries_cloudagent/vc/tests/contexts/__init__.py @@ -1,4 +1,5 @@ from .did_v1 import DID_V1 +from .dif_presentation_submission_v1 import DIF_PRESENTATION_SUBMISSION_V1 from .security_v1 import SECURITY_V1 from .security_v2 import SECURITY_V2 from .security_v3_unstable import SECURITY_V3_UNSTABLE @@ -14,6 +15,7 @@ __all__ = [ "DID_V1", + "DIF_PRESENTATION_SUBMISSION_V1", "SECURITY_V1", "SECURITY_V2", "SECURITY_V3_UNSTABLE", diff --git a/aries_cloudagent/vc/tests/contexts/dif_presentation_submission_v1.py b/aries_cloudagent/vc/tests/contexts/dif_presentation_submission_v1.py new file mode 100644 index 0000000000..d8a4da17a4 --- /dev/null +++ b/aries_cloudagent/vc/tests/contexts/dif_presentation_submission_v1.py @@ -0,0 +1,15 @@ +DIF_PRESENTATION_SUBMISSION_V1 = { + "@context": { + "@version": 1.1, + "PresentationSubmission": { + "@id": "https://identity.foundation/presentation-exchange/#presentation-submission", + "@context": { + "@version": 1.1, + "presentation_submission": { + "@id": "https://identity.foundation/presentation-exchange/#presentation-submission", + "@type": "@json" + } + } + } + } +} diff --git a/aries_cloudagent/vc/tests/document_loader.py b/aries_cloudagent/vc/tests/document_loader.py index 68df833c15..672fe9139a 100644 --- a/aries_cloudagent/vc/tests/document_loader.py +++ b/aries_cloudagent/vc/tests/document_loader.py @@ -11,6 +11,7 @@ VACCINATION_V1, ODRL, SCHEMA_ORG, + DIF_PRESENTATION_SUBMISSION_V1, ) from ..ld_proofs.constants import ( SECURITY_CONTEXT_V2_URL, @@ -49,6 +50,7 @@ "https://www.w3.org/ns/odrl.jsonld": ODRL, "http://schema.org/": SCHEMA_ORG, "https://w3id.org/vaccination/v1": VACCINATION_V1, + "https://identity.foundation/presentation-exchange/submission/v1": DIF_PRESENTATION_SUBMISSION_V1, }