
ObjectivePGPは、iOSおよびMacOSのOpenPGPプロトコルの実装です。 OpenPGPは、最も広く使用されている電子メール暗号化標準です。これは、インターネットエンジニアリングタスクフォース(IETF)のOpenPGPワーキンググループによって定義されています。
これがブログ投稿のストーリーです。
あなたは助けたい、素晴らしい!先に進み、レポをフォークし、変更を加えて、プルリクエストを送信してください。
貢献できます。 Convributing.mdを参照してください
プルリクエストを作成してください。
ObjectivePGPは、二重ライセンスのままです。
BSDライセンスのバリアントでカバーされている非営利目的で無料で使用できます。つまり、このコードの元の著者として、Marcin Krzy’anowskiに言及し、アプリ内のライセンステキストを再現する必要があります。
商用製品で使用する商用用ライセンス。一部の無料製品は商用製品のままであることに留意してください。詳細については、メールでお問い合わせください。
何を選ぶべきかわからない? FAQを確認してください
dependencies: [
.package(url: "https://github.com/krzyzanowskim/ObjectivePGP.git", .upToNextMinor(from: "0.99.4"))
]
pod 'ObjectivePGP'
ObjectivePGPには、最新リリースのフレームワークが付属しています。プロジェクトにコピーして埋め込むことができます。
Objective-C
# import < ObjectivePGP/ObjectivePGP.h >迅速
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アーマーは、バイナリ間エンコーディングコンバーターです。 ASCIIアーマーでは、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/)
マーシン・クルジ・ノウスキー