PGPro can encrypt and decrypt messages as well as manage all your OpenPGP keys. It is free, simple and lightweight. Everything stays on your device. PGPro is made in Switzerland.

Last update: Jul 29, 2022

License Swift GitHub code size in bytes iTunes App Store Codacy Badge FOSSA Status

PGPro can encrypt and decrypt messages as well as manage all your OpenPGP keys. It is free, simple and lightweight. Everything stays on your device. PGPro is made in Switzerland.

Screenshots

Contribution

You are welcome to contribute. Please create a Pull Request.

Changelog

See https://pgpro.app/changelog/.

License

This project is licensed under the GNU GENERAL PUBLIC LICENSE - see the LICENSE file for details.

FOSSA Status

Security Audit

The cryptographic library used by PGPro, ObjectivePGP, has undergone a complete security audit from Cure53.

Acknowledgment

This project uses the ObjectivePGP library developed by Marcin Krzyżanowski. Thereby it uses software developed by the OpenSSL Project for use in the OpenSSL Toolkit.

Author

Luca Näf

GitHub

https://github.com/lucanaef/PGPro
Comments
  • 1. Add support for ECC keys

    Hello lucanaef,

    i want to try your PGPro app to use GPG encryption on my iOS 14.1 device. Unfortunatly i failed to import my GPG private and public key. Reason was "Unsupported Key".

    I have generated my keys using the following command on a debian buster system:

    gpg --quick-gen-key "Name <email>" ed25519 cert 2y
    gpg --quick-add-key [keyid] cv25519 encr 1y
    gpg --quick-add-key [keyid] ed25519 auth 1y
    gpg --quick-add-key [keyid] ed25519 sign 1y
    

    I use the following version of GnuPG

    gpg (GnuPG) 2.2.12
    libgcrypt 1.8.4
    

    Do you have an idea if i make anything wrong, or is this "state of the art" key really not supportes? If second, will/can support for this kind of key be available in the near future?

    Kind regards Oliver Koch

    Reviewed by oliver-koch at 2020-11-22 12:24
  • 2. Add support for OpenKeychain (Android) QR Codes

    The OpenKeychain QR code simply contains a plaintext string with the format OPENPGP4FPR:<Fingerprint>.

    Here's an example of the generated QR code for Edward, an email bot from the FSF to test email encryption (as in emailselfdefense.fsf.org).

    Screenshot_20210601-015552_OpenKeychain.jpg OPENPGP4FPR:F357AA1A5B1FA42CFD9FE52A9FF2194CC09A61E8.

    Adding the ability to scan the QR code would be a great way to instantly add another public key without the need of manually enter an email or the fingerprint into the app. This can be done by:

    1. Scanning the QR code
    2. Check whether the payload is valid
    3. Search signature on keyservers

    The OpenKeychain app also uses this functionality to verify confirm other public keys, if the current private key is capable of confirming other keys (aka. unstripped).

    Screenshot_20210601-104629_OpenKeychain.jpg

    Screenshot_20210601-104748_OpenKeychain.jpg

    Screenshot_20210601-104821_OpenKeychain.jpg

    Reviewed by reinhart1010 at 2021-06-01 03:49
  • 3. Import priv key after matching pub key

    I got the issue that I can’t import a key pair one after another. First the pub key and then the priv key e.g. just one of them. Preproduction with any key pair. iPhone 8 13.4.1 App Version. 2020.02

    Reviewed by damanti-me at 2020-05-19 21:07
  • 4. Where is the private key stored ?

    Hi, could you include in the description/documentation where the private keys are stored and how access to them is secured ? It's quite sensitive to upload a private key, without knowing where it is going ...

    Great job anyway ! Thanks !

    Reviewed by mwid2020 at 2020-04-23 21:48
  • 5. .gitignored project files?

    Hello,

    I come across this project and would like to get started with it, but unfortunately all the Xcode project files is gitignored. Can you please share why? At the moment I wasn't able to find any reasoning neither in git history, nor on the website. It seems to be added just the second commit to the repo.

    Gitignore file seems to be autogenerated and it is too broad – repo obviously does not contain swift package library, but it has spm artifacts gitignored as well. Xcode gitignore section contains both reasonable lines (like xcuserdata) and also lines I find unreasonable to gitignore (like xcodeproj).

    In my opinion, whole Xcode section should be discarded and SwiftPM section too, but Swift section kept. In my projects, I usually only have this much:

    # Mac OS X
    .DS_Store
    
    # Backup files
    *~.nib
    
    # Xcode
    build/*
    *.pbxuser
    !default.pbxuser
    *.mode1v3
    !default.mode1v3
    *.mode2v3
    !default.mode2v3
    *.perspectivev3
    !default.perspectivev3
    *.xccheckout
    xcuserdata
    profile
    *.moved-aside
    DerivedData
    *.xcscmblueprint
    
    # AppCode
    .idea
    

    Would you mind sharing xcodeproj (and xcworkspace if any) with the rest of the world please?

    Reviewed by ReDetection at 2020-11-29 16:48
  • 6. Unable to decrypt message from Thunderbird

    Thanks for making PGPro, I think it is a long missing addition to the iOS ecosystem. However I got one problem: when I receive an encrypted mail sent from Thunderbird 78.3.2 and forward it to PGPro from the built-in iOS Email app, PGPro fails to decrypt it. The error msg is simply "Decryption failed!". I can decrypt other PGP blocks and tracked down the error to the fact, that PGP blocks generated as above are missing an empty line after the line "-----BEGIN PGP MESSAGE-----". This only seems to be the case when I directly forward the "encrypted.asc" MIME attachment from the iOS EMail app to PGPro. When I somehow get the attachment into a text editor and from there copy&paste it to PGPRo, decryption works. Needless to say, the latter is extremely inconvenient on an iOS device ... :-)

    Reviewed by tom709 at 2020-10-09 11:16
  • 7. Security Issue

    Hi @lucanaef,

    I've come across what seems to be, in my estimation, a low-severity security issue.

    Can you provide me with your pubkey and email for further dialog on this topic?

    Thanks, Jonathan

    Edit: Alternatively, you can reach out to me directly via the contact info on my profile.

    Reviewed by jhalt at 2020-07-23 14:12
  • 8. Hiding keypad

    Hi, first: great move to create an open source app for iOS for PGP encrypten/decryption ! That was needed !

    When editing a message for encryption, it is not easily possible to hide the keypad again to access the bottom controls bar. Any simple common way to hide the keypad (selecting a public key does it ... but it's not so intuitive.

    Reviewed by mwid2020 at 2020-04-23 21:46
  • 9. App crashes when trying to decrypt

    Might just be a user error as this seems to be too a basic functionality to not be working, but still. Here's my error and how to reproduce:

    1. I have an encrypted e-mail in the Apple Mail app. I have clicked on the encrypted message attachment (encrypted.asc) and click on PGPro in the share screen.
    2. So far so good. The encrypted content is displayed in the Decryption window, I can select my key and enter my passphrase. I click on the open envelope on the top right and:
    3. The app just shuts down and when I restart all the details are gone.

    Am I doing something wrong? Is there something wrong with my key? The same key works on macOS Mail using GPGTools.

    Some things I've tried:

    • Manually pasting encrypted contents
    • Entering a wrong password (get an error message, so I'm using the right one)

    Using an iPhone 12, iOS 15.0.1

    Let me know if I can provide you with anything or try anything. Thank you for this!

    Reviewed by SerafinDinges at 2021-10-14 16:57
  • 10. Please Enable iOS 12.4.x Support. App Shows: iOS 13 Required.

    Hi,
    could not run the app in iOS v12.4.x iPhone-6.

    this app or AppStore shows message (after or during install), that,
    iOS v13 or above is needed.
    :(

    Please enable support for iOS v12.4.x / v12 (when time-permits to do so).
    i'm sure, lots of users still using iPhone-6.

    Reviewed by atErik at 2020-10-16 07:32
  • 11. Message is invalid!

    When I try to decrypt a message that was sent to me by sending the msg.asc file to PGPro on my iPhone, I can not decrypt it because of the "Message is invalid!" error. I have my private key imported. It seems to make no difference whether or not I specify my password. I am not sure what goes wrong here. Apart from the msg.asc, the messae also shows a Part.000 file attached. Not sure if that somehow causes the issue here.

    Reviewed by ygrange at 2020-07-24 11:43
  • 12. Bump tzinfo from 1.2.9 to 1.2.10 in /docs/_site

    Bumps tzinfo from 1.2.9 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    Reviewed by dependabot[bot] at 2022-07-22 07:51
  • 13. Bump tzinfo from 1.2.9 to 1.2.10 in /docs

    Bumps tzinfo from 1.2.9 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    Reviewed by dependabot[bot] at 2022-07-22 04:19
  • 14. App not prioritizing correct private key

    When importing a private key, the app is loading and using the expired key rather than the unexpired key. The keys are listed in gpg --list-packets in this order:

    cv25519 (encryption) [expired] ed25519 (signing) [expired] rsa4096 (signing) [valid] rsa4096 (encryption) [valid] rsa4096 (authentication) [valid]

    Also note that importing the public keys via paste or file has the same issue. Importing the public key via key server works as expected.

    Another key set works as expected, though the EC keys are valid and also listed first.

    Reviewed by mcnc-clovett at 2022-07-12 23:11
  • 15. 4K, 8K, 16K RSA OpenPGP/GnuPG/PGP Key Support

    Hi PGPro Dev(s) / Luca,

    FEATURE REQUEST:

    (1) does it support loading/importing & using 4K or 8K or 16K RSA key-pair from file or from copy-paste buffer/clipboard memory ? if now it does not support that (4K/8K/16K), when/approximately will you include such support ?

    (2) can PGPro by itself generate 4K, 8K or 16K RSA key-pair ? if now that is not supported, when/approximately will you include such support ?

    (3) i have seen/found, it can export key-pair. if it can generate keypair, then i/we need to export keypair as file ( to also use it from Thunderbird & K-9 ).

    For data at rest, (such as emails, in mail servers), 16K should be used, as spying (aka: theft of privacy/protection rights) increased.

    Thanks for this great project.

    My project partner's other partner(s), can manage to contribute, as they have indicated their interest for such feature(s), if there is an indication on possibility of such requested features.

    You can DM any time, as always, dear Luca. can i dm for this purpose?

    Reviewed by atErik at 2022-07-03 01:46
  • 16. Decryption Failing when Using PGP Message Generated by Kleopatra

    Encrypting a message with PGPro allows me to decrypt it on PGPro and Kleopatra, while encrypting a message on Kleopatra causes a Decryption Failed error on PGP pro when trying to decrypt that message.

    I double checked the encoding, I tried a new keypair with different encryption settings, nothing seems to work.

    Reviewed by mketab at 2022-06-02 23:49
A super simple tool for macOS Swift developers to check validity of a Gumroad-issued software license keys

Gumroad License Validator Overview A super simple tool for macOS Swift developers to check validity of a Gumroad-issued software license keys Requirem

Jul 23, 2022
Cloak Swift - a tool and Tuist plugin to encrypt secrets and then pass them in an obfuscated form into applications
Cloak Swift - a tool and Tuist plugin to encrypt secrets and then pass them in an obfuscated form into applications

This is Cloak Swift - a tool and Tuist plugin to encrypt secrets and then pass them in an obfuscated form into applications.

Jul 18, 2022
A tiny and easy to use Swift class to encrypt strings using HMAC algorithms.

#Sweet HMAC SweetHMAC is a tiny and easy to use Swift class to encrypt strings using HMAC algorithms. A special thanks to jernejstrasner for shared HM

Jul 27, 2022
A key value store for storing per-developer environment and application keys

A key value store for enviroment and application keys. Its good security practice to keep production keys out of developer hands. CocoaPods-keys makes

Jul 13, 2022
PassDrop is a fully-featured secure password management system, compatible with the free KeePass 1.x (Classic) and multi-platform KeePassX desktop applications.

passdrop This is a modern, updated build of Rudis Muiznieks's PassDrop application. PassDrop is a fully-featured secure password management system, co

Feb 23, 2022
iOS library for device fingerprinting. Does not require server APIs to work, fully client-side operation.
iOS library for device fingerprinting. Does not require server APIs to work, fully client-side operation.

Lightweight iOS library for local device fingerprinting Installation (CocoaPods) # Podfile pod 'FingerprintJS' Note: If you've never used CocoaPods fo

Jul 26, 2022
Oversecured Vulnerable iOS App is an iOS app that aggregates all the platform's known and popular security vulnerabilities.

Description Oversecured Vulnerable iOS App is an iOS app that aggregates all the platform's known and popular security vulnerabilities. List of vulner

Aug 10, 2022
Wrapper class for handling all tasks related to RSA cryptography

RSAWrapper Wrapper class for handling all tasks related to RSA cryptography USAG

Dec 24, 2021
Generate passwords and save them in Keychain. Made with SwiftUI.
Generate passwords and save them in Keychain. Made with SwiftUI.

lockd Generate strong passwords and save them in Keychain. Join lockd Beta on TestFlight: https://testflight.apple.com/join/xJ5AlvS3 Features: Generat

Jul 19, 2022
A lightweight stochastic optimizer based on slime mold (Slime Mold Algorithm)
A lightweight stochastic optimizer based on slime mold (Slime Mold Algorithm)

Slime This is a Swift implementation of a Slime Mold Algorithm - a stochastic optimizer - generally based on this paper The only dependency required b

Jun 13, 2022
A customizable verification code textField. Can be used for phone verification codes, passwords etc
A customizable verification code textField. Can be used for phone verification codes, passwords etc

KKPinCodeTextField A customizable verification code textField. Can be used for phone verification codes, passwords etc. Настраиваемое текстовое поле д

Jul 5, 2022
Simple, secure password and data management for individuals and teams

Padloc Simple, secure password and data management for individuals and teams (formerly known as Padlock). This repo is split into multiple packages: P

Aug 12, 2022
Simple and secure hashing in Swift with the SipHash algorithm

SipHash ⚠️ WARNING This package has been obsoleted by the Hasher type and the Hashable.hash(into:) requirement introduced in Swift 4.2. Using this pac

Jul 23, 2022
Simple Swift wrapper for Keychain that works on iOS, watchOS, tvOS and macOS.
Simple Swift wrapper for Keychain that works on iOS, watchOS, tvOS and macOS.

KeychainAccess KeychainAccess is a simple Swift wrapper for Keychain that works on iOS and OS X. Makes using Keychain APIs extremely easy and much mor

Aug 3, 2022
A simple Swift Keychain Wrapper for iOS, watchOS, and OS X.

Latch A simple Swift 2.0 Keychain Wrapper for iOS, watchOS 2, and OS X. Usage A proper example of how to use Latch can be seen in the tests. import La

Jan 29, 2022
Simple Objective-C wrapper for the keychain that works on Mac and iOS

SAMKeychain SAMKeychain is a simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system Keyc

Aug 1, 2022
TouchEncryptedJson - Simple project that accepts an input and encrypts it with the TouchID on a Mac

TouchEncryptedJson Simple project that accepts an input and encrypts it with the

Feb 11, 2022
A simple way of doing both symmetric and asymmetric crypto without the headache

Simple Swift Crypto I needed a simple way of doing both symmetric and asymmetric

Mar 2, 2022
A simple wrapper for the iOS Keychain to allow you to use it in a similar fashion to User Defaults. Written in Swift.

SwiftKeychainWrapper A simple wrapper for the iOS / tvOS Keychain to allow you to use it in a similar fashion to User Defaults. Written in Swift. Prov

Aug 5, 2022