This is the most recent implementation report for the Decentralized Identifiers (DIDs) specification.

Comments regarding this document are welcome. Please file issues directly on GitHub, or send them to public-credentials@w3.org (subscribe, archives).

Introduction

The purpose of this document is to demonstrate that there are multiple interoperable implementations of Decentralized Identifiers (DIDs) that are capable of generating output that is conformant to the latest version.

Testing Methodology

The testing framework for Decentralized Identifiers (DIDs) executes the following process for every conformance statement in the Decentralized Identifiers (DIDs) specification :

  1. Take an input that exercises the feature and feed it to a developer provided Decentralized Identifiers (DIDs) binary.
  2. If the input is valid, generate a DID from the input.
  3. The test suite then ensures that the generated DID is conformant to the feature being tested.

Conformance Testing Results

The results of the conformance testing are shown below:

Identifier

Test node
positive The did: scheme name MUST be lowercase.
positive (did) The method name MUST be lowercase.
positive A DID method specification MUST further restrict the generic DID syntax by defining its own method-name and its own method-specific-id syntax.
positive A method-specific parameter name MUST be prefixed by the method name as defined by the method-name rule.
positive A generic DID path is identical to a URI path and MUST conform to the the path-abempty ABNF rule in [RFC3986].
positive A generic DID query is identical to a URI query and MUST conform to the the query ABNF rule in [RFC3986].
positive A generic DID fragment is identical to a URI fragment and MUST conform to the the fragment ABNF rule in [RFC3986]
negative The did: scheme name MUST be lowercase.
negative (did) The method name MUST be lowercase.
negative A DID method specification MUST further restrict the generic DID syntax by defining its own method-name and its own method-specific-id syntax.
negative A method-specific parameter name MUST be prefixed by the method name as defined by the method-name rule.
optional Method-specific parameter names MAY be combined with generic parameter names in any order.

Document

Test node
positive The value of the @context property MUST be one or more URIs, where the value of the first URI is https://www.w3.org/2019/did/v1.
positive If more than one URI is provided, the URIs MUST be interpreted as an ordered set.
positive DID Documents MUST include the @context property.
positive A DID Document MUST have exactly one top-level context statement.
positive The key for this property (context) MUST be @context.
positive The value of this key MUST be at least the URL for the generic DID context: https://www.w3.org/2019/did/v1.
positive Method-specific contexts MUST NOT override the terms defined in the generic DID context.
positive A DID Document MUST have exactly one DID subject.
positive The key for this property MUST be id.
positive The value of this key MUST be a valid DID.
positive However, the fully resolved DID Document MUST contain a valid id property.
positive A DID Document MUST be a single JSON object conforming to [RFC8259].
negative The value of the @context property MUST be one or more URIs, where the value of the first URI is https://www.w3.org/2019/did/v1.
negative If more than one URI is provided, the URIs MUST be interpreted as an ordered set.
negative DID Documents MUST include the @context property.
negative A DID Document MUST have exactly one top-level context statement.
negative The key for this property (context) MUST be @context.
negative The value of this key MUST be at least the URL for the generic DID context: https://www.w3.org/2019/did/v1.
negative Method-specific contexts MUST NOT override the terms defined in the generic DID context.
negative A DID Document MUST have exactly one DID subject.
negative The key for this property MUST be id.
negative The value of this key MUST be a valid DID.
negative However, the fully resolved DID Document MUST contain a valid id property.
negative A DID Document MUST be a single JSON object conforming to [RFC8259].
optional A DID Document MAY include an authentication property The value of the authentication property should be an array of verification methods
optional A DID Document MAY include an authentication property Each verification method MAY be embedded or referenced
optional A DID Document MAY include a service property The value of the service property should be an array of service endpoint
optional A DID Document MAY include a service property Each service endpoint must include id, type, and serviceEndpoint properties, and MAY include additional properties
optional A DID Document MAY include a service property The value of the serviceEndpoint property MUST be a JSON-LD object or a valid URI
optional A DID Document MAY include a publicKey property positive A DID Document that contains a revoked key MUST also contain or refer to the revocation information for the key (e.g., a revocation list).
optional A DID Document MAY include a publicKey property positive The value of the publicKey property MUST be an array of public keys.
optional A DID Document MAY include a publicKey property positive Each public key MUST include id and type properties, and exactly one value property. The array of public keys MUST NOT contain duplicate entries with the same id.
optional A DID Document MAY include a publicKey property positive Each public key MUST include a controller property, which identifies the controller of the corresponding private key.
optional A DID Document MAY include a publicKey property positive The value property of a public key MUST be exactly one of publicKeyPem, publicKeyJwk, publicKeyHex, publicKeyBase64, publicKeyBase58, publicKeyMultibase, depending on the format and encoding of the public key.
optional A DID Document MAY include a publicKey property negative The value of the publicKey property MUST be an array of public keys.
optional A DID Document MAY include a publicKey property negative Each public key MUST include id and type properties, and exactly one value property. The array of public keys MUST NOT contain duplicate entries with the same id.
optional A DID Document MAY include a publicKey property negative Each public key MUST include a controller property, which identifies the controller of the corresponding private key.
optional A DID Document MAY include a publicKey property negative The value property of a public key MUST be exactly one of publicKeyPem, publicKeyJwk, publicKeyHex, publicKeyBase64, publicKeyBase58, publicKeyMultibase, depending on the format and encoding of the public key.