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[]
aliases
private static java.lang.String
AUTH_KEY_LABEL
private DniePrivateKeyReference
authKeyRef
Referencia a la clave privada de autenticación.private javax.security.auth.callback.CallbackHandler
callbackHandler
protected static Location
CDF_LOCATION
Localización del CDF PKCS#15.static java.lang.String
CERT_ALIAS_AUTH
Alias del certificado de autenticación del DNIe (siempre el mismo en el DNIe y tarjetas derivadas).protected static java.lang.String
CERT_ALIAS_CYPHER
Alias del certificado de cifrado (siempre el mismo en las tarjetas derivadas del DNIe que soportan cifrado).static java.lang.String
CERT_ALIAS_INTERMEDIATE_CA
Alias del certificado de CA intermedia (siempre el mismo en el DNIe).static java.lang.String
CERT_ALIAS_SIGN
Alias del certificado de firma del DNIe (siempre el mismo en el DNIe y tarjetas derivadas).protected static java.lang.String
CERT_ALIAS_SIGNALIAS
Alias del certificado de firma (siempre el mismo en el DNIe y tarjetas derivadas).private static byte[]
CERT_ICC_FILE_ID
Identificador del fichero del certificado de componente del DNIe.protected java.security.cert.X509Certificate
certAuth
Certificado de autenticación.protected java.security.cert.X509Certificate
certCyph
Certificado de cifrado.protected java.security.cert.X509Certificate
certIcc
Certificado de componente (ICC).private Location
certPathAuth
Localización del certificado de autenticación.private Location
certPathCyph
Localización del certificado de cifrado.private Location
certPathSign
Localización del certificado de firma.private Location
certPathSignAlias
Localización del certificado de firma con seudónimo.protected java.security.cert.X509Certificate
certSign
Certificado de firma.protected java.security.cert.X509Certificate
certSignAlias
Certificado de firma con seudónimo.protected CryptoHelper
cryptoHelper
Manejador de funciones criptográficas.private static java.lang.String
CYPH_KEY_LABEL
private DniePrivateKeyReference
cyphKeyRef
Referencia a la clave privada de cifrado.private static int
DEFAULT_KEY_SIZE
private static byte
ERROR_PIN_SW1
Octeto que identifica una verificación fallida del PIN.protected static Location
IDESP_LOCATION
Localización del EF IDESP.protected java.security.cert.X509Certificate
intermediateCaCert
Certificado de CA intermedia.protected static java.util.logging.Logger
LOGGER
Registro.private static java.lang.String
MASTER_FILE_NAME
Nombre del Master File del DNIe.private javax.security.auth.callback.PasswordCallback
passwordCallback
protected static Location
PRKDF_LOCATION
Localización del PrKDF PKCS#15.protected ApduConnection
rawConnection
Conexión inicial con la tarjeta, sin ningún canal seguro.private static java.lang.String
SIGN_KEY_LABEL
private DniePrivateKeyReference
signAliasKeyRef
Referencia a la clave privada de firma con seudónimo.private DniePrivateKeyReference
signKeyRef
Referencia a la clave privada de firma.-
Fields inherited from class es.gob.jmulticard.card.AbstractSmartCard
DEBUG
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
Dnie(ApduConnection conn, javax.security.auth.callback.PasswordCallback pwc, CryptoHelper cryptoHlpr, javax.security.auth.callback.CallbackHandler ch)
Construye una clase que representa un DNIe.protected
Dnie(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 void
connect(ApduConnection conn)
Conecta con el lector del sistema que tenga un DNIe insertado.boolean
externalAuthentication(byte[] extAuthenticationData)
Envia el mensaje de autenticación externa.java.lang.String[]
getAliases()
Obtiene los alias de los certificados de la tarjeta.java.lang.String
getCardName()
Obtiene el nombre de la tarjeta.Cdf
getCdf()
Obtiene el CDF PKCS#15 del DNIe.java.security.cert.X509Certificate
getCertificate(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 CryptoHelper
getCryptoHelper()
Obtiene la clase con funcionalidades de base de criptografía.protected Cwa14890PrivateConstants
getCwa14890PrivateConstants()
Obtiene las constantes privadas CWA-14890 para el cifrado de canal.protected Cwa14890PublicConstants
getCwa14890PublicConstants()
Obtiene las constantes públicas CWA-14890 para el cifrado de canal.java.security.interfaces.RSAPublicKey
getIccCertPublicKey()
Recupera la clave pública del certificado de componente.java.lang.String
getIdesp()
Obtiene el número de soporte (IDESP) del DNIe.int
getIfdKeyLength(Cwa14890PublicConstants consts)
Obtiene la longitud, en octetos, de las claves RSA del certificado de comnponente del terminal.java.security.interfaces.RSAPrivateKey
getIfdPrivateKey(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.PasswordCallback
getInternalPasswordCallback()
Obtiene laPasswordCallback
predefinida.protected javax.security.auth.callback.PasswordCallback
getInternalPasswordCallback(boolean reset)
Obtiene laPasswordCallback
predefinida.protected javax.security.auth.callback.PasswordCallback
getPasswordCallback()
Obtiene laPasswordCallback
.protected java.lang.String
getPinMessage(int retriesLeft)
Devuelve el texto del diálogo de inserción de PIN.int
getPinRetriesLeft()
Devuelve los intentos restantes de comprobación de PIN del DNIe.PrivateKeyReference
getPrivateKey(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 boolean
isSecurityChannelOpen()
Indica si el canal CWA-14890 está o no abierto.private java.security.cert.X509Certificate
loadCertificate(Location location)
protected void
loadCertificates()
Carga los certificados del DNIe.private void
loadCertificatesIfNotAlreadyLoaded()
Carga los certificados del DNIe si no lo estaban ya.protected void
loadCertificatesPaths()
Carga el certificado de la CA intermedia y las localizaciones de los certificados de firma y autenticación.protected void
loadKeyReferences()
Carga la información pública con la referencia a las claves de firma.protected boolean
needAuthorizationToSign()
Indica si la tarjeta requiere autorización del usuario para ejecutar una operación de firma.protected boolean
needsPinForLoadingCerts()
Indica si este DNIe necesita validar el PIN para tener acceso a los certificados.void
openSecureChannelIfNotAlreadyOpened()
Establece y abre el canal seguro CWA-14890 si no lo estaba ya.void
openSecureChannelIfNotAlreadyOpened(boolean doChv)
Establece y abre el canal seguro CWA-14890 si no lo estaba ya.protected void
selectMasterFile()
Selecciona el fichero maestro (directorio raíz de la tarjeta).void
setCallbackHandler(javax.security.auth.callback.CallbackHandler handler)
Asigna unCallbackHandler
a la tarjeta.void
setKeysToAuthentication(byte[] refPublicKey, byte[] refPrivateKey)
Establece una clave pública y otra privada para la autenticación.void
setPasswordCallback(javax.security.auth.callback.PasswordCallback pwc)
Asigna unPasswordCallback
a 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.String
toString()
void
verifyIcc()
Verifica el certificado de componente de la tarjeta.void
verifyIfdCertificateChain(Cwa14890PublicConstants consts)
Verifica que los certificados declarados por el controlador (certificados de terminal) sean válidos para el uso de la tarjeta.void
verifyPin(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:
toString
in 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 ApduConnectionException
Recupera el número de serie de un DNIe.- Specified by:
getSerialNumber
in 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:AbstractSmartCard
Obtiene el nombre de la tarjeta.- Specified by:
getCardName
in classAbstractSmartCard
- Returns:
- Nombre de la tarjeta
-
getAliases
public java.lang.String[] getAliases()
Description copied from interface:CryptoCard
Obtiene los alias de los certificados de la tarjeta.- Specified by:
getAliases
in 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 ApduConnectionException
Carga 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, PinException
Description copied from interface:CryptoCard
Obtiene el certificado correspondiente al alias proporcionado.- Specified by:
getCertificate
in interfaceCryptoCard
- Parameters:
alias
- Alias del certificado.- Returns:
- Certificado correspondiente al alias proporcionado o
null
si 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:Cwa14890Card
Verifica el certificado de componente de la tarjeta.- Specified by:
verifyIcc
in interfaceCwa14890Card
-
getIccCertPublicKey
public java.security.interfaces.RSAPublicKey getIccCertPublicKey() throws java.io.IOException
Description copied from interface:Cwa14890Card
Recupera la clave pública del certificado de componente.- Specified by:
getIccCertPublicKey
in 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:Cwa14890Card
Verifica que los certificados declarados por el controlador (certificados de terminal) sean válidos para el uso de la tarjeta.- Specified by:
verifyIfdCertificateChain
in 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:Cwa14890Card
Recupera la referencia a la clave privada del certificado de componente.- Specified by:
getRefIccPrivateKey
in interfaceCwa14890Card
- Parameters:
consts
- Clase de claves.- Returns:
- Referencia a clave privada
-
getChrCCvIfd
public byte[] getChrCCvIfd(Cwa14890PublicConstants consts)
Description copied from interface:Cwa14890Card
Recupera el CHR de la clave pública del certificado de terminal.- Specified by:
getChrCCvIfd
in 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:Cwa14890Card
Recupera la clave privada del certificado de componente del terminal.- Specified by:
getIfdPrivateKey
in interfaceCwa14890Card
- Parameters:
consts
- Clase de claves privadas.- Returns:
- Clave privada.
-
setKeysToAuthentication
public void setKeysToAuthentication(byte[] refPublicKey, byte[] refPrivateKey) throws ApduConnectionException
Description copied from interface:Cwa14890Card
Establece una clave pública y otra privada para la autenticación. interna y externa de la tarjeta.- Specified by:
setKeysToAuthentication
in 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 ApduConnectionException
Description copied from interface:Cwa14890Card
Obtiene el mensaje de autenticación interna de la tarjeta.- Specified by:
getInternalAuthenticateMessage
in 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 ApduConnectionException
Description copied from interface:Cwa14890Card
Envia el mensaje de autenticación externa.- Specified by:
externalAuthentication
in interfaceCwa14890Card
- Parameters:
extAuthenticationData
- Mensaje de autenticación externa.- Returns:
true
si la autenticación finalizó correctamente,false
en 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:CryptoCard
Obtiene una referencia a la clave privada correspondiente al alias proporcionado.- Specified by:
getPrivateKey
in interfaceCryptoCard
- Parameters:
alias
- Alias del certificado- Returns:
- Referencia a la clave privada correspondiente al alias proporcionado o
null
si no existe ninguna clave privada con ese alias
-
sign
public byte[] sign(byte[] data, java.lang.String signAlgorithm, PrivateKeyReference privateKeyReference) throws CryptoCardException, PinException
Description copied from interface:CryptoCard
Realiza una firma electrónica.- Specified by:
sign
in 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, PinException
Ejecuta 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:
true
si la tarjeta requiere autorización del usuario para ejecutar una operación de firma,false
en caso contrario.
-
cipherData
public byte[] cipherData(byte[] data, PrivateKeyReference privateKeyReference) throws CryptoCardException, PinException, LostChannelException
Realiza 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, PinException
Realiza 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, PinException
Establece 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, PinException
Establece y abre el canal seguro CWA-14890 si no lo estaba ya.- Parameters:
doChv
-true
si la apertura de canal seguro debe incluir la verificación de PIN,false
si 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 PinException
Devuelve 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, PasswordCallbackNotFoundException
Obtiene laPasswordCallback
predefinida.- Returns:
PasswordCallback
predefinida.- Throws:
PinException
- Si no se puede obtener el PIN delCallbackHandler
.PasswordCallbackNotFoundException
- Si no hay unaPasswordCallback
definida.
-
getInternalPasswordCallback
protected javax.security.auth.callback.PasswordCallback getInternalPasswordCallback(boolean reset) throws PinException, PasswordCallbackNotFoundException
Obtiene laPasswordCallback
predefinida.- Parameters:
reset
- Si hay que eliinar cualquier PIN previemante introducido en laPasswordCallback
.- Returns:
PasswordCallback
predefinida.- Throws:
PinException
- Si no se puede obtener el PIN delCallbackHandler
.PasswordCallbackNotFoundException
- Si no hay unaPasswordCallback
definida.
-
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.IOException
Iso7816FourCardException
java.security.cert.CertificateException
-
loadCertificates
protected void loadCertificates() throws CryptoCardException
Carga 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, Iso7816FourCardException
Description copied from class:AbstractIso7816FourCard
Selecciona el fichero maestro (directorio raíz de la tarjeta).- Specified by:
selectMasterFile
in 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:
true
si el canal CWA-14890 está abierto,false
en caso contrario.
-
verifyPin
public void verifyPin(javax.security.auth.callback.PasswordCallback psc) throws ApduConnectionException, PinException
Description copied from class:AbstractIso7816FourCard
Verifica 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 deRuntimeException
o unaApduConnectionException
.- Specified by:
verifyPin
in 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:Cwa14890Card
Obtiene la longitud, en octetos, de las claves RSA del certificado de comnponente del terminal.- Specified by:
getIfdKeyLength
in 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, PinException
Realiza 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 unCallbackHandler
a la tarjeta.- Parameters:
handler
-CallbackHandler
a asignar.
-
setPasswordCallback
public void setPasswordCallback(javax.security.auth.callback.PasswordCallback pwc)
Asigna unPasswordCallback
a la tarjeta.- Parameters:
pwc
-PasswordCallback
a asignar.
-
getIdesp
public java.lang.String getIdesp() throws Iso7816FourCardException, java.io.IOException
Obtiene 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:
true
si este DNIe necesita validar el PIN para tener acceso a los certificadosfalse
en caso contrario.
-
loadCertificatesIfNotAlreadyLoaded
private void loadCertificatesIfNotAlreadyLoaded() throws ApduConnectionException, CryptoCardException, PinException
Carga 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.ApduConnectionException
CryptoCardException
-
-