Open source.

The cryptography is public on both platforms, under Apache-2.0. Don't trust us — read it.

A PGP app asks for a lot of trust: it generates the keys that protect your messages and runs the math that seals them. The honest way to earn that trust is to let you check the work. So the part that matters — key generation, the OpenPGP packet parser and builder, and the encryption and signing paths — is open source. Two repositories, one per platform core.

License: Apache 2.0

Two cores, one standard.

Same OpenPGP behaviour, ported per platform. Both Apache-2.0.

PGPonyCore

Swift · powers PGPony on iOS
  • OpenPGP packet parser and builder
  • Ed25519 + Curve25519 key generation
  • S2K (Argon2id / iterated-salted) as a pure primitive
  • ASCII armor with an injectable comment
  • Encryption, signing, and verification paths
github.com/norsehorse-dev/PGPonyCore →

PGPonyCore-Kotlin

Kotlin · powers PGPony on Android
  • The Kotlin port of the same parser and builder
  • Key generation, validated against the Swift core
  • Integrity-protected decrypt that fails closed
  • The crypto paths used by the Android app
  • Clean dependency boundaries for reuse
github.com/norsehorse-dev/PGPonyCore-Kotlin →

We hardened it, then made it public.

Open-sourcing followed a pre-launch security sweep on both cores.

iOS. Debug logging that could expose secret material in the shipping build was found and removed, replaced with a gated logger that is inert in release builds.

Android. Decrypt now enforces OpenPGP integrity protection (SEIPD / MDC) and fails closed — a tampered or unprotected ciphertext returns an error instead of unverified plaintext, rather than silently handing back data an attacker could have altered.

That sequence is the point: the code you can now read is the hardened version. Open-sourcing is not where the security work stopped — it's where it became checkable. The natural next steps are reproducible builds (so the shipped binary can be matched to this source) and a third-party audit. Open source now; audit-ready later.

The strongest version: born on the card.

Open source tells you what the on-device code does. Hardware keys let you take the most sensitive part off the device entirely. With on-card key generation, PGPony creates an Ed25519 + Curve25519 keypair directly on an OpenPGP NFC smartcard (YubiKey 5 series, Token2). The private key is born on the card and never touches the phone — there is no on-device copy that could leak, even in principle. Full card management (admin PIN change, unblock a locked PIN, factory reset) lets you own the card's lifecycle end to end.

Read more on the security page and the on-card key generation glossary entry.

Common questions.

Is the whole app open source?

The cryptographic core is — fully, under Apache-2.0, on both platforms. That's the part that matters for trust: key generation, the packet parser and builder, and the encryption and signing paths. The app shells around the core (UI, platform glue, store plumbing) stay closed. The math that seals your messages is public.

What does Apache-2.0 let me do?

Use, modify, and redistribute the core, including in commercial work, with a permissive patent grant. It's one of the most reuse-friendly open-source licenses. The full text ships in each repository.

Can I build the core myself?

Yes. PGPonyCore builds standalone with swift build; PGPonyCore-Kotlin has its own test gate via Gradle. Both repositories are public and readable logged-out.

Can I report an issue or contribute?

Issues and pull requests are welcome on both repos. Security-sensitive findings should go privately to NorseHorse@norsehor.se with the subject SECURITY — see the disclosure policy.

Read the core. Then use the app.

Free OpenPGP encryption for iOS and Android. No accounts, no tracking.