Class Ceres
- java.lang.Object
-
- es.gob.jmulticard.card.AbstractSmartCard
-
- es.gob.jmulticard.card.iso7816four.AbstractIso7816FourCard
-
- es.gob.jmulticard.card.iso7816eight.AbstractIso7816EightCard
-
- es.gob.jmulticard.card.fnmt.ceres.Ceres
-
- All Implemented Interfaces:
Card
,CryptoCard
public final class Ceres extends AbstractIso7816EightCard implements CryptoCard
Tarjeta FNMT-RCM CERES.
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.String,java.lang.String>
aliasByCertAndKeyId
Alias de los certificados de la tarjeta indexados por el identificador interno del certificado (pasado debyte[]
aString
).private static byte[]
ATR_MASK_SLE_FN19
private static byte[]
ATR_MASK_SLE_FN20
private static byte[]
ATR_MASK_ST
private static byte[]
ATR_MASK_TC
private static Atr
ATR_SLE_FN19
private static Atr
ATR_SLE_FN20
private static Atr
ATR_ST
private static Atr
ATR_TC
private boolean
authenticated
private javax.security.auth.callback.CallbackHandler
callbackHandler
private static Location
CDF_LOCATION
private java.util.Map<java.lang.String,java.security.cert.X509Certificate>
certs
Certificados de la tarjeta indexados por su alias.private static byte
CLA
private CryptoHelper
cryptoHelper
private static byte
ERROR_PIN_SW1
Octeto que identifica una verificación fallida del PIN por PIN de longitud incorrecta.private static byte
ERROR_PIN_SW2
Octeto que identifica una verificación fallida del PIN por PIN incorrecto.private java.util.Map<java.lang.String,java.lang.Byte>
keys
Claves privadas de la tarjeta indexadas por el alias de su certificado asociado.private static java.util.logging.Logger
LOGGER
private static java.lang.String
MASTER_FILE_NAME
Nombre del Fichero Maestro.private static int
MAX_APDU_SIZE
private javax.security.auth.callback.PasswordCallback
passwordCallback
private static Location
PRKDF_LOCATION
-
Fields inherited from class es.gob.jmulticard.card.AbstractSmartCard
DEBUG
-
-
Constructor Summary
Constructors Constructor Description Ceres(ApduConnection conn, CryptoHelper ch)
Construye una clase que representa una tarjeta FNMT-RCM CERES.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static void
checkAtr(byte[] atrBytes)
static void
connect(ApduConnection conn)
Inicia la conexión con la tarjeta CERES.java.lang.String[]
getAliases()
Obtiene los alias de los certificados de la tarjeta.javax.security.auth.callback.CallbackHandler
getCallbackHandler()
Obtiene elCallbackHandler
.java.lang.String
getCardName()
Obtiene el nombre de la tarjeta.java.security.cert.X509Certificate
getCertificate(java.lang.String alias)
Obtiene el certificado correspondiente al alias proporcionado.protected javax.security.auth.callback.PasswordCallback
getInternalPasswordCallback()
Obtiene laPasswordCallback
predefinida.private int
getPinRetriesLeft()
PrivateKeyReference
getPrivateKey(java.lang.String alias)
Obtiene una referencia a la clave privada correspondiente al alias proporcionado.private void
hideCertsWithoutKey()
Oculta los certificados que no tienen una clave privada asociada.private void
loadData(int keyBitSize, byte[] digestInfo)
private void
preload()
protected void
selectMasterFile()
Selecciona el fichero maestro (directorio raíz de la tarjeta).void
setCallbackHandler(javax.security.auth.callback.CallbackHandler callh)
Define elCallbackHandler
.void
setPasswordCallback(javax.security.auth.callback.PasswordCallback pwc)
Establece elPasswordCallback
para el PIN de la tarjeta.byte[]
sign(byte[] data, java.lang.String algorithm, PrivateKeyReference keyRef)
Realiza una firma electrónica.void
verifyPin(javax.security.auth.callback.PasswordCallback pinPc)
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
-
-
-
-
Field Detail
-
ATR_MASK_TC
private static final byte[] ATR_MASK_TC
-
ATR_TC
private static final Atr ATR_TC
-
ATR_MASK_ST
private static final byte[] ATR_MASK_ST
-
ATR_ST
private static final Atr ATR_ST
-
ATR_MASK_SLE_FN20
private static final byte[] ATR_MASK_SLE_FN20
-
ATR_SLE_FN20
private static final Atr ATR_SLE_FN20
-
ATR_MASK_SLE_FN19
private static final byte[] ATR_MASK_SLE_FN19
-
ATR_SLE_FN19
private static final Atr ATR_SLE_FN19
-
CLA
private static final byte CLA
- See Also:
- Constant Field Values
-
LOGGER
private static final java.util.logging.Logger LOGGER
-
cryptoHelper
private final transient CryptoHelper cryptoHelper
-
CDF_LOCATION
private static final Location CDF_LOCATION
-
PRKDF_LOCATION
private static final Location PRKDF_LOCATION
-
MAX_APDU_SIZE
private static final int MAX_APDU_SIZE
- See Also:
- Constant Field Values
-
MASTER_FILE_NAME
private static final java.lang.String MASTER_FILE_NAME
Nombre del Fichero Maestro.- See Also:
- Constant Field Values
-
ERROR_PIN_SW1
private static final byte ERROR_PIN_SW1
Octeto que identifica una verificación fallida del PIN por PIN de longitud incorrecta.- See Also:
- Constant Field Values
-
ERROR_PIN_SW2
private static final byte ERROR_PIN_SW2
Octeto que identifica una verificación fallida del PIN por PIN incorrecto.- See Also:
- Constant Field Values
-
certs
private transient java.util.Map<java.lang.String,java.security.cert.X509Certificate> certs
Certificados de la tarjeta indexados por su alias.
-
aliasByCertAndKeyId
private transient java.util.Map<java.lang.String,java.lang.String> aliasByCertAndKeyId
Alias de los certificados de la tarjeta indexados por el identificador interno del certificado (pasado debyte[]
aString
).
-
keys
private transient java.util.Map<java.lang.String,java.lang.Byte> keys
Claves privadas de la tarjeta indexadas por el alias de su certificado asociado.
-
passwordCallback
private transient javax.security.auth.callback.PasswordCallback passwordCallback
-
authenticated
private transient boolean authenticated
-
callbackHandler
private javax.security.auth.callback.CallbackHandler callbackHandler
-
-
Constructor Detail
-
Ceres
public Ceres(ApduConnection conn, CryptoHelper ch) throws ApduConnectionException, InvalidCardException
Construye una clase que representa una tarjeta FNMT-RCM CERES.- Parameters:
conn
- Conexión con la tarjeta.ch
- Clase para la realización de las huellas digitales del DigestInfo.- Throws:
ApduConnectionException
- Si hay problemas con la conexión proporcionada.InvalidCardException
- Si la tarjeta conectada no es una FNMT-RCM CERES.
-
-
Method Detail
-
setPasswordCallback
public void setPasswordCallback(javax.security.auth.callback.PasswordCallback pwc)
Establece elPasswordCallback
para el PIN de la tarjeta.- Parameters:
pwc
-PasswordCallback
para el PIN de la tarjeta.
-
checkAtr
private static void checkAtr(byte[] atrBytes) throws InvalidCardException
- Throws:
InvalidCardException
-
connect
public static void connect(ApduConnection conn) throws ApduConnectionException, InvalidCardException
Inicia la conexión con la tarjeta CERES.- Parameters:
conn
- Conexión con el lector de tarjetas.- Throws:
ApduConnectionException
- Si ocurren errores de conexión.InvalidCardException
- Si la tarjeta encontrada en el lector no es una tarjeta FNMT-RCM-CERES.
-
preload
private void preload() throws ApduConnectionException, Iso7816FourCardException, java.io.IOException, java.security.cert.CertificateException, Asn1Exception, TlvException
- Throws:
ApduConnectionException
Iso7816FourCardException
java.io.IOException
java.security.cert.CertificateException
Asn1Exception
TlvException
-
hideCertsWithoutKey
private void hideCertsWithoutKey()
Oculta los certificados que no tienen una clave privada asociada.
-
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
-
getCertificate
public java.security.cert.X509Certificate getCertificate(java.lang.String alias)
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.
-
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 algorithm, PrivateKeyReference keyRef) throws CryptoCardException, PinException
Description copied from interface:CryptoCard
Realiza una firma electrónica.- Specified by:
sign
in interfaceCryptoCard
- Parameters:
data
- Datos a firmar.algorithm
- Algoritmo de firma.keyRef
- 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.
-
loadData
private void loadData(int keyBitSize, byte[] digestInfo) throws CryptoCardException
- Throws:
CryptoCardException
-
selectMasterFile
protected void selectMasterFile() throws ApduConnectionException, FileNotFoundException, 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.
-
verifyPin
public void verifyPin(javax.security.auth.callback.PasswordCallback pinPc) 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:
pinPc
- 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
-
getInternalPasswordCallback
protected javax.security.auth.callback.PasswordCallback getInternalPasswordCallback() throws PinException
Obtiene laPasswordCallback
predefinida.- Returns:
PasswordCallback
predefinida.- Throws:
PinException
- Si no se puede obtener el PIN delCallbackHandler
.
-
getPinRetriesLeft
private int getPinRetriesLeft() throws PinException
- Throws:
PinException
-
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
-
getCallbackHandler
public javax.security.auth.callback.CallbackHandler getCallbackHandler()
Obtiene elCallbackHandler
.- Returns:
CallbackHandler
.
-
setCallbackHandler
public void setCallbackHandler(javax.security.auth.callback.CallbackHandler callh)
Define elCallbackHandler
.- Parameters:
callh
-CallbackHandler
a definir.
-
-