Skip to main content
Version: 0.7

Protocols

An exchange protocol defines how issuers, holders and verifiers talk to each other. Credo supports OpenID4VC, DIDComm and the ISO mdoc protocols.

Which protocol should I use?​

UseWhen
OpenID4VCBy default, for new issuers, wallets and verifiers. It only needs HTTPS, carries SD-JWT VC and mdoc, and is what the EU Digital Identity Wallet and the HAIP profile use.
ISO mdocA wallet presents mdocs, such as a mobile driving licence, in person to a reader over BLE or NFC. A wallet usually receives those mdocs with OpenID4VCI.
DIDCommYou join an ecosystem built on DIDComm and AnonCreds, or the parties need a lasting connection to exchange messages beyond a single issuance or presentation.

OpenID4VC​

OpenID4VC builds on OAuth 2.0 and plain HTTPS. OpenID4VCI covers issuance and OpenID4VP covers presentation. An issuer or verifier starts each exchange with a QR code or link, and the wallet completes it with a few HTTPS requests. Nothing persists between exchanges. This is the protocol family of the EU Digital Identity Wallet and its HAIP profile, and of mobile driving licences (mDL) presented online.

DIDComm​

DIDComm is a messaging protocol between agents that identify each other with DIDs. Two agents first set up a connection, usually from an out-of-band invitation. Over that connection either side can then offer credentials, request proofs or send other messages, for as long as the connection lasts. Mobile wallets can't accept incoming connections, so they receive messages through a mediator. DIDComm is used in ecosystems built on Hyperledger Aries and AnonCreds.

ISO mdoc​

ISO mdoc covers the presentation protocols of ISO/IEC 18013-5 and 18013-7, which carry only mdocs, such as the mobile driving licence. A wallet presents in person to a reader over BLE or NFC (proximity), or to a website through the browser (ISO 18013-7 Annex C). Like OpenID4VC, each presentation stands alone. These protocols don't cover issuance.

Digital Credentials API​

The W3C Digital Credentials API lets a website request credentials through the browser, which passes the request to a wallet. It's a channel for other protocols: Credo supports it with OpenID4VP and with ISO 18013-7 Annex C.

Comparison​

OpenID4VCDIDCommISO mdoc
TransportHTTPS requests from the wallet to the issuer or verifierEncrypted messages over HTTP or WebSocket, through a mediator for mobile walletsBLE or NFC in person, or the browser with the Digital Credentials API
RelationshipNone: each exchange stands aloneA connection that both agents keepNone: each presentation stands alone
Starts withA credential offer or authorization requestAn out-of-band invitationA QR code or NFC tap, or a website calling the Digital Credentials API
Issuer and verifierNode.jsNode.jsNo issuer. Verifier on Node.js
HolderNode.js and React NativeNode.js and React NativeNode.js and React Native
Typical ecosystemsEU Digital Identity Wallet, HAIP, mDLAries and AnonCreds ecosystemsmDL and EU PID, in person and online

Credential formats​

FormatOpenID4VCDIDCommISO mdoc
SD-JWT VCYesNoNo
mdocYesNoYes
W3C VCYesYesNo
AnonCredsNoYesNo

Which W3C data models and proof types work depends on the protocol and on whether you issue or present. Supported standards has the full matrix.

How these pages are organised​