
ObjectivePGP es una implementación del protocolo OpenPGP para iOS y MacOS. OpenPGP es el estándar de cifrado de correo electrónico más utilizado. Está definido por el grupo de trabajo OpenPGP de la Fuerza de Tarea de Ingeniería de Internet (IETF).
Aquí está la historia de la publicación del blog.
¡Quieres ayudar, genial! Continúe y bifurca nuestro repositorio, haga sus cambios y envíenos una solicitud de extracción.
Eres bienvenido a contribuir. Ver contribuyente.md
Por favor cree solicitud de extracción.
El ObjectivePGP permanece bajo una licencia dual:
Gratis para uso no comercial, cubierto por la variante de la licencia BSD. Eso significa que debe mencionar a Marcin Krzyżanowski como el autor original de este código y reproducir el texto de la licencia dentro de su aplicación.
Licencia de uso comercial para usar en productos comerciales. Tenga en cuenta que algunos productos gratuitos siguen siendo productos comerciales. Póngase en contacto conmigo por correo electrónico para obtener más detalles.
¿No está seguro de qué elegir? Verifique las preguntas frecuentes
dependencies: [
.package(url: "https://github.com/krzyzanowskim/ObjectivePGP.git", .upToNextMinor(from: "0.99.4"))
]
pod 'ObjectivePGP'
ObjectivePGP viene con los marcos para la última versión, puede copiar e incrustar en su proyecto:
Objetivo-C
# import < ObjectivePGP/ObjectivePGP.h >Rápido
import ObjectivePGP NSArray <PGPKey *> *keys = [ObjectivePGP readKeysFromPath: @" /path/to/key.asc " error: nil ]; let keys = try ObjectivePGP . readKeys ( fromPath : " /path/to/key.asc " ) Keyring es un almacenamiento (en memoria o en el disco) que mantiene todo tipo de claves 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 ) Firma datos con una clave:
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 ) La armadura ASCII es un convertidor de codificación binario a textual. La armadura ASCII implica encerrar mensajes encriptados en ASCII para que puedan enviarse en un formato de mensajería estándar como el correo electrónico.
Ejemplo:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: For more info see https://www.objectivepgp.org
[...]
-----END PGP PUBLIC KEY BLOCK-----
La clase PGPArmor se puede usar para convertir el formato binario en formato ASCII
NSString *armoredKey = [PGPArmor armoredData: encrypted as: PGPArmorPublicKey]; let armoredKey = Armor . armored ( Data ( ) , as : . publicKey ) Cuando se convierte manualmente, es importante usar el valor PGPArmorType correcto que definen el encabezado. Puede ser una parte difícil, así que aquí está la hoja de trucos:
| Tipo datos | Pgmortype | Ejemplo |
|---|---|---|
| Encriptado | PGPArmorMessage | Armor.armored(ObjectivePGP.encrypt(...), as: .message) |
| Descifrado | PGPArmorMessage | Armor.armored(ObjectivePGP.decrypt(...), as: .message) |
| Clave pública | PGPArmorTypePublic | Armor.armored(key.export(), as: .publicKey) |
| Clave secreta | PGPArmorTypeSecret | Armor.armored(key.export(), as: .secretKey) |
Para cualquier resultado del cifrado, el tipo es PGPArmorMessage
Ver ChangeLog
Limitaciones conocidas:
Hasta la fecha, la base de código ObjectivePGP ha sufrido una auditoría de seguridad completa de Cure53.
Este producto utiliza el software desarrollado por el proyecto OpenSSL para su uso en OpenSSL Toolkit. (http://www.openssl.org/)
Marcin Krzyżanowski