Documentation
DID Technical Specification
The OCME Media Registry uses Decentralized Identifiers (DIDs) to provide secure, trustworthy records for all assets in our system. DIDs ensure that every piece of media, content, creator information, and rights allocation can be verified with the highest level of cryptographic security. This page explains how our DID system works and the structure of our digital identity records.
Media Entity DID Document
Status: Active
Media DIDs form the foundation of our identity system. Each media file receives a unique digital
identity with a tamper-proof signature that guarantees authenticity and enables secure verification.
- @context: W3C and OCME media context URIs
- id: The DID (e.g.,
did:webvh:did.ocmeregistry.com:media:7ac7285d4c9d17e3) - created, updated: ISO 8601 timestamps
- controller: Admin DID
- verificationMethod: RSA 2048-bit public key (
RsaVerificationKey2018) - authentication: References admin key
- mediaData:
- fileInfo: fileHash, originalFilename, originalPath, fileSize, uploadDate, sourceSystem
- technicalMetadata: format, duration, bitRate, video/audio details, etc.
- processingStatus: analyzed, analyzedDate, inR2, didAssigned
- proof:
- type: RsaSignature2018
- created: timestamp
- verificationMethod: admin key reference
- proofPurpose: assertionMethod
- signatureValue: base64 signature
Full Example: Media DID Document
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://ocmeregistry.com/contexts/media/v1"
],
"id": "did:webvh:did.ocmeregistry.com:media:7ac7285d4c9d17e3",
"created": "2025-04-19T08:57:57.666Z",
"updated": "2025-04-19T08:57:57.666Z",
"controller": "did:webvh:did.ocmeregistry.com:admin",
"verificationMethod": [
{
"id": "did:webvh:did.ocmeregistry.com:admin#key-0",
"type": "RsaVerificationKey2018",
"controller": "did:webvh:did.ocmeregistry.com:admin",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAriBz6g4kPy8h/W40dee1\nCaNCzDDw1rwgxeA1qbfwIl1aCK2+YM9cBqFy0Rcc3z4r6Ski8N9rxRh7fWzwLPvQ\nAmJokBV6T1pbEpjR2nW4PXt6Zo4ZHfyY/pG0GFSL3NBQXgyf3IGEBzCCFRtywR7t\nHRGeHib/74A0ovdzgJTFOaFIIAnoEI25oAqO27G8unja4KtAsvRJdOiukf3dZF1T\nDcx34UpRohObhCyam62aRhS81oDPFdZf81N8EWsgKVAUDnPYsC9EhLCllg8OIbwo\nDUqyWB6So3p0huRBidnHf6t1SPjFS5X0ZQ+/udWgrjk4KBY4WFZWk0HkJPyQXZb6\nEQIDAQAB\n-----END PUBLIC KEY-----"
}
],
"authentication": ["did:webvh:did.ocmeregistry.com:admin#key-0"],
"mediaData": {
"fileInfo": {
"fileHash": "0e832f8744447cc359287a8f50ca221e2744af5ddbcf8a2b480f6efb4bb02e82",
"originalFilename": "1739872357171-chocolate_1_chf3_prob4k.mp4",
"originalPath": "_content/processing/aimvs_1900_uploads/1739872357171-chocolate_1_chf3_prob4k.mp4",
"fileSize": 5514288111,
"uploadDate": "2025-04-19T08:57:57.666Z",
"sourceSystem": "aimvs_1900_uploads"
},
"technicalMetadata": {
"format": "MPEG-4",
"duration": 217.686,
"bitRate": 202651089,
"totalStreams": 0,
"video": {
"codec": "AVC",
"resolution": { "width": 3840, "height": 2160 },
"frameRate": 60.115,
"aspectRatio": "1.778",
"bitDepth": 8,
"colorSpace": "YUV",
"profile": "High",
"scanType": "Progressive"
},
"audio": {
"codec": "AAC",
"channels": 2,
"sampleRate": 48000,
"bitRate": 192000,
"language": "en"
}
},
"processingStatus": {
"analyzed": true,
"analyzedDate": "2025-04-19T08:57:57.666Z",
"inR2": false,
"didAssigned": true
}
},
"proof": {
"type": "RsaSignature2018",
"created": "2025-04-19T08:57:57.666Z",
"verificationMethod": "did:webvh:did.ocmeregistry.com:admin#key-0",
"proofPurpose": "assertionMethod",
"signatureValue": "mN6HfBMRhK9phES2z/AQHq07PaRYIgSYMG20vRWSY5AFJRUJyVmhyPC5ffIaU4l29iGDk+/bzY/ZRZJeQ1H/rejjFwuEXQwMWUAlTvy1kh1/gCAqY47GQ121oIG5nq2fFRb3NWrvtV8DgVoSUsRvZXvsmAgpxFp/jUJlr71yQNLCweQxOATiSdnnN4BS82RCaSCaRxs9OxB4kd7YfE6Gs1+2VZ+qjNC7QwCbBmwCtuEiS3BPegBIAGPjzMTI3HGarujSZbTSNYk6SUzrxy9N6Hao/lzE8o/kc0A0MKeH/DjpWKHfrCuTYVHoLcK+Pq58YgqdsgOVj/j+hoMaVJq7Vg=="
}
}
Cryptographic Verification: Each media DID document is signed with an RSA 2048-bit key. Signature verification is implemented in the codebase.
Field-by-Field Breakdown
- @context: Array of URIs specifying the JSON-LD context. Always includes the W3C DID context and a registry-specific context for media.
- id: The unique Decentralized Identifier for this media entity, following the
did:webvhmethod. - created: ISO 8601 timestamp when the DID document was created.
- updated: ISO 8601 timestamp when the DID document was last updated.
- controller: The DID of the entity (typically admin) that controls this DID document.
- verificationMethod: Array of verification methods. Each includes:
- id: Fragment identifier for the key (e.g.,
#key-0). - type: Key type, e.g.,
RsaVerificationKey2018. - controller: DID of the key controller.
- publicKeyPem: PEM-encoded public key used for signature verification.
- id: Fragment identifier for the key (e.g.,
- authentication: Array referencing verification methods used for authentication (typically the admin key).
- mediaData: Object containing all business and technical metadata for the
media entity.
- fileInfo: File-level metadata.
- fileHash: SHA-256 hash of the file.
- originalFilename: Original filename of the media file.
- originalPath: Path to the file in the source system.
- fileSize: Size of the file in bytes.
- uploadDate: ISO 8601 timestamp of upload.
- sourceSystem: Name of the source system or upload batch.
- technicalMetadata: Technical details extracted from the media file.
- format: File format (e.g., MPEG-4).
- duration: Duration in seconds.
- bitRate: Bitrate in bits per second.
- totalStreams: Number of streams (audio/video) in the file.
- video: Video stream details.
- codec: Video codec (e.g., AVC).
- resolution: Object with width and height in pixels.
- frameRate: Frames per second.
- aspectRatio: Aspect ratio as a string or float.
- bitDepth: Bit depth of the video stream.
- colorSpace: Color space (e.g., YUV).
- profile: Codec profile (e.g., High).
- scanType: Scan type (e.g., Progressive).
- audio: Audio stream details.
- codec: Audio codec (e.g., AAC).
- channels: Number of audio channels.
- sampleRate: Audio sample rate in Hz.
- bitRate: Audio bitrate in bits per second.
- language: Language code (e.g., "en").
- processingStatus: Status of processing and DID assignment.
- analyzed: Boolean indicating if the file was analyzed.
- analyzedDate: ISO 8601 timestamp of analysis.
- inR2: Boolean indicating if the file is in R2 storage.
- didAssigned: Boolean indicating if a DID was assigned.
- fileInfo: File-level metadata.
- proof: Cryptographic proof of the DID document.
- type: Signature type (e.g.,
RsaSignature2018). - created: ISO 8601 timestamp of signature creation.
- verificationMethod: Reference to the key used for signing.
- proofPurpose: Purpose of the proof (e.g.,
assertionMethod). - signatureValue: Base64-encoded digital signature.
- type: Signature type (e.g.,
Content Entity DID Document
Status: Active
Content DIDs connect creative works to their media files and creators. These identifiers store essential
information about the work, including title, description, and the network of relationships to other entities.
- @context: W3C and OCME content context URIs
- id: The DID (e.g.,
did:webvh:did.ocmeregistry.com:content:a1b2c3d4e5f6g7h8) - created, updated: ISO 8601 timestamps
- controller: Admin DID
- verificationMethod: RSA 2048-bit public key (
RsaVerificationKey2018) - authentication: References admin key
- contentData:
- title: Content title
- description: Content description
- keywords: Array of keywords
- mediaId: Reference to media entity DID
- creatorIds: Array of creator entity DIDs
- splitSheetId: Reference to split sheet entity DID
- releaseDate: ISO 8601 date
- status: Content status (e.g., "draft", "published")
- createdAt, updatedAt: ISO 8601 timestamps
- proof:
- type: RsaSignature2018
- created: timestamp
- verificationMethod: admin key reference
- proofPurpose: assertionMethod
- signatureValue: base64 signature
Example: Content DID Document
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://ocmeregistry.com/contexts/content/v1"
],
"id": "did:webvh:did.ocmeregistry.com:content:a1b2c3d4e5f6g7h8",
"created": "2023-04-23T10:15:30Z",
"updated": "2023-04-23T10:15:30Z",
"controller": "did:webvh:did.ocmeregistry.com:admin",
"verificationMethod": [
{
"id": "did:webvh:did.ocmeregistry.com:admin#key-0",
"type": "RsaVerificationKey2018",
"controller": "did:webvh:did.ocmeregistry.com:admin",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5NhXMbQ/Bd+M6J8qGFQ\nUK2QAHCgUW0NeUVWbP0j9z0l2lLGqK2HfR/cIUk3uQdKBWMdIrfzQRmzjsKGRYCx\nPJk8mUL9quaPcXUVTZmQ7jOTKO4WRR8XZU9TBpKO7d9ULnqRD7va1Gmwc/1VQiQv\nBiO7xNQUMM4qvIgEJnSU9kK1y1Bcn0HwzKEWdQtvnCXnbO9FgdxcnLgxJJgNUcxj\nA1eCyLkBCGZ+Eu/ZYiWRvCZYpkZOZ4TiXRyXxaUCjLnCm7RCtBi6S3x9JzCX+1iG\nGXGWsjrAQQkQ1ZzJJXnKiPML1Ixkm5JlQNCQcQFu7AxRDNTGVLfMOkL+yANKSRER\nxwIDAQAB\n-----END PUBLIC KEY-----\n"
}
],
"authentication": [
"did:webvh:did.ocmeregistry.com:admin#key-0"
],
"contentData": {
"title": "Cosmic Beats Session 12",
"description": "Live session recording from Cosmic Beats featuring new material",
"keywords": ["electronic", "ambient", "live session"],
"mediaId": "did:webvh:did.ocmeregistry.com:media:7ac7285d4c9d17e3",
"creatorIds": [
"did:webvh:did.ocmeregistry.com:creator:b2c3d4e5f6g7h8i9"
],
"splitSheetId": "did:webvh:did.ocmeregistry.com:splitsheet:c3d4e5f6g7h8i9j0",
"releaseDate": "2023-03-15",
"status": "published",
"createdAt": "2023-04-23T10:15:30Z",
"updatedAt": "2023-04-23T10:15:30Z"
},
"proof": {
"type": "RsaSignature2018",
"created": "2023-04-23T10:15:30Z",
"verificationMethod": "did:webvh:did.ocmeregistry.com:admin#key-0",
"proofPurpose": "assertionMethod",
"signatureValue": "base64-encoded-signature"
}
}
Creator Entity DID Document
Status: Active
Creator DIDs securely establish the identity of content creators in our system. These records maintain
the crucial connection between creators and their works while preserving their contact information and attribution details.
- @context: W3C and OCME creator context URIs
- id: The DID (e.g.,
did:webvh:did.ocmeregistry.com:creator:b2c3d4e5f6g7h8i9) - created, updated: ISO 8601 timestamps
- controller: Admin DID
- verificationMethod: RSA 2048-bit public key (
RsaVerificationKey2018) - authentication: References admin key
- creatorData:
- name: Creator name
- email: Creator email
- socialMedia: Social media handles
- contentIds: Array of content entity DIDs
- status: Creator status (e.g., "active")
- createdAt, updatedAt: ISO 8601 timestamps
- proof:
- type: RsaSignature2018
- created: timestamp
- verificationMethod: admin key reference
- proofPurpose: assertionMethod
- signatureValue: base64 signature
Example: Creator DID Document
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://ocmeregistry.com/contexts/creator/v1"
],
"id": "did:webvh:did.ocmeregistry.com:creator:b2c3d4e5f6g7h8i9",
"created": "2023-04-23T10:20:15Z",
"updated": "2023-04-23T10:20:15Z",
"controller": "did:webvh:did.ocmeregistry.com:admin",
"verificationMethod": [
{
"id": "did:webvh:did.ocmeregistry.com:admin#key-0",
"type": "RsaVerificationKey2018",
"controller": "did:webvh:did.ocmeregistry.com:admin",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5NhXMbQ/Bd+M6J8qGFQ\nUK2QAHCgUW0NeUVWbP0j9z0l2lLGqK2HfR/cIUk3uQdKBWMdIrfzQRmzjsKGRYCx\nPJk8mUL9quaPcXUVTZmQ7jOTKO4WRR8XZU9TBpKO7d9ULnqRD7va1Gmwc/1VQiQv\nBiO7xNQUMM4qvIgEJnSU9kK1y1Bcn0HwzKEWdQtvnCXnbO9FgdxcnLgxJJgNUcxj\nA1eCyLkBCGZ+Eu/ZYiWRvCZYpkZOZ4TiXRyXxaUCjLnCm7RCtBi6S3x9JzCX+1iG\nGXGWsjrAQQkQ1ZzJJXnKiPML1Ixkm5JlQNCQcQFu7AxRDNTGVLfMOkL+yANKSRER\nxwIDAQAB\n-----END PUBLIC KEY-----\n"
}
],
"authentication": [
"did:webvh:did.ocmeregistry.com:admin#key-0"
],
"creatorData": {
"name": "Cosmic Beats",
"email": "contact@cosmicbeats.com",
"socialMedia": {
"instagram": "@cosmic_beats_official",
"twitter": "@cosmic_beats",
"website": "https://cosmicbeats.com"
},
"contentIds": [
"did:webvh:did.ocmeregistry.com:content:a1b2c3d4e5f6g7h8"
],
"status": "active",
"createdAt": "2023-04-23T10:20:15Z",
"updatedAt": "2023-04-23T10:20:15Z"
},
"proof": {
"type": "RsaSignature2018",
"created": "2023-04-23T10:20:15Z",
"verificationMethod": "did:webvh:did.ocmeregistry.com:admin#key-0",
"proofPurpose": "assertionMethod",
"signatureValue": "base64-encoded-signature"
}
}
Split Sheet Entity DID Document
Status: Active
Split Sheet DIDs provide transparent and secure records of revenue allocation agreements between creators.
These cryptographically signed documents establish clear attribution and ownership percentages for creative works.
- @context: W3C and OCME splitsheet context URIs
- id: The DID (e.g.,
did:webvh:did.ocmeregistry.com:splitsheet:c3d4e5f6g7h8i9j0) - created, updated: ISO 8601 timestamps
- controller: Admin DID
- verificationMethod: RSA 2048-bit public key (
RsaVerificationKey2018) - authentication: References admin key
- splitSheetData:
- contentId: Reference to content entity DID
- allocations: Array of creator allocations with percentages
- totalPercentage: Sum of all allocations (must be 100)
- status: Split sheet status (e.g., "active")
- createdAt, updatedAt: ISO 8601 timestamps
- proof:
- type: RsaSignature2018
- created: timestamp
- verificationMethod: admin key reference
- proofPurpose: assertionMethod
- signatureValue: base64 signature
Example: Split Sheet DID Document
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://ocmeregistry.com/contexts/splitsheet/v1"
],
"id": "did:webvh:did.ocmeregistry.com:splitsheet:c3d4e5f6g7h8i9j0",
"created": "2023-04-23T10:25:45Z",
"updated": "2023-04-23T10:25:45Z",
"controller": "did:webvh:did.ocmeregistry.com:admin",
"verificationMethod": [
{
"id": "did:webvh:did.ocmeregistry.com:admin#key-0",
"type": "RsaVerificationKey2018",
"controller": "did:webvh:did.ocmeregistry.com:admin",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5NhXMbQ/Bd+M6J8qGFQ\nUK2QAHCgUW0NeUVWbP0j9z0l2lLGqK2HfR/cIUk3uQdKBWMdIrfzQRmzjsKGRYCx\nPJk8mUL9quaPcXUVTZmQ7jOTKO4WRR8XZU9TBpKO7d9ULnqRD7va1Gmwc/1VQiQv\nBiO7xNQUMM4qvIgEJnSU9kK1y1Bcn0HwzKEWdQtvnCXnbO9FgdxcnLgxJJgNUcxj\nA1eCyLkBCGZ+Eu/ZYiWRvCZYpkZOZ4TiXRyXxaUCjLnCm7RCtBi6S3x9JzCX+1iG\nGXGWsjrAQQkQ1ZzJJXnKiPML1Ixkm5JlQNCQcQFu7AxRDNTGVLfMOkL+yANKSRER\nxwIDAQAB\n-----END PUBLIC KEY-----\n"
}
],
"authentication": [
"did:webvh:did.ocmeregistry.com:admin#key-0"
],
"splitSheetData": {
"contentId": "did:webvh:did.ocmeregistry.com:content:a1b2c3d4e5f6g7h8",
"allocations": [
{
"creatorId": "did:webvh:did.ocmeregistry.com:creator:b2c3d4e5f6g7h8i9",
"role": "composer",
"percentage": 100
}
],
"totalPercentage": 100,
"status": "active",
"createdAt": "2023-04-23T10:25:45Z",
"updatedAt": "2023-04-23T10:25:45Z"
},
"proof": {
"type": "RsaSignature2018",
"created": "2023-04-23T10:25:45Z",
"verificationMethod": "did:webvh:did.ocmeregistry.com:admin#key-0",
"proofPurpose": "assertionMethod",
"signatureValue": "base64-encoded-signature"
}
}
DID Method
The OCME Media Registry uses the did:webvh method, which is a variant of the did:web method that supports hierarchical identifiers. The format is:
did:webvh:<domain>:<entity-type>:<unique-id>
Where:
- <domain>: The domain hosting the DID documents (did.ocmeregistry.com)
- <entity-type>: The type of entity (media, content, creator, splitsheet)
- <unique-id>: A 16-character hexadecimal identifier
Cryptographic Signing
All entities in our system are secured using industry-standard RSA 2048-bit keys for digital signatures and verification, providing a high level of cryptographic security.
DID Specification Features
- Implemented Features:
- Media entity DIDs with cryptographic signing and verification
- Content entity DIDs with signing and proper references to media and creators
- Creator entity DIDs with metadata and contact information
- Split sheet entity DIDs with allocation percentages and roles
- W3C DID Document compliance for all entity types
- Single admin keypair for signing all documents
- RSA 2048-bit keys for all entity types
- Signature verification for all document types