miPDFsign Community is the free, open-source (AGPL-3.0) edition of miPDFsign, a .NET 8 WPF
application for signature tablets. It captures handwritten signatures together with biometric
pressure data and embeds them as PAdES signatures (Baseline B/T/LT/LTA) into PDF documents,
including QES via ID Austria. It uses the iText PDF engine. A commercial edition with
additional features is available on request.
README
miPDFsign Community
miPDFsign Community is the free, open-source (AGPL-3.0) edition of miPDFsign — a .NET 8 WPF application for signature tablets. It captures handwritten signatures together with biometric pressure data and embeds them as a PAdES signature into PDF documents. It uses the iText PDF engine (AGPL).
Installs side-by-side with the commercial miPDFsign edition (separate AppId & folder).
Features
Handwritten signature capture on all pen-based, Windows-Ink-capable devices (tablets, notebooks, Surface, etc.) including pressure and timing data – no Wintab driver required
Biometric data is hybrid-encrypted (RSA-OAEP 3072 bit + AES-256-CBC) and embedded in the PDF in a proprietary format
PAdES signatures at levels Baseline-B / T / LT / LTA
Multi-signature per PDF (freehand mode) via incremental iText updates – existing signatures remain valid
PDF rendering of pages as bitmaps (PDFium) for display and field placement
PDF form detection: signature, date, location, and checkbox fields are read out automatically
Configurable UI texts via miPDFsign.ui-labels.json – editable without recompilation
Technical Details
Property
Value
Framework
.NET 8 (net8.0-windows, WinExe)
Platform
x86 (PlatformTarget = x86)
UI
WPF (UseWPF = true)
Namespace
miPDFsign
Libraries Used
Package
Purpose
itext (+ itext.bouncy-castle-adapter)
PDF forms, stamping, PAdES signing (AGPL)
BouncyCastle.Cryptography
Custom CMS attributes, biometrics encryption
PdfiumViewer (+ native x86/x64)
Render PDF pages as bitmaps
System.Drawing.Common
Bitmap processing
System.Configuration.ConfigurationManager
App.config / appSettings
Project Structure
miPDFsignCommunity/
├── App.xaml / App.xaml.cs # Entry point (iText – no license key needed)
├── MainWindow.xaml / .cs # Main window
├── IdAustriaWindow.xaml / .cs # QES signature via ID Austria
├── SignatureTypeDialog.xaml / .cs # Signature type selection
├── miPDFsign.ui-labels.{en,de}.json # UI texts, bilingual (editable without recompile)
├── Assets/ # Icon, logos
├── Helpers/
│ ├── PdfCertSigner.cs # PDF signing (PAdES B/T/LT/LTA, core component)
│ ├── PdfExporter.cs # Export / merge PDF
│ ├── PdfLoadHelper.cs # Load PDF, determine page size
│ ├── PdfRenderer.cs # PDF pages as bitmap via PDFium
│ ├── PdfSignatureScanner.cs # Read signature fields from PDF
│ ├── UiLabels.cs # UI label management
│ └── AppLogger.cs # Central logging
├── Models/ # Field descriptors (signature, date, location, checkbox)
└── Setup/ # Inno Setup script & build scripts
Signature Architecture (Brief Overview)
All signature fields are signed with iText in append mode (PdfSigner +
IExternalSignatureContainer), so each field is added as an incremental revision and
existing signatures stay valid. The CMS is built with BouncyCastle
(/SubFilter /ETSI.CAdES.detached, SHA-256, ESS SigningCertificateV2 + an encrypted
biometric attribute). The signature appearance is the pressure-sensitive ink rendered
as a transparent PNG.
PAdES levels:
Level
Description
Baseline-B
Always – base CMS signature
Baseline-T
RFC-3161 timestamp (TSA, best-effort)
LT (LTV)
CRL + OCSP embedded for all certificates (DSS)
LTA
Document timestamp over the entire PDF
Biometric data & key
The captured ink (X/Y coordinates, pen pressure, timing) is hybrid-encrypted
(RSA-OAEP 3072-bit + AES-256-CBC) and embedded in the signature CMS as a signed
attribute. Both signature types (FES and QES) encrypt it with the same
dedicated, persistent biometric certificate — never with the short-lived signing
certificate — so the biometric data stays recoverable after the signing certificate
has expired:
If BiometricCertPath (App.config) points to a PFX, that certificate is used.
Otherwise a fresh RSA-3072 certificate is generated once and stored next to the
document as _bioCert.pfx.
> ⚠️ Keep this PFX safe. Its private key is required to later decrypt/verify the
> biometric data (forensic use via ExtractBiometricData). Losing it makes the
> encrypted biometric data unrecoverable.
Configuration (App.config)
Behaviour is controlled via App.config in the install folder. Key settings:
Key
Default
Purpose
SaveAsDialog
true
true = show a "Save As" dialog after signing; false = save directly into TargetDirectory.
TargetDirectory
(empty)
Destination folder when SaveAsDialog=false (created if needed; empty = the source document's folder). Environment variables are expanded.
UseTimestamp
true
Enable/disable RFC-3161 timestamping (see below).
TimestampServers
(built-in)
;-separated list of TSA URLs, tried in order. Empty = built-in defaults (BOSA, ACCV). A-Trust example: http://tsa.a-trust.at/tsa.
BiometricCertPath / BiometricCertPassword
(empty)
PFX used to encrypt the biometric data. Empty = auto-generate _bioCert.pfx next to the signed document.
Rotate the tablet screen to portrait on start and restore it on exit.
Disabling timestamping
Set UseTimestamp=false for offline / air-gapped deployments or when no TSA is reachable. Then:
signatures stay PAdES Baseline-B (no Baseline-T timestamp) and no LTA archive timestamp is added — LTV/DSS (CRL/OCSP) is unaffected;
⚠️ the FES signing certificate is only valid for 10 minutes, so without a timestamp its signatures are not provable long-term. Disable timestamping only deliberately (e.g. for QES, where the qualified certificate carries its own trust).
The publish is self-contained (no .NET runtime required on the target machine)
and consists of miPDFsignCommunity.exe + miPDFsignCommunity.dll together with all dependencies in one
folder. The installer is generated via the Inno Setup script under Setup/
(see Setup/build.bat).
Development Environment
Visual Studio (recommended for the XAML designer)
VS Code with the VS Code Tools for WPF possible
Works well with — miPDFconvert
Need a PDF to sign in the first place? miPDFconvert
is a free, open-source (AGPL) virtual PDF printer for Windows: print from any
application to a PDF, then sign it here — a natural upstream pre-stage:
miPDFsign Community is a free, open-source edition, licensed under the
GNU Affero General Public License v3.0 (AGPL-3.0) — see LICENSE.
Because it links iText under the AGPL, the entire application is AGPL: if you
distribute it (or offer it over a network), you must make the complete corresponding
source available under the same license.
Commercial edition
A commercial edition of miPDFsign is available on request — without AGPL
obligations and with additional features (e.g. an inbound/outbound plugin
architecture, archive/DMS connectors, system integrations, and priority support). It
is a separate product built on a commercially licensed PDF engine. Please
get in touch for licensing, pricing, and a feature overview.