From 29ec9f08a7eea1f43275e7fc85db79a93b663678 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 21 Jan 2024 10:54:32 +0000 Subject: [PATCH] Support for multikey v1 context within jsonld signature verification --- context.py | 42 ++++++++++++++++++++++++++++++++++++++++++ pyjsonld.py | 9 +++++++++ 2 files changed, 51 insertions(+) diff --git a/context.py b/context.py index eea5484f4..e24d82c63 100644 --- a/context.py +++ b/context.py @@ -22,6 +22,7 @@ VALID_CONTEXTS = ( "*/socialweb/webfinger.jsonld", "https://www.w3.org/ns/did/v1", "https://w3id.org/security/multikey/v1", + "https://w3c.github.io/vc-data-integrity/contexts/multikey/v1.jsonld", "https://w3id.org/security/data-integrity/v1" ) @@ -84,6 +85,47 @@ def has_valid_context(post_json_object: {}) -> bool: return True +def get_multikey_v1_schema() -> {}: + """ https://w3id.org/security/multikey/v1 + https://w3c.github.io/vc-data-integrity/contexts/multikey/v1.jsonld + """ + return { + "@context": { + "id": "@id", + "type": "@type", + "@protected": True, + "Multikey": { + "@id": "https://w3id.org/security#Multikey", + "@context": { + "@protected": True, + "id": "@id", + "type": "@type", + "controller": { + "@id": "https://w3id.org/security#controller", + "@type": "@id" + }, + "revoked": { + "@id": "https://w3id.org/security#revoked", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + }, + "expires": { + "@id": "https://w3id.org/security#expiration", + "@type": "http://www.w3.org/2001/XMLSchema#dateTime" + }, + "publicKeyMultibase": { + "@id": "https://w3id.org/security#publicKeyMultibase", + "@type": "https://w3id.org/security#multibase" + }, + "secretKeyMultibase": { + "@id": "https://w3id.org/security#secretKeyMultibase", + "@type": "https://w3id.org/security#multibase" + } + } + } + } + } + + def get_did_v1_schema() -> {}: # https://www.w3.org/ns/did/v1 return { diff --git a/pyjsonld.py b/pyjsonld.py index 062d0a72a..3a02cd5b7 100644 --- a/pyjsonld.py +++ b/pyjsonld.py @@ -49,6 +49,7 @@ from context import get_v1security_schema from context import get_activitystreams_schema from context import get_webfinger_schema from context import get_did_v1_schema +from context import get_multikey_v1_schema try: from functools import cmp_to_key @@ -449,6 +450,14 @@ def load_document(url): 'document': get_webfinger_schema() } return doc + elif (url == "https://w3id.org/security/multikey/v1" or + url.endswith("/vc-data-integrity/contexts/multikey/v1.jsonld")): + doc = { + 'contextUrl': None, + 'documentUrl': url, + 'document': get_multikey_v1_schema() + } + return doc elif url == 'https://litepub.social/litepub/context.jsonld': doc = { 'contextUrl': None,