Class AbstractIso7816FourCard
- java.lang.Object
-
- es.gob.jmulticard.card.AbstractSmartCard
-
- es.gob.jmulticard.card.iso7816four.AbstractIso7816FourCard
-
- All Implemented Interfaces:
Card
- Direct Known Subclasses:
AbstractIso7816EightCard
,CardOS
,SmartCafePkcs15Applet
,StCard
,TuiR5
public abstract class AbstractIso7816FourCard extends AbstractSmartCard
Tarjeta compatible ISO-7816-4.
-
-
Field Summary
Fields Modifier and Type Field Description private static java.util.logging.Logger
LOGGER
Logger
por defecto.private static int
MAX_READ_CHUNK
Tamaño máximo de datos que se puede leer en una única APDU.private static StatusWord
SW_EOF_REACHED
Se ha alcanzado prematuramente el final de fichero.private static StatusWord
SW_FILE_NOT_FOUND
EF o DF no encontrado.private static StatusWord
SW_OFFSET_OUTSIDE_EF
El offset sobrepasa el límite de tamaño del EF.private static StatusWord
SW_UNSATISFIED_SECURITY_STATE
Condición de seguridad no satisfecha.-
Fields inherited from class es.gob.jmulticard.card.AbstractSmartCard
DEBUG
-
-
Constructor Summary
Constructors Constructor Description AbstractIso7816FourCard(byte c, ApduConnection conn)
Construye una tarjeta compatible ISO 7816-4.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description byte[]
getChallenge()
Lanza un desafío a la tarjeta para obtener un array de 8 bytes aleatorios.java.util.List<byte[]>
readAllRecords()
Lee todos los registros del binario actualmente seleccionado.private ResponseApdu
readBinary(byte msbOffset, byte lsbOffset, byte readLength)
Lee un contenido binario del fichero actualmente seleccionado.byte[]
readBinaryComplete(int len)
Lee por completo el contenido binario del fichero actualmente seleccionado.int
selectFileById(byte[] id)
Selecciona un fichero (DF o EF).byte[]
selectFileByIdAndRead(byte[] id)
Selecciona un fichero y lo lee por completo.int
selectFileByLocation(Location location)
Selecciona un fichero (DF o EF).byte[]
selectFileByLocationAndRead(Location location)
Selecciona un fichero y lo lee por completo.int
selectFileByName(byte[] name)
Selecciona un fichero por nombre.int
selectFileByName(java.lang.String name)
Selecciona un fichero por nombre.protected abstract void
selectMasterFile()
Selecciona el fichero maestro (directorio raíz de la tarjeta).void
setPublicKeyToVerification(byte[] refPublicKey)
Establece una clave pública para la la verificación posterior de un certificado emitido por otro al que pertenece esta clave.abstract void
verifyPin(javax.security.auth.callback.PasswordCallback pinPc)
Verifica el PIN de la tarjeta.-
Methods inherited from class es.gob.jmulticard.card.AbstractSmartCard
getCardName, getCla, getConnection, sendArbitraryApdu, setConnection
-
-
-
-
Field Detail
-
SW_UNSATISFIED_SECURITY_STATE
private static final StatusWord SW_UNSATISFIED_SECURITY_STATE
Condición de seguridad no satisfecha.
-
SW_FILE_NOT_FOUND
private static final StatusWord SW_FILE_NOT_FOUND
EF o DF no encontrado.
-
SW_EOF_REACHED
private static final StatusWord SW_EOF_REACHED
Se ha alcanzado prematuramente el final de fichero.
-
SW_OFFSET_OUTSIDE_EF
private static final StatusWord SW_OFFSET_OUTSIDE_EF
El offset sobrepasa el límite de tamaño del EF.
-
MAX_READ_CHUNK
private static final int MAX_READ_CHUNK
Tamaño máximo de datos que se puede leer en una única APDU.- See Also:
- Constant Field Values
-
LOGGER
private static final java.util.logging.Logger LOGGER
Logger
por defecto.
-
-
Constructor Detail
-
AbstractIso7816FourCard
public AbstractIso7816FourCard(byte c, ApduConnection conn)
Construye una tarjeta compatible ISO 7816-4.- Parameters:
c
- Octeto de clase (CLA) de las APDU.conn
- Connexión con la tarjeta.
-
-
Method Detail
-
readBinary
private ResponseApdu readBinary(byte msbOffset, byte lsbOffset, byte readLength) throws ApduConnectionException, RequiredSecurityStateNotSatisfiedException, OffsetOutsideEfException
Lee un contenido binario del fichero actualmente seleccionado.- Parameters:
msbOffset
- Octeto más significativo del desplazamiento (offset) hasta el punto de inicio de la lectura desde el comienzo del fichero.lsbOffset
- Octeto menos significativo del desplazamiento (offset) hasta el punto de inicio de la lectura desde el comienzo del fichero.readLength
- Longitud de los datos a leer (en octetos).- Returns:
- APDU de respuesta.
- Throws:
ApduConnectionException
- Si hay problemas en el envío de la APDU.RequiredSecurityStateNotSatisfiedException
- Si la lectura requiere el cumplimiento de una condición de seguridad y esta no se ha satisfecho.OffsetOutsideEfException
- Si el desplazamiento indicado o el tamaño indicados para la lectura caen fuera de los límites del fichero.
-
readAllRecords
public java.util.List<byte[]> readAllRecords() throws ApduConnectionException, Iso7816FourCardException
Lee todos los registros del binario actualmente seleccionado.- Returns:
- Lista de registros leidos del binario actualmente seleccionado.
- Throws:
ApduConnectionException
- Si hay problemas en el envío de la APDU.Iso7816FourCardException
- SI ocurren problemas durante la lectura de los registros.
-
readBinaryComplete
public byte[] readBinaryComplete(int len) throws java.io.IOException
Lee por completo el contenido binario del fichero actualmente seleccionado.- Parameters:
len
- Longitud del fichero a leer.- Returns:
- APDU de respuesta.
- Throws:
ApduConnectionException
- Si hay problemas en el envío de la APDU.java.io.IOException
- Si hay problemas en el buffer de lectura.
-
selectFileByName
public int selectFileByName(java.lang.String name) throws ApduConnectionException, Iso7816FourCardException
Selecciona un fichero por nombre.- Parameters:
name
- Nombre del fichero- Returns:
- Tamaño del fichero seleccionado.
- Throws:
ApduConnectionException
- Si ocurre algún problema durante la selecciónIso7816FourCardException
- Si el fichero no se puede seleccionar por cualquier otra causa
-
selectFileByName
public int selectFileByName(byte[] name) throws ApduConnectionException, FileNotFoundException, Iso7816FourCardException
Selecciona un fichero por nombre.- Parameters:
name
- Nombre del fichero en hexadecimal- Returns:
- Tamaño del fichero seleccionado.
- Throws:
FileNotFoundException
- Si el fichero no existeApduConnectionException
- Si ocurre algún problema durante la selecciónIso7816FourCardException
- Si el fichero no se puede seleccionar por cualquier otra causa
-
selectFileById
public int selectFileById(byte[] id) throws ApduConnectionException, Iso7816FourCardException
Selecciona un fichero (DF o EF).- Parameters:
id
- Identificador del fichero a seleccionar.- Returns:
- Tamaño del fichero seleccionado.
- Throws:
ApduConnectionException
- Si hay problemas en el envío de la APDU.Iso7816FourCardException
- Si falla la selección de fichero.
-
selectFileByIdAndRead
public byte[] selectFileByIdAndRead(byte[] id) throws Iso7816FourCardException, java.io.IOException
Selecciona un fichero y lo lee por completo.- Parameters:
id
- Identificador del fichero a leer.- Returns:
- Contenido del fichero apuntado por la dirección
id
. - Throws:
ApduConnectionException
- Si hay problemas en el envío de la APDU.Iso7816FourCardException
- Si falla la selección de fichero.java.io.IOException
- Si hay problemas en el buffer de lectura.
-
selectFileByLocation
public int selectFileByLocation(Location location) throws ApduConnectionException, Iso7816FourCardException
Selecciona un fichero (DF o EF).- Parameters:
location
- La ruta absoluta donde se encuentra el fichero a leer- Returns:
- Tamaño del fichero seleccionado
- Throws:
ApduConnectionException
- Si hay problemas en el envío de la APDUIso7816FourCardException
- Si falla la selección de fichero
-
selectFileByLocationAndRead
public byte[] selectFileByLocationAndRead(Location location) throws java.io.IOException, Iso7816FourCardException
Selecciona un fichero y lo lee por completo.- Parameters:
location
- Ruta absoluta del fichero a leer.- Returns:
- Contenido del fichero apuntado por la ruta
location
. - Throws:
ApduConnectionException
- Si hay problemas en el envío de la APDU.Iso7816FourCardException
- Si falla la selección de fichero.java.io.IOException
- Si hay problemas en el buffer de lectura.
-
selectMasterFile
protected abstract void selectMasterFile() throws ApduConnectionException, FileNotFoundException, Iso7816FourCardException
Selecciona el fichero maestro (directorio raíz de la tarjeta).- 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.
-
setPublicKeyToVerification
public void setPublicKeyToVerification(byte[] refPublicKey) throws SecureChannelException, ApduConnectionException
Establece una clave pública para la la verificación posterior de un certificado emitido por otro al que pertenece esta clave.- Parameters:
refPublicKey
- Referencia a la clave pública para su carga.- Throws:
SecureChannelException
- Cuando ocurre un error durante la selección de la clave.ApduConnectionException
- Cuando ocurre un error en la comunicación con la tarjeta.
-
getChallenge
public byte[] getChallenge() throws ApduConnectionException
Lanza un desafío a la tarjeta para obtener un array de 8 bytes aleatorios.- Returns:
- Array de 8 bytes aleatorios.
- Throws:
ApduConnectionException
- Cuando ocurre un error en la comunicación con la tarjeta.
-
verifyPin
public abstract void verifyPin(javax.security.auth.callback.PasswordCallback pinPc) throws ApduConnectionException, PinException
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
.- 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áticoAuthenticationModeLockedException
- Si está bloqueada la verificación de PIN (por ejemplo, por superar el número máximo de intentos).
-
-