ISO 18013-5 defines mDL (mobile Driver’s Licenses): an ISO standard for digital driver licenses.
This is a JavaScript library for Node.JS, browers and React Native to issue and verify mDL CBOR encoded documents in accordance with ISO 18013-7 (draft's date: 2024-03-12).
import { DeviceResponse, MDoc } from"@animo-id/mdoc";
(async () => {
let issuerMDoc;
let deviceResponseMDoc;
/**
* This is what the MDL issuer does to generate a credential:
*/
{
let issuerPrivateKey;
let issuerCertificate;
let devicePublicKey; // the public key for the device, as a JWKconstdocument = awaitnewDocument("org.iso.18013.5.1.mDL")
.addIssuerNameSpace("org.iso.18013.5.1", {
family_name: "Jones",
given_name: "Ava",
birth_date: "2007-03-25",
})
.useDigestAlgorithm("SHA-256")
.addValidityInfo({
signed: newDate(),
})
.addDeviceKeyInfo({ deviceKey: devicePublicKey })
.sign({
issuerPrivateKey,
issuerCertificate,
alg: "ES256",
});
issuerMDoc = newMDoc([document]).encode();
}
/**
* This is what the DEVICE does to generate a response...
*/
{
let devicePrivateKey; // the private key for the device, as a JWK// Parameters coming from the OID4VP transactionlet mdocGeneratedNonce, clientId, responseUri, verifierGeneratedNonce;
let presentationDefinition = {
id: "family_name_only",
input_descriptors: [
{
id: "org.iso.18013.5.1.mDL",
format: { mso_mdoc: { alg: ["EdDSA", "ES256"] } },
constraints: {
limit_disclosure: "required",
fields: [
{
path: ["$['org.iso.18013.5.1']['family_name']"],
intent_to_retain: false,
},
],
},
},
],
};
deviceResponseMDoc = awaitDeviceResponse.from(issuerMDoc)
.usingPresentationDefinition(presentationDefinition)
.usingSessionTranscriptForOID4VP(
mdocGeneratedNonce,
clientId,
responseUri,
verifierGeneratedNonce
)
.authenticateWithSignature(devicePrivateKey, "ES256")
.sign();
}
})();