Thanks to visit codestin.com
Credit goes to Github.com

Skip to content
/ vds Public

simple library for ICAO Visible Digital Seals (VDS). supports browsers, node, bun and more!

License

Notifications You must be signed in to change notification settings

li0ard/vds

Repository files navigation

vds logo

@li0ard/vds
simple library for visible digital seals (VDS)
docs




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, mapSealToFeatures, type SealSchema } from "@li0ard/vds";

const ICAO_EMERGENCY_TRAVEL_DOCUMENT = {
    documentRef: 0x5e03,
    version: 4,
    features: [
        {
            name: "MRZ",
            coding: FeatureCoding.MRZ,
            tag: 2,
            required: true
        }
    ]
} as const satisfies SealSchema;

const seal = Buffer.from("DC03....", "hex");
const decodedSeal = Seal.decode(seal);
console.log(mapSealToFeatures(decodedSeal, schema)); // - { "MRZ": "..." }

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