Skip to content

Repository Overview

The PostGuard project is split across several repositories in the encryption4all GitHub organization. This page gives an overview of each one and how they fit together.

Two of them are workspaces that hold more than one project. postguard is a Cargo workspace, and since postguard#277 the Cryptify backend is a member of it. postguard-js is a pnpm workspace holding the SDK, the three end-user apps and the examples. The postguard-website, postguard-tb-addon, postguard-outlook-addon and postguard-examples repositories were folded into it and are now archived, so read-only.

Cryptographic Libraries

These are the low-level building blocks that implement the cryptographic primitives PostGuard relies on.

RepositoryLanguageDescription
pg-curveRustFork of BLS12-381 elliptic curve with target group serialization
ibeRustIdentity-Based Encryption schemes on BLS12-381
ibsRustIdentity-Based Signature schemes
irmarsRustClient library for talking to Yivi (IRMA) servers

Core

The main PostGuard codebase.

RepositoryLanguageDescription
postguardRustCore library, PKG server, WASM bindings, CLI, FFI bindings, and the Cryptify backend
cryptifyRustFile encryption and sharing service. The source now lives in cryptify/ inside the postguard workspace; this repository still builds and publishes the container image
postguard-businessSvelteKitBusiness portal for organization and API key management
pdf-signatureRust, TypeScriptSigning service built on the same identity layer. A fork of cryptify with its own frontend

Applications

End-user applications, all in the postguard-js workspace under apps/.

ApplicationPathLanguageDescription
postguard-websiteapps/websiteSvelteKitWeb frontend for encrypting and sending files
postguard-tb-addonapps/tb-addonTypeScriptThunderbird email encryption extension
postguard-outlook-addonapps/outlook-addonTypeScriptOutlook email encryption add-in

SDKs

Client libraries for integrating PostGuard into applications.

RepositoryLanguageDescription
postguard-jsTypeScriptBrowser and Node.js SDK (@e4a/pg-js), at packages/pg-js in the workspace
postguard-dotnetC#.NET SDK for sending-side encryption (E4A.PostGuard)

Examples

In the postguard-js workspace under examples/, built against the in-tree SDK:

ProjectLanguageDescription
pg-sveltekitTypeScriptSvelteKit web app using @e4a/pg-js
pg-nodeJavaScriptNode.js CLI using @e4a/pg-js from a server runtime
pg-dotnetC#.NET console app using E4A.PostGuard
pg-manualJavaScriptBrowser example using @e4a/pg-wasm directly (no SDK)

Documentation

RepositoryLanguageDescription
postguard-docsVitePressThis site. Guides, SDK reference, and a page per repository

Dependency Graph

The projects depend on each other roughly as follows. Names in parentheses are workspace members rather than separate repositories.

pg-curve
  └── ibe
        └── postguard (pg-core)
              ├── pg-wasm ──────────────── postguard-js (packages/pg-js)
              │                              ├── apps/website
              │                              ├── apps/tb-addon
              │                              └── apps/outlook-addon
              ├── pg-ffi ───────────────── postguard-dotnet
              ├── pg-pkg (PKG server)
              ├── cryptify (file storage)
              └── pg-cli
  └── ibs (used by pg-core for sender signatures)

irmars (Yivi client) ──── postguard (pg-core, pg-pkg, pg-cli)

cryptify (backend) ─────── apps/website (file storage)

Because cryptify and pg-core are now members of one Cargo workspace, they resolve a single Cargo.lock. Before the merge each repository resolved its own, so the two services could serialize container headers with different versions of the same serializer.