diegocidm4/idnie
Librería basada en Swift que permite las siguientes opciones:
Requisitos
Esta librería está disponible para en ios 14 o posterior. Esta librería permite la comunicación entre un dispositivo móvil y el DNIe Español u otros documentos electrónicos de identidad, mediante el uso de NFC. Es por ello que esta librería sólo puede ser usada en dispositivos móvil provistos de tecnología NFC, esta tecnología está disponible en todos los iphone a partir de iphone 7.
Esta librería tiene las siguientes dependencias:
- BigInt (https://github.com/Boilertalk/BigInt.swift.git)
- OpenSSL (https://github.com/krzyzanowskim/OpenSSL.git)
- CryptoSwift (https://github.com/krzyzanowskim/CryptoSwift.git)
Funcionalidades
Esta librería ofrece las siguientes funcionalidades:
Lectura de datos públicos del DNIe o cualquier documento electrónico de identidad:
Utilizando can para establecer canal seguro.
passportReader.readPassport(accessKey: can, paceKeyReference: PACEHandler.CAN_PACE_KEY_REFERENCE, tags: [], skipSecureElements: true, customDisplayMessage: { (displayMessage) in return NFCUtils.customDisplayMessage(displayMessage: displayMessage)
}, completed: { (passport, error) in
if let passport = passport {
//passport contiene todos los datos del DNIe
} else {
//procesamos error
print("Error: \(error?.localizedDescription)")
}
})
}Utilizando mrz para establecer canal seguro.
passportReader.readPassport(accessKey: mrzKey, paceKeyReference: PACEHandler.MRZ_PACE_KEY_REFERENCE, tags: [], skipSecureElements: true, customDisplayMessage: { (displayMessage) in
return NFCUtils.customDisplayMessage(displayMessage: displayMessage)
}, leeCertificadosPublicos: false, completed: { (passport, error) in
if let passport = passport {
//passport contiene todos los datos del DNIe
} else {
//procesamos error
print("Error: \(error?.localizedDescription)")
}
})
} Firma de un texto en formato String con el certificado del DNIe que se le indique en certToUse:
``Swift passportReader.signTextDNIe(accessKey: can, pin: pinDNIe, datosFirma: textoFirmar, certToUse: .FIRMA, passport: passport, paceKeyReference: PACEHandler.CAN_PACE_KEY_REFERENCE, tags: , skipSecureElements: true, customDisplayMessage: { (displayMessage) in return NFCUtils.customDisplayMessage(displayMessage: displayMessage) }, completed: { (pass, error) in if let passport = passport { //passport.signedMessage contiene los datos firmados } else { //procesamos error print("Error: \(error?.localizedDescription)") } }) } ``
Firma el hash del documento pasado como parámetro en document con el certificado del DNIe que se le indique en certToUse:
``Swift passportReader.signDocumentDNIe(accessKey: can, pin: pinDNIe, document: urlDocumento, certToUse: .FIRMA, passport: passport, paceKeyReference: PACEHandler.CAN_PACE_KEY_REFERENCE, tags: , skipSecureElements: true, customDisplayMessage: { (displayMessage) in return NFCUtils.customDisplayMessage(displayMessage: displayMessage) }, completed: { (pass, error) in if let passport = passport { //passport.signedMessage contiene los datos firmados } else { //procesamos error print("Error: \(error?.localizedDescription)") } }) } ``
Firma el hash y el digest pasados como parámetros con el certificado del DNIe que se le indique en certToUse:
``Swift passportReader.signHashDNIe(accessKey: can, pin: pinDNIe, hash: hash, digest: digest, certToUse: DNIeCertificates.FIRMA, passport: passport, paceKeyReference: PACEHandler.CAN_PACE_KEY_REFERENCE, tags: , skipSecureElements: true, customDisplayMessage: { (displayMessage) in return NFCUtils.customDisplayMessage(displayMessage: displayMessage) }, operacion: .FIRMA_DOCUMENTO, completed: { (passport, error) in if let passport = passport { //passport.signedMessage contiene los datos firmados } else { //procesamos error print("Error: \(error?.localizedDescription)") } }) } ``
Establece los canales de conexión necesarios para realizar operaciones de autenticación con el DNIe dejándolos abiertos a la espera de la petición de firma:
``Swift passportReader.authenticationDNIeOpenSession(accessKey: can, pin: pinDNIe, passport: passport, paceKeyReference: PACEHandler.CAN_PACE_KEY_REFERENCE, tags: , skipSecureElements: true, customDisplayMessage: { (displayMessage) in return NFCUtils.customDisplayMessage(displayMessage: displayMessage) }, completed: { (pass, error) in if let passport = passport { //passport contiene todos los datos del DNIe } else { //procesamos error print("Error: \(error?.localizedDescription)") } }) } ``
Firma el hash y el digest pasados como parámetros con el certificado de autenticación del DNIe:
``Swift passportReader.signChallengeDNIe(hash: hash, digest: digest, signPadding: .PKCS, passport: passport, paceKeyReference: PACEHandler.CAN_PACE_KEY_REFERENCE, customDisplayMessage: { (displayMessage) in return NFCUtils.customDisplayMessage(displayMessage: displayMessage) }, completed: { (passport, error) in if let passport = passport { //passport.signedMessage contiene los datos firmados } else { //procesamos error print("Error: \(error?.localizedDescription)") } }) } ``
Instalación
Swift Package Manager
iDNIe.swift es compatible con Swift Package Manager v4 (Swift 4 and above). Simplemente añádela a las dependencias en tu Package.swift.
dependencies: [
.package(url: "https://github.com/diegocidm4/iDNIe.git", from: "1.0.0")
]CocoaPods
iDNIe.swift se distribuye a través de CocoaPods. Simplemente añade esta línea en tu fichero Podfile:
use_frameworks!
pod 'iDNIe'Después de esto, ejecuta el siguiente comando:
pod installDespués de cualquiera de las dos opcines anteriores, podrás importarla en tus ficheros .swift.
import iDNIeAutor
iDNIe ha sido creada y mantenida por [Diego Cid]
Puede seguirme en Twitter en @diegocidm4.
Licencia
La librería se distribuye con una licencia anual asociada a un app bundle.
Package Metadata
Repository: diegocidm4/idnie
Default branch: main
README: README.md