
ObjectivePGP - это реализация протокола OpenPGP для iOS и MacOS. OpenPGP является наиболее широко используемым стандартом шифрования электронной почты. Это определяется рабочей группой OpenPGP целевой группы Internet Engineering (IETF).
Вот рассказ о блоге.
Вы хотите помочь, отлично! Продолжайте и распадайте наш репо, внесите изменения и отправьте нам запрос на привлечение.
Вы можете внести свой вклад. См. Appling.md
Пожалуйста, создайте запрос на развлечение.
ObjectivePGP остается под двойной лицензией:
Бесплатно для некоммерческого использования, охватываемого вариантом лицензии BSD. Это означает, что вы должны упомянуть Марцина Кшижановски в качестве первоначального автора этого кода и воспроизвести текст лицензии в вашем приложении.
Лицензия коммерческого использования для использования в коммерческих продуктах. Пожалуйста, имейте в виду, что некоторые бесплатные продукты остаются коммерческими продуктами. Пожалуйста, свяжитесь со мной по электронной почте для получения подробной информации.
Не уверены, что выбрать? Проверьте FAQ
dependencies: [
.package(url: "https://github.com/krzyzanowskim/ObjectivePGP.git", .upToNextMinor(from: "0.99.4"))
]
pod 'ObjectivePGP'
ObjectivePGP поставляется с фреймворками для последнего выпуска, вы можете скопировать и встроить в свой проект:
Объектив-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 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
См. Чанженел
Известные ограничения:
На сегодняшний день база кода ObjectivePGP подверглась полному аудиту безопасности от Cure53.
Этот продукт использует программное обеспечение, разработанное проектом OpenSSL для использования в OpenSSL Toolkit. (http://www.openssl.org/)
Марсин Кремановский