ObjectivePGP 1.0

ObjectivePGP 1.0

测试已测试
Lang语言 Obj-CObjective C
许可证 NOASSERTION
发布上次发布2024年5月

Marcin Krzyżanowski 维护。



objectivepgp

CocoaPods Compatible Swift Package Manager compatible Platform Twitter

ObjectivePGP 是 iOS 和 macOS 上 OpenPGP 协议的实现。OpenPGP 是最广泛使用的电子邮件加密标准。它是由互联网工程任务组(IETF)的 OpenPGP 协作组定义的。

以下是博客文章的故事。

如何参与其中?

您想帮助,太好了!请前往我们的仓库进行分支操作,做出您的更改并向我们发送拉取请求。

贡献

欢迎您进行贡献。请参阅CONTRIBUTING.md
请创建 拉取请求

许可证

ObjectivePGP采用双重许可证

  • 免费供非商业用途,受BSD许可证变体保护。这意味着您必须提及Marcin Krzyżanowski为该代码的原始作者,并在您的应用程序中复现LICENSE文本。

  • 商业用途许可证,用于商业产品。请注意,一些免费产品仍然是商业产品。有关详情,请通过电子邮件联系我。

不确定如何选择?请查看常见问题解答

安装

Swift Package Manager

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

CocoaPods

pod 'ObjectivePGP'

框架

ObjectivePGP 包含了最新发布版的 框架,您可以将它们复制并嵌入到您的项目中

使用方法

Objective-C

#import <ObjectivePGP/ObjectivePGP.h>

Swift

import ObjectivePGP
读取密钥(私钥或公钥)
NSArray<PGPKey *> *keys = [ObjectivePGP readKeysFromPath:@"/path/to/key.asc" error:nil];
let keys = try ObjectivePGP.readKeys(fromPath: "/path/to/key.asc")
密钥环

密钥环是一个存储(在内存或磁盘上)所有种类的PGP密钥的地方。

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
}
导出密钥(私钥或公钥)
// 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)
签名 & 验证数据(或文件)

使用密钥签名数据

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])
加密 & 解密
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])
生成新密钥对
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是一种二进制到文本的编码转换器。ASCII armor通过将加密消息封装在ASCII中,以便它们可以以标准消息格式(如电子邮件)发送。

示例

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

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

PGPArmor可用于将二进制格式转换为ASCII格式

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

手动转换时,使用正确的PGPArmorType值定义头信息非常重要。这可能是一部分繁琐的工作,所以这里有一个速查表

数据类型 PGPArmorType 示例
加密的 PGPArmorMessage Armor.armored(ObjectivePGP.encrypt(...), as: .message)
解密的 PGPArmorMessage Armor.armored(ObjectivePGP.decrypt(...), as: .message)
公钥 PGPArmorTypePublic Armor.armored(key.export(), as: .publicKey)
私钥 PGPArmorTypeSecret Armor.armored(key.export(), as: .secretKey)

任何加密的结果类型都是PGPArmorMessage

更改日志

查看 CHANGELOG

已知限制

  • 明文签名。

安全审计

截至目前,ObjectivePGP 代码库已经通过了 Cure53 的全面安全审计。

致谢

本产品使用 OpenSSL 项目开发的软件在 OpenSSL 工具包中使用。(http://www.openssl.org/

作者

Marcin Krzyżanowski