UNNetPGP 0.8.1

UNNetPGP 0.8.1

LangLanguage CC
License Apache 2
ReleasedLast Release Aug 2017

Maintained by Marcin Krzyżanowski.

UNNetPGP 0.8.1

  • By
  • Marcin Krzyżanowski and Nominet UK

UNNetPGP is Objective-C wrapper for NetPGP for iOS.


The PGP solution you've been looking for is here. Low level C based api with Objective-C wrapper around it is all you need to encrypt and decrypt PGP messages. Based on NetPGP, a standards-compliant library and suite of utilities providing digital signature and verification functionality, as well as data encryption and decryption, using RSA and DSA/Elgamal keys.


This package is intended to be used with Cocoapods to satisfy OpenSSL dependency.

Add this to you Podfile:

pod 'UNNetPGP', :podspec => 'https://raw.github.com/upnext/unnetpgp/master/UNNetPGP.podspec'
  • Without Cocoapods

Something with Source Trees should do the trick but haven't tested. Pull request welcome.


Initialize and setup

UNNetPGP *pgp = [[UNNetPGP alloc] initWithUserId:@"[email protected]"];
pgp.password = @"secret1234";
pgp.armored  = YES

Optionally you can specify ringfiles out of home directory

pgp.publicKeyRingPath = [[self documentsDirectory] stringByAppendingPathComponent:@"pubring.gpg"];
pgp.secretKeyRingPath = [[self documentsDirectory] stringByAppendingPathComponent:@"secring.gpg"];

Lets define filenames. Caution: file extension is important for some files! (.gpg,.asc)

NSString *plaintextFile = [myDir stringByAppendingPathComponent:@"plain.txt"];
NSString *encryptedFile = [myDir stringByAppendingPathComponent:@"plain.txt.gpg"];
NSString *decryptedFile = [myDir stringByAppendingPathComponent:@"plain.decoded.txt"];
NSString *signatureFile = [myDir stringByAppendingPathComponent:@"plain.txt.asc"];

Encrypt file

BOOL result = [pgp encryptFileAtPath:plainFilePath toFileAtPath:encryptedFilePath options:UNEncryptOptionNone];
NSLog(@"encryptedFilePath = %@",@(result));

Decrypt file

BOOL result = [pgp decryptFileAtPath:encryptedFilePath toFileAtPath:decryptedFilePath];
NSLog(@"decryptFileAtPath = %@",@(result));

Generate new key (and save in keyring)

BOOL success = [pgp generateKey:1024];

Create file signature

BOOL success = [pgp signFileAtPath:plaintextFile writeToFile:signatureFile detached:YES];

Verify file signature. Caution: there is assumption that signed file exists in the same directory.

BOOL success = [pgp verifyFileAtPath:signatureFile];


Marcin Krzyżanowski