@syadem/evc-js
v0.0.8
Published
**evc-js** is a JavaScript library for parsing and verifying JWT tokens in the **EVC** (European Vaccination Certificate) format. This format ensures the secure sharing of vaccination history.
Downloads
69
Readme
evc-js
evc-js is a JavaScript library for parsing and verifying JWT tokens in the EVC (European Vaccination Certificate) format. This format ensures the secure sharing of vaccination history.
📌 Features
- ✅ Parsing: Extracts and validates data from an EVC JWT.
- 🔐 Verification: Checks JWT signature using a public key.
- 📜 Schema Validation: Ensures the JWT complies with the EVC standard.
- 🛠 Interoperability: Designed for data transfer between health information systems.
🚀 Installation
npm install @syadem/evc-js🎯 Usage
Verify an EVC JWT
import { parseJwtEvc, Evc } from '@syadem/evc-js';
import { importSPKI } from "jose";
const jwt: string = "eyJhbGciOiJFUzI1NiJ9.eyJkb2IiOiIxOTkwLTAx...";
const publicKey = await importSPKI(
`-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEd26RtDbKuFnLvRshkJdY3t4kDCTQ
J3P4EXio3jcFFoAbus2k5bjc+0Q//Oyy8/4tDyGZ89U/me/pGUORg3+F+Q==
-----END PUBLIC KEY-----`,
"ES256"
);
async function verifyToken(): Promise<void> {
try {
const certificate: Evc = await parseJwtEvc(jwt, publicKey, { currentDate: new Date() });
console.log("Valid certificate:", certificate);
} catch (error) {
console.error("Invalid JWT:", error.message);
}
}
verifyToken();Generate an EVC JWT
import { serializeEvcTokenToJwt, Evc, EvcVaccinationAct } from '@syadem/evc-js';
import { importPKCS8 } from "jose";
const evcCertificate: Evc = {
dateOfBirth: new Date("1990-01-01"),
name: { firstName: "John", lastName: "Doe" },
version: "1.0.0",
// Optional fields
issuer: "SYADEM",
issuedAt: new Date(),
vaccinations: [
{
nuvaCode: 12345,
countryCode: "FRA",
performedOn: new Date("2023-06-15"),
id: 67890
}
]
};
const privateKey = await importPKCS8(
`-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIEjcvGjoeiKWxySsMSDLH1IqtgWcogVlGIelXDBQhmR+oAoGCCqGSM49
AwEHoUQDQgAEd26RtDbKuFnLvRshkJdY3t4kDCTQJ3P4EXio3jcFFoAbus2k5bjc
+0Q//Oyy8/4tDyGZ89U/me/pGUORg3+F+Q==
-----END EC PRIVATE KEY-----`,
"ES256"
);
async function generateToken(): Promise<void> {
try {
const jwt: string = await serializeEvcTokenToJwt(evcCertificate, privateKey);
console.log("Generated JWT:", jwt);
} catch (error) {
console.error("Error generating JWT:", error.message);
}
}
generateToken();🔒 Signature & Security
EVC JWTs are signed using ECDSA (ES256). It is crucial to verify the signature before using the data.
