/
Verifiable Credentials DIDKit (Rust) and Sign-and-verify (JS) comparison

Verifiable Credentials DIDKit (Rust) and Sign-and-verify (JS) comparison

During VC implementation for Open edX, we have faced a problem that LC Wallet (JS based) doesn’t verify VC signed by DIDKit library.

Below, you can see an example of the same credential, signed by two different services.

Credential JSON-LD

Note: Only the issuer ID is different for sign-and-verify and DIDKit

{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://purl.imsglobal.org/spec/ob/v3p0/context.json", "https://w3id.org/security/suites/ed25519-2020/v1" ], "id": "urn:uuid:69bd185b-9863-4935-bdd6-95c4fb39b033", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "credentialSubject": { "id": "did:key:z6MkkePoGJV8CQJJULSHHUEv71okD9PsrqXnZpNQuoUfb3id", "type": "AchievementSubject", "achievement": { "id": "59703bad-6f06-4a0b-9d32-857cff023714", "type": "Achievement" } }, "issuer": { "id": "did:key:z6MkhVTX9BF3NGYX6cc7jWpbNnR7cAjH8LUffabZP8Qu4ysC", "type": "Profile", "name": "Default verifiable credentials issuer" }, "issuanceDate": "2023-04-17T20:38:24Z", "validFrom": "2023-04-17T20:38:24Z", "issued": "2023-04-17T20:38:24Z", "name": "Program Certificate" }

 

Signed with Sign-and-verify

Signed with DIDKit

Signed with Sign-and-verify

Signed with DIDKit

{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://purl.imsglobal.org/spec/ob/v3p0/context.json", "https://w3id.org/security/suites/ed25519-2020/v1" ], "id": "urn:uuid:69bd185b-9863-4935-bdd6-95c4fb39b033", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "credentialSubject": { "id": "did:key:z6MkkePoGJV8CQJJULSHHUEv71okD9PsrqXnZpNQuoUfb3id", "achievement": { "id": "59703bad-6f06-4a0b-9d32-857cff023714", "type": "Achievement" }, "type": "AchievementSubject" }, "issuer": { "id": "did:key:z6MkhVTX9BF3NGYX6cc7jWpbNnR7cAjH8LUffabZP8Qu4ysC", "type": "Profile", "name": "Default verifiable credentials issuer" }, "issuanceDate": "2023-04-17T13:46:21Z", "name": "Program Certificate", "issued": "2023-04-17T13:46:21Z", "validFrom": "2023-04-17T13:46:21Z", "proof": { "type": "Ed25519Signature2020", "created": "2023-04-17T18:59:57Z", "verificationMethod": "did:key:z6MkhVTX9BF3NGYX6cc7jWpbNnR7cAjH8LUffabZP8Qu4ysC#z6MkhVTX9BF3NGYX6cc7jWpbNnR7cAjH8LUffabZP8Qu4ysC", "proofPurpose": "assertionMethod", "proofValue": "z35SiCqJ5zxotffd6wCNRXSJzhWtkSG1b8WafReXKe3334ZdyRCCVCAgHZyre7vmsHM5482Ud4N9PnAGnPi9xtaMp" } }
{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://purl.imsglobal.org/spec/ob/v3p0/context.json" ], "id": "urn:uuid:69bd185b-9863-4935-bdd6-95c4fb39b033", "type": [ "VerifiableCredential", "OpenBadgeCredential" ], "credentialSubject": { "id": "did:key:z6MkkePoGJV8CQJJULSHHUEv71okD9PsrqXnZpNQuoUfb3id", "type": "AchievementSubject", "achievement": { "id": "59703bad-6f06-4a0b-9d32-857cff023714", "type": "Achievement" } }, "issuer": { "id": "did:key:z6MkkePoGJV8CQJJULSHHUEv71okD9PsrqXnZpNQuoUfb3id", "type": "Profile", "name": "Default verifiable credentials issuer" }, "issuanceDate": "2023-04-17T20:38:24Z", "proof": { "@context": [ "https://w3id.org/security/suites/ed25519-2020/v1" ], "type": "Ed25519Signature2020", "proofPurpose": "assertionMethod", "proofValue": "z8CUP1dYx2Q3skeaZtvw9u22pLaRYvTmjSP9SLfV3dNXPfhDg3UofCRZdKRhSPQtSJeTS9iDtyjB5XmDvPbGxkPv", "challenge": "69bd185b-9863-4935-bdd6-95c4fb39b033", "verificationMethod": "did:key:z6MkkePoGJV8CQJJULSHHUEv71okD9PsrqXnZpNQuoUfb3id#z6MkkePoGJV8CQJJULSHHUEv71okD9PsrqXnZpNQuoUfb3id", "created": "2023-04-17T20:38:24.592Z" }, "validFrom": "2023-04-17T20:38:24Z", "issued": "2023-04-17T20:38:24Z", "name": "Program Certificate" }

The problem: DIDkit always provides @context in proof object (see code), but Sign-and-verify can’t parse a proof if it’s not in the global context.

The list of static context in DIDkit doesn’t include any proof suites, list of implemented contexts

 

Refs.
Ed25519Signature2020 DIDkit Implementation

Compilation of the Postman examples of signing and verification with sign-and-verify API: https://documenter.getpostman.com/view/12194329/2s93XzwMmm

 

 

Test Op between DIDKit and Sign-and-verify

 

Related content

Verifiable Credentials integration - Solution Notes
Verifiable Credentials integration - Solution Notes
More like this
Authentication Challenges
Authentication Challenges
More like this
Intro to Verifiable Credentials
Intro to Verifiable Credentials
More like this
Verifiable Credentials for education: existing implementations
Verifiable Credentials for education: existing implementations
More like this
Verifiable Credentials DIDKit-python Open Questions
Verifiable Credentials DIDKit-python Open Questions
More like this
Credentials: Sharing Verified Credential Initiative
Credentials: Sharing Verified Credential Initiative
More like this