• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

krzyzanowskim/ObjectivePGP: OpenPGP library for iOS and macOS

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称(OpenSource Name):

krzyzanowskim/ObjectivePGP

开源软件地址(OpenSource Url):

https://github.com/krzyzanowskim/ObjectivePGP

开源编程语言(OpenSource Language):

Objective-C 89.9%

开源软件介绍(OpenSource Introduction):

objectivepgp

CocoaPods Compatible Swift Package Manager compatible Platform Twitter

ObjectivePGP is an implementation of OpenPGP protocol for iOS and macOS. OpenPGP is the most widely used email encryption standard. It is defined by the OpenPGP Working Group of the Internet Engineering Task Force (IETF).

Here is the blog post story.

How do I get involved?

You want to help, great! Go ahead and fork our repo, make your changes and send us a pull request.

Contribution

You are welcome to contribute. See CONTRIBUTING.md
Please create Pull Request.

The license

The ObjectivePGP stays under a dual license:

  • Free for non-commercial use, covered by the variant of BSD license. That means you have to mention Marcin Krzyżanowski as the original author of this code and reproduce the LICENSE text inside your app.

  • Commercial-use license to use in commercial products. Please bear in mind that some free products remain commercial products. Please contact me via email for details.

Not sure what to choose? check FAQ

Installation

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/krzyzanowskim/ObjectivePGP.git", .upToNextMinor(from: "0.99.2"))
]

CocoaPods

pod 'ObjectivePGP'

Frameworks

ObjectivePGP comes with the Frameworks for the latest release, you can copy and embed in your project:

Usage

Objective-C

#import <ObjectivePGP/ObjectivePGP.h>

Swift

import ObjectivePGP
Read keys (private or public)
NSArray<PGPKey *> *keys = [ObjectivePGP readKeysFromPath:@"/path/to/key.asc" error:nil];
let keys = try ObjectivePGP.readKeys(fromPath: "/path/to/key.asc")
Keyring

Keyring is a storage (in memory or on disk) that keep all sorts of PGP keys.

PGPKeyring *keyring = ObjectivePGP.defaultKeyring;
PGPKeyring *keyring = [[PGPKeyring alloc] init];

NSArray<PGPKey *> *allKeys = keyring.keys;
[keyring importKeys:@[key]];
[keyring deleteKeys:@[key]];

[keyring importKey:@"979E4B03DFFE30C6" fromPath:@"/path/to/secring.gpg"];
PGPKey *key = [keyring findKeyWithIdentifier:@"979E4B03DFFE30C6"];
NSArray<PGPKey *> keys = [pgp findKeysForUserID:@"Name <[email protected]>"];
let keyring = ObjectivePGP.defaultKeyring
let keyring = Keyring()

let allKeys = keyring.keys
keyring.import(keys: [key])
keyring.delete(keys: [key])

keyring.import(keyIdentifier:"979E4B03DFFE30C6", fromPath:"/path/to/secring.gpg")
if let key = keyring.findKey("979E4B03DFFE30C6") {
	// key found in keyring
}

keyring.findKeys("Name <[email protected]>").forEach(key) {
	// process key
}
Export keys (private or public)
// Write keyring to file
[[keyring export:error] writeToURL:[NSURL fileURLWithString:@"keyring.gpg"]];

// Public keys data
NSData *publicKeys = [keyring exportKeysOfType:PGPKeyTypePublic error:nil];
// Write keyring to file
try keyring.export().write(to: URL(fileURLWithPath: "keyring.gpg"))

// Public keys (Data)
let publicKeys = keyring.exportKeys(of: .public)
Sign & verify data (or file)

Sign a data with a key:

NSData *signature = [ObjectivePGP sign:fileContent detached:YES usingKeys:@[key] passphraseForKey:nil error:nil];
[ObjectivePGP verify:fileContent withSignature:signature usingKeys:@[key] passphraseForKey:nil error:nil];
let signature = try ObjectivePGP.sign(encryptedBin, detached:true, using: [key1])
try ObjectivePGP.verify(encryptedBin, withSignature: signature, using: [key1])
Encrypt & Decrypt
NSData *encrypted = [ObjectivePGP encrypt:fileContent addSignature:YES usingKeys:@[key] passphraseForKey:nil error:nil];
[ObjectivePGP decrypt:encrypted andVerifySignature:YES usingKeys:@[key] passphraseForKey:nil error:nil];
let encrypted = try ObjectivePGP.encrypt(fileContent), addSignature: true, using: [key1, key2])
let decrypted = try ObjectivePGP.decrypt(encrypted, andVerifySignature: true, using: [key1])
Generate new key pair
PGPKeyGenerator *generator = [[PGPKeyGenerator alloc] init];
PGPKey *key = [generator generateFor:@"Marcin <[email protected]>" passphrase:nil];
NSData *publicKeyData = [key export:PGPKeyTypePublic error:nil];
NSData *secretKeyData = [key export:PGPKeyTypeSecret error:nil];
let key = KeyGenerator().generate(for: "[email protected]", passphrase: "password")
let publicKey = try key.export(keyType: .public)
let secretKey = try key.export(keyType: .secret)

ASCII Armor

ASCII armor is a binary-to-textual encoding converter. ASCII armor involves encasing encrypted messaging in ASCII so that they can be sent in a standard messaging format such as email.

Example:

-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: For more info see https://www.objectivepgp.org

[...]
-----END PGP PUBLIC KEY BLOCK-----

Class PGPArmor can be used to convert binary format to ASCII format

NSString *armoredKey = [PGPArmor armoredData:encrypted as:PGPArmorPublicKey];
let armoredKey = Armor.armored(Data(), as: .publicKey)

When convert manually, it is important to use right PGPArmorType value that define the header. It may be a tricky part so here's the cheatsheet:

Type data PGPArmorType Example
Encrypted PGPArmorMessage Armor.armored(ObjectivePGP.encrypt(...), as: .message)
Decrypted PGPArmorMessage Armor.armored(ObjectivePGP.decrypt(...), as: .message)
Public key PGPArmorTypePublic Armor.armored(key.export(), as: .publicKey)
Secret key PGPArmorTypeSecret Armor.armored(key.export(), as: .secretKey)

For any result of encryption the type is PGPArmorMessage

Changelog

See CHANGELOG

Known limitations:

  • Cleartext signature.

Security Audit

To date the ObjectivePGP code base has undergone a complete security audit from Cure53.

Acknowledgment

This product uses software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)

Author

Marcin Krzyżanowski




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap