
ObjectivePGP 는 iOS 및 MACOS 용 OpenPGP 프로토콜을 구현 한 것입니다. OpenPGP는 가장 널리 사용되는 이메일 암호화 표준입니다. 인터넷 엔지니어링 태스크 포스 (IETF)의 OpenPGP 실무 그룹에 의해 정의됩니다.
다음은 블로그 게시물 이야기입니다.
당신은 도와주고 싶어, 훌륭합니다! 계속해서 우리의 저장소를 포크하고, 당신의 변경을하고, 풀 요청을 보내십시오.
당신은 기여를 환영합니다. Contributing.md를 참조하십시오
풀 요청을 작성하십시오.
ObjectivePGP는 이중 라이센스에 따라 유지됩니다.
BSD 라이센스의 변형에 의해 적용되는 비상업적 사용에 무료. 즉,이 코드의 원래 저자로 Marcin Krzyžanowski를 언급하고 앱 내부의 라이센스 텍스트를 재현해야합니다.
상업용 제품에 사용할 수있는 상업용 라이센스. 일부 무료 제품은 상용 제품으로 남아 있음을 명심하십시오. 자세한 내용은 이메일을 통해 저에게 연락하십시오.
무엇을 선택 해야할지 모르겠습니까? 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 " ) Keyring은 모든 종류의 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의 암호화 된 메시징을 ENCAIS를 포함하여 이메일과 같은 표준 메시징 형식으로 보낼 수 있습니다.
예:
-----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