@li0ard/vds
v0.1.4
Published
simple library for ICAO Visible Digital Seals (VDS). supports browsers, node, bun and more!
Maintainers
Readme
Features
- Simple: Hides decoding process and provides simple and modern API
- Type-Safe: Most of the APIs are strictly typed to help your workflow
- Compliance: Fully complies with ICAO 9303, BSI TR-03137 and other standards
- Supports Bun, Node.js, Deno, Browsers, Cloudflare Workers
- Supports many curves from
@noble/curves
Installation
# from NPM
npm i @li0ard/vds
# from JSR
bunx jsr add @li0ard/vds Usage
Parse digital seal
import { Seal } from "@li0ard/vds";
const seal = Buffer.from("DC03....", "hex");
const decodedSeal = Seal.decode(seal);
console.log(decodedSeal);Verify digital seal
import { Seal, Verifier } from "@li0ard/vds";
import { brainpoolP256r1 } from "@noble/curves/misc.js";
const publicKey = Buffer.from("0408....", "hex");
const verifier = new Verifier(brainpoolP256r1, publicKey);
const seal = Buffer.from("DC03....", "hex");
const decodedSeal = Seal.decode(seal);
console.log(verifier.verifySeal(decodedSeal));Map VDS with schema
import { Seal, VDSDocument, VDSProp, decodeSeal, FeatureCoding, encodeSeal } from "@li0ard/vds";
@VDSDocument({ documentRef: 0x5e03, version: 4 })
class ICAOEmergencyTravelDocument {
@VDSProp({ tag: 2, coding: FeatureCoding.MRZ })
mrz!: string;
}
const seal = Buffer.from("DC03....", "hex");
const decodedSeal = Seal.decode(seal);
const mapped = decodeSeal(decodedSeal, ICAOEmergencyTravelDocument);
console.log(mapped);
// Also serialize back
console.log(encodeSeal(mapped));Parse ICAO barcode (IDB)
import { ICAOBarcode } from "@li0ard/vds";
const barcode = "RDB1B...";
const decodedBarcode = ICAOBarcode.decode(barcode);
console.log(decodedBarcode);Verify ICAO barcode (IDB)
import { ICAOBarcode, Verifier } from "@li0ard/vds";
import { brainpoolP256r1 } from "@noble/curves/misc.js";
const publicKey = Buffer.from("0408....", "hex");
const verifier = new Verifier(brainpoolP256r1, publicKey);
const barcode = "RDB1B...";
const decodedBarcode = ICAOBarcode.decode(barcode);
console.log(verifier.verifyBarcode(decodedBarcode));Links
- vdstools - An Open Source Kotlin Implementation of VDS and IDB (greatly inspired)
- ICAO 9303 - Specifications to VDS
- BSI TR-03137 - Specifications to VDS (with example documents)
- ICAO TR "ICAO Datastructure for Barcode" - Specifications to IDB
