Package es.gob.jmulticard.card.dnie
Class Dnie
- java.lang.Object
-
- All Implemented Interfaces:
Card,CryptoCard,Cwa14890Card,Dni
public class Dnie extends AbstractIso7816EightCard implements Dni, Cwa14890Card
DNI Electrónico.
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String[]aliasesprivate static java.lang.StringAUTH_KEY_LABELprivate DniePrivateKeyReferenceauthKeyRefReferencia a la clave privada de autenticación.private javax.security.auth.callback.CallbackHandlercallbackHandlerprotected static LocationCDF_LOCATIONLocalización del CDF PKCS#15.static java.lang.StringCERT_ALIAS_AUTHAlias del certificado de autenticación del DNIe (siempre el mismo en el DNIe y tarjetas derivadas).protected static java.lang.StringCERT_ALIAS_CYPHERAlias del certificado de cifrado (siempre el mismo en las tarjetas derivadas del DNIe que soportan cifrado).static java.lang.StringCERT_ALIAS_INTERMEDIATE_CAAlias del certificado de CA intermedia (siempre el mismo en el DNIe).static java.lang.StringCERT_ALIAS_SIGNAlias del certificado de firma del DNIe (siempre el mismo en el DNIe y tarjetas derivadas).protected static java.lang.StringCERT_ALIAS_SIGNALIASAlias del certificado de firma (siempre el mismo en el DNIe y tarjetas derivadas).private static byte[]CERT_ICC_FILE_IDIdentificador del fichero del certificado de componente del DNIe.protected java.security.cert.X509CertificatecertAuthCertificado de autenticación.protected java.security.cert.X509CertificatecertCyphCertificado de cifrado.protected java.security.cert.X509CertificatecertIccCertificado de componente (ICC).private LocationcertPathAuthLocalización del certificado de autenticación.private LocationcertPathCyphLocalización del certificado de cifrado.private LocationcertPathSignLocalización del certificado de firma.private LocationcertPathSignAliasLocalización del certificado de firma con seudónimo.protected java.security.cert.X509CertificatecertSignCertificado de firma.protected java.security.cert.X509CertificatecertSignAliasCertificado de firma con seudónimo.protected CryptoHelpercryptoHelperManejador de funciones criptográficas.private static java.lang.StringCYPH_KEY_LABELprivate DniePrivateKeyReferencecyphKeyRefReferencia a la clave privada de cifrado.private static intDEFAULT_KEY_SIZEprivate static byteERROR_PIN_SW1Octeto que identifica una verificación fallida del PIN.protected static LocationIDESP_LOCATIONLocalización del EF IDESP.protected java.security.cert.X509CertificateintermediateCaCertCertificado de CA intermedia.protected static java.util.logging.LoggerLOGGERRegistro.private static java.lang.StringMASTER_FILE_NAMENombre del Master File del DNIe.private javax.security.auth.callback.PasswordCallbackpasswordCallbackprotected static LocationPRKDF_LOCATIONLocalización del PrKDF PKCS#15.protected ApduConnectionrawConnectionConexión inicial con la tarjeta, sin ningún canal seguro.private static java.lang.StringSIGN_KEY_LABELprivate DniePrivateKeyReferencesignAliasKeyRefReferencia a la clave privada de firma con seudónimo.private DniePrivateKeyReferencesignKeyRefReferencia a la clave privada de firma.-
Fields inherited from class es.gob.jmulticard.card.AbstractSmartCard
DEBUG
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedDnie(ApduConnection conn, javax.security.auth.callback.PasswordCallback pwc, CryptoHelper cryptoHlpr, javax.security.auth.callback.CallbackHandler ch)Construye una clase que representa un DNIe.protectedDnie(ApduConnection conn, javax.security.auth.callback.PasswordCallback pwc, CryptoHelper cryptoHlpr, javax.security.auth.callback.CallbackHandler ch, boolean loadCertsAndKeys)Construye una clase que representa un DNIe.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description byte[]changePIN(java.lang.String oldPin, java.lang.String newPin)Realiza la operación de cambio de PIN.byte[]cipherData(byte[] data, PrivateKeyReference privateKeyReference)Realiza un cifrado RSA directo con una clave privada.static voidconnect(ApduConnection conn)Conecta con el lector del sistema que tenga un DNIe insertado.booleanexternalAuthentication(byte[] extAuthenticationData)Envia el mensaje de autenticación externa.java.lang.String[]getAliases()Obtiene los alias de los certificados de la tarjeta.java.lang.StringgetCardName()Obtiene el nombre de la tarjeta.CdfgetCdf()Obtiene el CDF PKCS#15 del DNIe.java.security.cert.X509CertificategetCertificate(java.lang.String alias)Obtiene el certificado correspondiente al alias proporcionado.byte[]getChrCCvIfd(Cwa14890PublicConstants consts)Recupera el CHR de la clave pública del certificado de terminal.protected CryptoHelpergetCryptoHelper()Obtiene la clase con funcionalidades de base de criptografía.protected Cwa14890PrivateConstantsgetCwa14890PrivateConstants()Obtiene las constantes privadas CWA-14890 para el cifrado de canal.protected Cwa14890PublicConstantsgetCwa14890PublicConstants()Obtiene las constantes públicas CWA-14890 para el cifrado de canal.java.security.interfaces.RSAPublicKeygetIccCertPublicKey()Recupera la clave pública del certificado de componente.java.lang.StringgetIdesp()Obtiene el número de soporte (IDESP) del DNIe.intgetIfdKeyLength(Cwa14890PublicConstants consts)Obtiene la longitud, en octetos, de las claves RSA del certificado de comnponente del terminal.java.security.interfaces.RSAPrivateKeygetIfdPrivateKey(Cwa14890PrivateConstants consts)Recupera la clave privada del certificado de componente del terminal.byte[]getInternalAuthenticateMessage(byte[] randomIfd, byte[] chrCCvIfd)Obtiene el mensaje de autenticación interna de la tarjeta.protected javax.security.auth.callback.PasswordCallbackgetInternalPasswordCallback()Obtiene laPasswordCallbackpredefinida.protected javax.security.auth.callback.PasswordCallbackgetInternalPasswordCallback(boolean reset)Obtiene laPasswordCallbackpredefinida.protected javax.security.auth.callback.PasswordCallbackgetPasswordCallback()Obtiene laPasswordCallback.protected java.lang.StringgetPinMessage(int retriesLeft)Devuelve el texto del diálogo de inserción de PIN.intgetPinRetriesLeft()Devuelve los intentos restantes de comprobación de PIN del DNIe.PrivateKeyReferencegetPrivateKey(java.lang.String alias)Obtiene una referencia a la clave privada correspondiente al alias proporcionado.byte[]getRefIccPrivateKey(Cwa14890PublicConstants consts)Recupera la referencia a la clave privada del certificado de componente.byte[]getSerialNumber()Recupera el número de serie de un DNIe.protected booleanisSecurityChannelOpen()Indica si el canal CWA-14890 está o no abierto.private java.security.cert.X509CertificateloadCertificate(Location location)protected voidloadCertificates()Carga los certificados del DNIe.private voidloadCertificatesIfNotAlreadyLoaded()Carga los certificados del DNIe si no lo estaban ya.protected voidloadCertificatesPaths()Carga el certificado de la CA intermedia y las localizaciones de los certificados de firma y autenticación.protected voidloadKeyReferences()Carga la información pública con la referencia a las claves de firma.protected booleanneedAuthorizationToSign()Indica si la tarjeta requiere autorización del usuario para ejecutar una operación de firma.protected booleanneedsPinForLoadingCerts()Indica si este DNIe necesita validar el PIN para tener acceso a los certificados.voidopenSecureChannelIfNotAlreadyOpened()Establece y abre el canal seguro CWA-14890 si no lo estaba ya.voidopenSecureChannelIfNotAlreadyOpened(boolean doChv)Establece y abre el canal seguro CWA-14890 si no lo estaba ya.protected voidselectMasterFile()Selecciona el fichero maestro (directorio raíz de la tarjeta).voidsetCallbackHandler(javax.security.auth.callback.CallbackHandler handler)Asigna unCallbackHandlera la tarjeta.voidsetKeysToAuthentication(byte[] refPublicKey, byte[] refPrivateKey)Establece una clave pública y otra privada para la autenticación.voidsetPasswordCallback(javax.security.auth.callback.PasswordCallback pwc)Asigna unPasswordCallbacka la tarjeta.byte[]sign(byte[] data, java.lang.String signAlgorithm, PrivateKeyReference privateKeyReference)Realiza una firma electrónica.protected byte[]signInternal(byte[] data, java.lang.String signAlgorithm, PrivateKeyReference privateKeyReference)Ejecuta la operación interna de firma del DNIe.protected byte[]signOperation(byte[] data, java.lang.String signAlgorithm, PrivateKeyReference privateKeyReference)Realiza la operación de firma.java.lang.StringtoString()voidverifyIcc()Verifica el certificado de componente de la tarjeta.voidverifyIfdCertificateChain(Cwa14890PublicConstants consts)Verifica que los certificados declarados por el controlador (certificados de terminal) sean válidos para el uso de la tarjeta.voidverifyPin(javax.security.auth.callback.PasswordCallback psc)Verifica el PIN de la tarjeta.-
Methods inherited from class es.gob.jmulticard.card.iso7816eight.AbstractIso7816EightCard
verifyCertificate
-
Methods inherited from class es.gob.jmulticard.card.iso7816four.AbstractIso7816FourCard
getChallenge, readAllRecords, readBinaryComplete, selectFileById, selectFileByIdAndRead, selectFileByLocation, selectFileByLocationAndRead, selectFileByName, selectFileByName, setPublicKeyToVerification
-
Methods inherited from class es.gob.jmulticard.card.AbstractSmartCard
getCla, getConnection, sendArbitraryApdu, setConnection
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface es.gob.jmulticard.card.cwa14890.Cwa14890Card
getChallenge
-
-
-
-
Field Detail
-
DEFAULT_KEY_SIZE
private static final int DEFAULT_KEY_SIZE
- See Also:
- Constant Field Values
-
LOGGER
protected static final java.util.logging.Logger LOGGER
Registro.
-
ERROR_PIN_SW1
private static final byte ERROR_PIN_SW1
Octeto que identifica una verificación fallida del PIN.- See Also:
- Constant Field Values
-
callbackHandler
private transient javax.security.auth.callback.CallbackHandler callbackHandler
-
aliases
private transient java.lang.String[] aliases
-
CERT_ICC_FILE_ID
private static final byte[] CERT_ICC_FILE_ID
Identificador del fichero del certificado de componente del DNIe.
-
MASTER_FILE_NAME
private static final java.lang.String MASTER_FILE_NAME
Nombre del Master File del DNIe.- See Also:
- Constant Field Values
-
CERT_ALIAS_AUTH
public static final java.lang.String CERT_ALIAS_AUTH
Alias del certificado de autenticación del DNIe (siempre el mismo en el DNIe y tarjetas derivadas).- See Also:
- Constant Field Values
-
CERT_ALIAS_SIGN
public static final java.lang.String CERT_ALIAS_SIGN
Alias del certificado de firma del DNIe (siempre el mismo en el DNIe y tarjetas derivadas).- See Also:
- Constant Field Values
-
CERT_ALIAS_SIGNALIAS
protected static final java.lang.String CERT_ALIAS_SIGNALIAS
Alias del certificado de firma (siempre el mismo en el DNIe y tarjetas derivadas).- See Also:
- Constant Field Values
-
CERT_ALIAS_CYPHER
protected static final java.lang.String CERT_ALIAS_CYPHER
Alias del certificado de cifrado (siempre el mismo en las tarjetas derivadas del DNIe que soportan cifrado).- See Also:
- Constant Field Values
-
CERT_ALIAS_INTERMEDIATE_CA
public static final java.lang.String CERT_ALIAS_INTERMEDIATE_CA
Alias del certificado de CA intermedia (siempre el mismo en el DNIe).- See Also:
- Constant Field Values
-
AUTH_KEY_LABEL
private static final java.lang.String AUTH_KEY_LABEL
- See Also:
- Constant Field Values
-
SIGN_KEY_LABEL
private static final java.lang.String SIGN_KEY_LABEL
- See Also:
- Constant Field Values
-
CYPH_KEY_LABEL
private static final java.lang.String CYPH_KEY_LABEL
- See Also:
- Constant Field Values
-
CDF_LOCATION
protected static final Location CDF_LOCATION
Localización del CDF PKCS#15.
-
PRKDF_LOCATION
protected static final Location PRKDF_LOCATION
Localización del PrKDF PKCS#15.
-
IDESP_LOCATION
protected static final Location IDESP_LOCATION
Localización del EF IDESP.
-
certAuth
protected transient java.security.cert.X509Certificate certAuth
Certificado de autenticación.
-
certSign
protected transient java.security.cert.X509Certificate certSign
Certificado de firma.
-
certCyph
protected transient java.security.cert.X509Certificate certCyph
Certificado de cifrado.
-
certSignAlias
protected transient java.security.cert.X509Certificate certSignAlias
Certificado de firma con seudónimo.
-
certIcc
protected transient java.security.cert.X509Certificate certIcc
Certificado de componente (ICC).
-
intermediateCaCert
protected transient java.security.cert.X509Certificate intermediateCaCert
Certificado de CA intermedia.
-
certPathAuth
private transient Location certPathAuth
Localización del certificado de autenticación.
-
certPathSign
private transient Location certPathSign
Localización del certificado de firma. Es opcional, ya que no está presente en los DNI de menores de edad no emancipados.
-
certPathCyph
private transient Location certPathCyph
Localización del certificado de cifrado. Es opcional, ya que solo está presente en las TIF, no en los DNIe normales.
-
certPathSignAlias
private transient Location certPathSignAlias
Localización del certificado de firma con seudónimo. Es opcional, ya que solo está presente en las TIF, no en los DNIe normales.
-
authKeyRef
private transient DniePrivateKeyReference authKeyRef
Referencia a la clave privada de autenticación.
-
signKeyRef
private transient DniePrivateKeyReference signKeyRef
Referencia a la clave privada de firma.
-
cyphKeyRef
private transient DniePrivateKeyReference cyphKeyRef
Referencia a la clave privada de cifrado. Es opcional, ya que solo está presente en las TIF, no en los DNIe normales.
-
signAliasKeyRef
private transient DniePrivateKeyReference signAliasKeyRef
Referencia a la clave privada de firma con seudónimo. Es opcional, ya que solo está presente en las TIF, no en los DNIe normales.
-
rawConnection
protected transient ApduConnection rawConnection
Conexión inicial con la tarjeta, sin ningún canal seguro.
-
cryptoHelper
protected final CryptoHelper cryptoHelper
Manejador de funciones criptográficas.
-
passwordCallback
private javax.security.auth.callback.PasswordCallback passwordCallback
-
-
Constructor Detail
-
Dnie
protected Dnie(ApduConnection conn, javax.security.auth.callback.PasswordCallback pwc, CryptoHelper cryptoHlpr, javax.security.auth.callback.CallbackHandler ch) throws ApduConnectionException
Construye una clase que representa un DNIe.- Parameters:
conn- Conexión con la tarjeta.pwc- PasswordCallback para obtener el PIN del DNIe.cryptoHlpr- Funcionalidades criptográficas de utilidad que pueden variar entre máquinas virtuales.ch- Gestor de callbacks para la solicitud de datos al usuario.- Throws:
ApduConnectionException- Si la conexión con la tarjeta se proporciona cerrada y no es posible abrirla.
-
Dnie
protected Dnie(ApduConnection conn, javax.security.auth.callback.PasswordCallback pwc, CryptoHelper cryptoHlpr, javax.security.auth.callback.CallbackHandler ch, boolean loadCertsAndKeys) throws ApduConnectionException
Construye una clase que representa un DNIe.- Parameters:
conn- Conexión con la tarjeta.pwc- PasswordCallback para obtener el PIN del DNIe.cryptoHlpr- Funcionalidades criptográficas de utilidad que pueden variar entre máquinas virtuales.ch- Gestor de callbacks para la solicitud de datos al usuario.loadCertsAndKeys- Si se indicatrue, se cargan las referencias a las claves privadas y a los certificados, mientras que si se indicafalse, no se cargan, permitiendo la instanciación de un DNIe sin capacidades de firma o autenticación con certificados.- Throws:
ApduConnectionException- Si la conexión con la tarjeta se proporciona cerrada y no es posible abrirla.
-
-
Method Detail
-
getCryptoHelper
protected CryptoHelper getCryptoHelper()
Obtiene la clase con funcionalidades de base de criptografía.- Returns:
- Clase con funcionalidades de base de criptografía.
-
getPasswordCallback
protected javax.security.auth.callback.PasswordCallback getPasswordCallback()
Obtiene laPasswordCallback.- Returns:
PasswordCallback.
-
getCwa14890PublicConstants
protected Cwa14890PublicConstants getCwa14890PublicConstants()
Obtiene las constantes públicas CWA-14890 para el cifrado de canal.- Returns:
- Constantes públicas CWA-14890 para el cifrado de canal.
-
getCwa14890PrivateConstants
protected Cwa14890PrivateConstants getCwa14890PrivateConstants()
Obtiene las constantes privadas CWA-14890 para el cifrado de canal.- Returns:
- Constantes privadas CWA-14890 para el cifrado de canal.
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
connect
public static void connect(ApduConnection conn) throws ApduConnectionException
Conecta con el lector del sistema que tenga un DNIe insertado.- Parameters:
conn- Conexión hacia el DNIe.- Throws:
ApduConnectionException- Si hay problemas de conexión con la tarjeta.
-
loadKeyReferences
protected void loadKeyReferences()
Carga la información pública con la referencia a las claves de firma.
-
getSerialNumber
public byte[] getSerialNumber() throws ApduConnectionExceptionRecupera el número de serie de un DNIe.- Specified by:
getSerialNumberin interfaceCwa14890Card- Returns:
- Un array de octetos que contiene el número de serie del DNIe.
- Throws:
ApduConnectionException- Si la conexión con la tarjeta se proporciona cerrada y no es posible abrirla.
-
getCardName
public java.lang.String getCardName()
Description copied from class:AbstractSmartCardObtiene el nombre de la tarjeta.- Specified by:
getCardNamein classAbstractSmartCard- Returns:
- Nombre de la tarjeta
-
getAliases
public java.lang.String[] getAliases()
Description copied from interface:CryptoCardObtiene los alias de los certificados de la tarjeta.- Specified by:
getAliasesin interfaceCryptoCard- Returns:
- Array con los alias de los certificados de la tarjeta
-
getCdf
public Cdf getCdf() throws ApduConnectionException
Obtiene el CDF PKCS#15 del DNIe.- Returns:
- CDF PKCS#15 del DNIe.
- Throws:
ApduConnectionException- Si no se puede conectar con el DNIe.
-
loadCertificatesPaths
protected void loadCertificatesPaths() throws ApduConnectionExceptionCarga el certificado de la CA intermedia y las localizaciones de los certificados de firma y autenticación.- Throws:
ApduConnectionException- Si hay problemas en la precarga.
-
getCertificate
public java.security.cert.X509Certificate getCertificate(java.lang.String alias) throws CryptoCardException, PinExceptionDescription copied from interface:CryptoCardObtiene el certificado correspondiente al alias proporcionado.- Specified by:
getCertificatein interfaceCryptoCard- Parameters:
alias- Alias del certificado.- Returns:
- Certificado correspondiente al alias proporcionado o
nullsi no existe ningún certificado con ese alias. - Throws:
CryptoCardException- Si ocurre algún problema al recuperar el certificado.PinException- Si el PIN proporcionado es incorrecto.
-
verifyIcc
public void verifyIcc()
Description copied from interface:Cwa14890CardVerifica el certificado de componente de la tarjeta.- Specified by:
verifyIccin interfaceCwa14890Card
-
getIccCertPublicKey
public java.security.interfaces.RSAPublicKey getIccCertPublicKey() throws java.io.IOExceptionDescription copied from interface:Cwa14890CardRecupera la clave pública del certificado de componente.- Specified by:
getIccCertPublicKeyin interfaceCwa14890Card- Returns:
- Clave pública del certificado de componente.
- Throws:
java.io.IOException- Cuando ocurre algún problema en la selección y lectura del certificado
-
verifyIfdCertificateChain
public void verifyIfdCertificateChain(Cwa14890PublicConstants consts) throws ApduConnectionException
Description copied from interface:Cwa14890CardVerifica que los certificados declarados por el controlador (certificados de terminal) sean válidos para el uso de la tarjeta.- Specified by:
verifyIfdCertificateChainin interfaceCwa14890Card- Parameters:
consts- Clase de claves.- Throws:
ApduConnectionException- Cuando ocurre algín error en la comunicación con la tarjeta.
-
getRefIccPrivateKey
public byte[] getRefIccPrivateKey(Cwa14890PublicConstants consts)
Description copied from interface:Cwa14890CardRecupera la referencia a la clave privada del certificado de componente.- Specified by:
getRefIccPrivateKeyin interfaceCwa14890Card- Parameters:
consts- Clase de claves.- Returns:
- Referencia a clave privada
-
getChrCCvIfd
public byte[] getChrCCvIfd(Cwa14890PublicConstants consts)
Description copied from interface:Cwa14890CardRecupera el CHR de la clave pública del certificado de terminal.- Specified by:
getChrCCvIfdin interfaceCwa14890Card- Parameters:
consts- Clase de claves.- Returns:
- Referencia a clave pública
-
getIfdPrivateKey
public java.security.interfaces.RSAPrivateKey getIfdPrivateKey(Cwa14890PrivateConstants consts)
Description copied from interface:Cwa14890CardRecupera la clave privada del certificado de componente del terminal.- Specified by:
getIfdPrivateKeyin interfaceCwa14890Card- Parameters:
consts- Clase de claves privadas.- Returns:
- Clave privada.
-
setKeysToAuthentication
public void setKeysToAuthentication(byte[] refPublicKey, byte[] refPrivateKey) throws ApduConnectionExceptionDescription copied from interface:Cwa14890CardEstablece una clave pública y otra privada para la autenticación. interna y externa de la tarjeta.- Specified by:
setKeysToAuthenticationin interfaceCwa14890Card- Parameters:
refPublicKey- Referencia a la clave pública.refPrivateKey- Referencia a la clave privada.- Throws:
ApduConnectionException- Cuando ocurre un error de comunicación con la tarjeta.
-
getInternalAuthenticateMessage
public byte[] getInternalAuthenticateMessage(byte[] randomIfd, byte[] chrCCvIfd) throws ApduConnectionExceptionDescription copied from interface:Cwa14890CardObtiene el mensaje de autenticación interna de la tarjeta.- Specified by:
getInternalAuthenticateMessagein interfaceCwa14890Card- Parameters:
randomIfd- Bytes aleatorios generados.chrCCvIfd- CHR de la clave pública del certificado de terminal.- Returns:
- Mensaje cifrado con la clave privada de componente de la tarjeta.
- Throws:
ApduConnectionException- Cuando ocurre un error de comunicación con la tarjeta.
-
externalAuthentication
public boolean externalAuthentication(byte[] extAuthenticationData) throws ApduConnectionExceptionDescription copied from interface:Cwa14890CardEnvia el mensaje de autenticación externa.- Specified by:
externalAuthenticationin interfaceCwa14890Card- Parameters:
extAuthenticationData- Mensaje de autenticación externa.- Returns:
truesi la autenticación finalizó correctamente,falseen caso contrario.- Throws:
ApduConnectionException- Cuando ocurre un error en la comunicación con la tarjeta.
-
getPrivateKey
public PrivateKeyReference getPrivateKey(java.lang.String alias)
Description copied from interface:CryptoCardObtiene una referencia a la clave privada correspondiente al alias proporcionado.- Specified by:
getPrivateKeyin interfaceCryptoCard- Parameters:
alias- Alias del certificado- Returns:
- Referencia a la clave privada correspondiente al alias proporcionado o
nullsi no existe ninguna clave privada con ese alias
-
sign
public byte[] sign(byte[] data, java.lang.String signAlgorithm, PrivateKeyReference privateKeyReference) throws CryptoCardException, PinExceptionDescription copied from interface:CryptoCardRealiza una firma electrónica.- Specified by:
signin interfaceCryptoCard- Parameters:
data- Datos a firmar.signAlgorithm- Algoritmo de firma.privateKeyReference- Referencia a la clave privada de firma.- Returns:
- Datos firmados (PKCS#1 v1.5).
- Throws:
CryptoCardException- Si ocurre algún problema durante la firma.PinException- Si el PIN proporcionado es incorrecto o no es posible obtenerlo.
-
signInternal
protected byte[] signInternal(byte[] data, java.lang.String signAlgorithm, PrivateKeyReference privateKeyReference) throws CryptoCardException, PinExceptionEjecuta la operación interna de firma del DNIe.- Parameters:
data- Datos a firmar.signAlgorithm- Algoritmo de firma.privateKeyReference- Referencia a la clave privada de firma.- Returns:
- Datos firmados.
- Throws:
CryptoCardException- Si hay problemas durante el proceso.PinException- Si no se ha podido realizar la firma por un problema con el PIN (no estar hecha la autenticación de PIN).
-
needAuthorizationToSign
protected boolean needAuthorizationToSign()
Indica si la tarjeta requiere autorización del usuario para ejecutar una operación de firma.- Returns:
truesi la tarjeta requiere autorización del usuario para ejecutar una operación de firma,falseen caso contrario.
-
cipherData
public byte[] cipherData(byte[] data, PrivateKeyReference privateKeyReference) throws CryptoCardException, PinException, LostChannelExceptionRealiza un cifrado RSA directo con una clave privada.- Parameters:
data- Datos a cifrar.privateKeyReference- Referencia a la clave privada RSA a usar.- Returns:
- Datos cifrados.
- Throws:
CryptoCardException- Si hay errores en el proceso en la tarjeta o en la comunicación con ella.PinException- Si el PIN introducido no es correcto.LostChannelException- Si se pierde el canal de cifrado.
-
signOperation
protected byte[] signOperation(byte[] data, java.lang.String signAlgorithm, PrivateKeyReference privateKeyReference) throws CryptoCardException, PinExceptionRealiza la operación de firma.- Parameters:
data- Datos que se desean firmar.signAlgorithm- Algoritmo de firma (por ejemplo,SHA512withRSA,SHA1withRSA, etc.).privateKeyReference- Referencia a la clave privada para la firma.- Returns:
- Firma de los datos.
- Throws:
CryptoCardException- Cuando se produce un error durante la operación de firma.PinException- Si el PIN proporcionado en la PasswordCallback es incorrecto y no estaba habilitado el reintento automático.AuthenticationModeLockedException- Cuando el DNIe está bloqueado.
-
openSecureChannelIfNotAlreadyOpened
public void openSecureChannelIfNotAlreadyOpened() throws CryptoCardException, PinExceptionEstablece y abre el canal seguro CWA-14890 si no lo estaba ya.- Throws:
CryptoCardException- Si hay problemas en el proceso.PinException- Si el PIN usado para la apertura de canal no es válido o no se ha proporcionado un PIN para validar.
-
openSecureChannelIfNotAlreadyOpened
public void openSecureChannelIfNotAlreadyOpened(boolean doChv) throws CryptoCardException, PinExceptionEstablece y abre el canal seguro CWA-14890 si no lo estaba ya.- Parameters:
doChv-truesi la apertura de canal seguro debe incluir la verificación de PIN,falsesi debe abrirse canal seguro sin verificar PIN.- Throws:
CryptoCardException- Si hay problemas en el proceso.PinException- Si el PIN usado para la apertura de canal no es válido o no se ha proporcionado un PIN para validar (en el caso de que se opte por verificar el PIN).
-
getPinRetriesLeft
public int getPinRetriesLeft() throws PinExceptionDevuelve los intentos restantes de comprobación de PIN del DNIe.- Returns:
- Intentos restantes de comprobación de PIN del DNIe.
- Throws:
PinException- Si hay cualquier problema durante el proceso.
-
getInternalPasswordCallback
protected javax.security.auth.callback.PasswordCallback getInternalPasswordCallback() throws PinException, PasswordCallbackNotFoundExceptionObtiene laPasswordCallbackpredefinida.- Returns:
PasswordCallbackpredefinida.- Throws:
PinException- Si no se puede obtener el PIN delCallbackHandler.PasswordCallbackNotFoundException- Si no hay unaPasswordCallbackdefinida.
-
getInternalPasswordCallback
protected javax.security.auth.callback.PasswordCallback getInternalPasswordCallback(boolean reset) throws PinException, PasswordCallbackNotFoundExceptionObtiene laPasswordCallbackpredefinida.- Parameters:
reset- Si hay que eliinar cualquier PIN previemante introducido en laPasswordCallback.- Returns:
PasswordCallbackpredefinida.- Throws:
PinException- Si no se puede obtener el PIN delCallbackHandler.PasswordCallbackNotFoundException- Si no hay unaPasswordCallbackdefinida.
-
getPinMessage
protected java.lang.String getPinMessage(int retriesLeft)
Devuelve el texto del diálogo de inserción de PIN.- Parameters:
retriesLeft- Intentos restantes antes de bloquear la tarjeta.- Returns:
- Mensaje que mostrar en el cuerpo del diálogo de inserción de PIN.
-
loadCertificate
private java.security.cert.X509Certificate loadCertificate(Location location) throws java.io.IOException, Iso7816FourCardException, java.security.cert.CertificateException
- Throws:
java.io.IOExceptionIso7816FourCardExceptionjava.security.cert.CertificateException
-
loadCertificates
protected void loadCertificates() throws CryptoCardExceptionCarga los certificados del DNIe. Necesita que estén previamente cargadas las rutas hacia los certificados.- Throws:
CryptoCardException- En cualquier error durante la carga.
-
selectMasterFile
protected final void selectMasterFile() throws ApduConnectionException, Iso7816FourCardExceptionDescription copied from class:AbstractIso7816FourCardSelecciona el fichero maestro (directorio raíz de la tarjeta).- Specified by:
selectMasterFilein classAbstractIso7816FourCard- Throws:
ApduConnectionException- Si hay problemas en el envío de la APDU.FileNotFoundException- Si no se encuentra el MF.Iso7816FourCardException- Si no se puede seleccionar el fichero maestro por cualquier otra causa.
-
isSecurityChannelOpen
protected boolean isSecurityChannelOpen()
Indica si el canal CWA-14890 está o no abierto.- Returns:
truesi el canal CWA-14890 está abierto,falseen caso contrario.
-
verifyPin
public void verifyPin(javax.security.auth.callback.PasswordCallback psc) throws ApduConnectionException, PinExceptionDescription copied from class:AbstractIso7816FourCardVerifica el PIN de la tarjeta. El método reintenta hasta que se introduce el PIN correctamente, se bloquea la tarjeta por exceso de intentos de introducción de PIN o se recibe una excepción (derivada deRuntimeExceptiono unaApduConnectionException.- Specified by:
verifyPinin classAbstractIso7816FourCard- Parameters:
psc- PIN de la tarjeta.- Throws:
ApduConnectionException- Cuando ocurre un error en la comunicación con la tarjeta.PinException- Si el PIN proporcionado en la PasswordCallback es incorrecto y no estaba habilitado el reintento automático
-
getIfdKeyLength
public int getIfdKeyLength(Cwa14890PublicConstants consts)
Description copied from interface:Cwa14890CardObtiene la longitud, en octetos, de las claves RSA del certificado de comnponente del terminal.- Specified by:
getIfdKeyLengthin interfaceCwa14890Card- Parameters:
consts- Clase de claves.- Returns:
- Longitud, en octetos, de las claves RSA del certificado de comnponente del terminal.
-
changePIN
public byte[] changePIN(java.lang.String oldPin, java.lang.String newPin) throws CryptoCardException, PinExceptionRealiza la operación de cambio de PIN. Necesita tener un canal administrativo abierto.- Parameters:
oldPin- PIN actual.newPin- PIN nuevo.- Returns:
- APDU de respuesta de la operación.
- Throws:
CryptoCardException- Cuando se produce un error en el cambio de PIN.PinException- Si el PIN actual es incorrecto.AuthenticationModeLockedException- Cuando el DNIe está bloqueado.
-
setCallbackHandler
public void setCallbackHandler(javax.security.auth.callback.CallbackHandler handler)
Asigna unCallbackHandlera la tarjeta.- Parameters:
handler-CallbackHandlera asignar.
-
setPasswordCallback
public void setPasswordCallback(javax.security.auth.callback.PasswordCallback pwc)
Asigna unPasswordCallbacka la tarjeta.- Parameters:
pwc-PasswordCallbacka asignar.
-
getIdesp
public java.lang.String getIdesp() throws Iso7816FourCardException, java.io.IOExceptionObtiene el número de soporte (IDESP) del DNIe.- Returns:
- Obtiene el número de soporte (IDESP) del DNIe.
- Throws:
Iso7816FourCardException- Si hay problemas enviando la APDU.FileNotFoundException- Si no se encuentra el fichero que contiene el IDESP.java.io.IOException- Si no se puede conectar con la tarjeta.
-
needsPinForLoadingCerts
protected boolean needsPinForLoadingCerts()
Indica si este DNIe necesita validar el PIN para tener acceso a los certificados.- Returns:
truesi este DNIe necesita validar el PIN para tener acceso a los certificadosfalseen caso contrario.
-
loadCertificatesIfNotAlreadyLoaded
private void loadCertificatesIfNotAlreadyLoaded() throws ApduConnectionException, CryptoCardException, PinExceptionCarga los certificados del DNIe si no lo estaban ya.- Throws:
PinException- Si se necesita el PIN para cargar certificados y no se ha podido comprobar el PIN.ApduConnectionExceptionCryptoCardException
-
-