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.
- With CocoaPods
Add this to you
pod 'UNNetPGP', :podspec => 'https://raw.github.com/krzyzanowskim/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:@"firstname.lastname@example.org"]; 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! (
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"];
BOOL result = [pgp encryptFileAtPath:plainFilePath toFileAtPath:encryptedFilePath options:UNEncryptOptionNone]; NSLog(@"encryptedFilePath = %@",@(result));
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];