Skip to content

Releases: tsenger/vdstools

v0.11.0

22 Jan 19:49
1b449ab

Choose a tag to compare

Breaking Changes

Unified API naming for VDS and IDB for consistency

Rename Feature to Message across entire codebase

  • VdsMessage → VdsMessageGroup (container)
  • Feature → Message (generic)
  • DigitalSeal → VdsSeal
  • IdbMessage → Message (generic)
  • IcaoBarcode → IdbSeal
  • FeatureCoding → MessageCoding
  • FeatureValue → MessageValue
  • FeaturesDto → MessageDto

Type-safe value access with MessageValue sealed class

The sealed class provides different value types based on the encoding:

  • ByteValue: Single byte values (e.g., document type identifiers)
  • StringValue: C40 or UTF-8 encoded strings
  • DateValue: LocalDate values from encoded dates
  • MaskedDateValue: Partially masked date strings
  • MrzValue: Formatted MRZ strings with proper line breaks
  • BytesValue: Raw byte arrays (fallback for unknown encodings)

Each type provides:

  • rawBytes: Always available, original byte array
  • decoded: Type-safe access to the decoded value
  • toString(): Human-readable string representation

New features

Add Extended Feature Definitions for UUID-based seal profiles (TR-03171)

Implement two-stage lookup for seal types that use UUID-based profile definitions as specified in BSI TR-03171. Since the profile definitions and certificates for this document type are not freely accessible, the UUIDs mapping cannot be made available in this library.

What's Changed

Full Changelog: v0.10.3...v0.11.0

v0.10.3

09 Jan 08:41
0d2f482

Choose a tag to compare

Changes

  • bugfixed certificate reference length decoding
  • added gradle libs.versions.toml for central version management
  • added basic support for administrative documents as specified in BSI TR-03171

Full Changelog: v0.10.2...v0.10.3

v0.10.2

16 Dec 22:03

Choose a tag to compare

Changes

This release fixes a critical issue with iOS resource loading when the library is consumed as a Maven dependency, and introduces a flexible API for custom resource configurations.

iOS Maven Dependency Fix

  • Embedded Resources: JSON configuration files are now embedded as Kotlin constants at compile-time
  • Reliable Publishing: Resources are included directly in the published .klib files, eliminating bundle dependency issues
  • Cross-Platform Consistency: Resources work identically across JVM, Android, and iOS platforms

Flexible Resource Loading API

Added public API for custom JSON configurations:

  • DataEncoder.loadCustomSealCodings(jsonString: String) - Override default seal codings with custom JSON
  • DataEncoder.loadCustomIdbMessageTypes(jsonString: String) - Override IDB message types
  • DataEncoder.loadCustomIdbDocumentTypes(jsonString: String) - Override IDB document types
  • DataEncoder.loadCustom*FromFile(fileName: String) - Convenience methods to load custom JSONs from files

Test Suite

  • Removed: Tests for unsupported seal types to reduce test failures
  • Added: ReadTextResourceIosTest to verify iOS resource loading functionality

v0.10.0

29 Nov 15:30

Choose a tag to compare

What's Changed

Breaking Changes

  • ICAO Barcode Identifier updated from NDB to RDB - When creating new ICAO seals, the barcode identifier now uses RDB1 instead of NDB1. Parsing accepts both identifiers for backward compatibility, but a warning is logged
    when encountering the old NDB1 identifier.

Improvements

  • Fixed iOS verifier tests for Brainpool curve certificates - Replaced SecCertificateCopyKey with manual DER parsing to extract SubjectPublicKeyInfo, as Apple's Security framework doesn't support Brainpool curves
    (brainpoolP224r1, brainpoolP256r1)
  • Fixed iOS test cases (Kotlin Clock import)
  • Updated dependencies to latest versions
  • Updated Gradle wrapper

v0.9.3

24 Feb 15:13

Choose a tag to compare

Added National Document Type Parser

v0.9.0

18 Feb 10:28

Choose a tag to compare

What's Changed

  • added full support for ICAO Barcodes IDB
  • generic interface for parsing seals (VDS/IDB)

v0.8.3

27 Jan 20:48
b7ef18e

Choose a tag to compare

Switch from Java to Kotlin multiplatform to support JVM and iOS

What's Changed

  • Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.11.1 to 3.11.2 by @dependabot in #11
  • migrate to Kotlin multiplatform by @tsenger in #14

Full Changelog: v0.7.0...v0.8.3

v0.7.0

24 Nov 14:35

Choose a tag to compare

Changes

  • All features, regardless of their data type, can be output as a (hex) string using valueStr().
  • There are also valueBytes() to get the value as byte array and valueInt() to get the value as Integer
  • Bump org.bouncycastle:bcprov-jdk18on from 1.78.1 to 1.79 by @dependabot in #6
  • Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.1 to 3.5.2 by @dependabot in #7
  • Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.1 to 3.11.1 by @dependabot in #8

v0.6.1

17 Nov 20:27

Choose a tag to compare

Changes

  • return formated MRZ with new line at correct position
  • ensure getVdsType doesn't return null

v0.6.0

02 Nov 16:05

Choose a tag to compare

Changes

  • getFeature() method now return Optional which can be checked with isEmpty(). This is useful for optional features.

Fixed

  • fixed C40/MRZ parsing
  • fixed lengths in SealCodings