Package es.gob.jmulticard.connection
Class AbstractApduEncrypter
- java.lang.Object
-
- es.gob.jmulticard.connection.AbstractApduEncrypter
-
- Direct Known Subclasses:
ApduEncrypterAes,ApduEncrypterDes
public abstract class AbstractApduEncrypter extends java.lang.ObjectCifrador de APDU según CWA-14890.
-
-
Field Summary
Fields Modifier and Type Field Description private static byteCLA_OF_PROTECTED_APDUCLA que se suma a los CLA de las APDU que se protegen.private static byteISO7816_PADDING_PREFIXPrimer byte a agregar en los padding ISO-7816.protected intpaddingLengthEn el relleno ISO-7816, longitud de la cual debe ser múltiplo el tamaño de los datos de salida.protected static byteTAG_DATA_TLVTag del TLV de datos de una APDU protegida.private static byteTAG_LE_TLVTag del TLV del Le de una APDU protegida.private static byteTLV_VALUE_PREFIX_TO_MACByte prefijo de los datos para el cálculo de la MAC.
-
Constructor Summary
Constructors Constructor Description AbstractApduEncrypter()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected static byte[]addPadding7816(byte[] data, int size)Agrega un relleno (padding) a un array de bytes conforme las especificaciones ISO 7816.abstract ResponseApdudecryptResponseApdu(ResponseApdu responseApdu, byte[] keyCipher, byte[] ssc, byte[] kMac, CryptoHelper cryptoHelper)Desencripta la Apdu de respuesta recibida a partir de las variables del canal de cifrado (kenc, kmac, ssc).protected abstract byte[]encryptData(byte[] data, byte[] key, byte[] ssc, CryptoHelper cryptoHelper)Encripta los datos para una APDU cifrada.protected abstract byte[]generateMac(byte[] dataPadded, byte[] ssc, byte[] kMac, CryptoHelper cryptoHelper)Aplica el algoritmo para la generación de la MAC del mensaje.private static byte[]getCompleteDataBytes(java.lang.Integer le, byte[] tlvDataBytes)private byte[]getDataTlv(byte[] data, byte[] keyCipher, byte[] sendSequenceCounter, CryptoHelper cryptoHelper, int paddingSize)CipheredApduprotectAPDU(CommandApdu unprotectedApdu, byte[] keyCipher, byte[] keyMac, byte[] sendSequenceCounter, CryptoHelper cryptoHelper)Encapsula una APDU para ser enviada por un canal seguro CWA-14890.protected static byte[]removePadding7816(byte[] paddedData)Elimina el padding ISO 7816 de los datos.private static voidwipeByteArray(byte[] inArray)Borra un array de octetos insertando nulos.
-
-
-
Field Detail
-
TAG_DATA_TLV
protected static final byte TAG_DATA_TLV
Tag del TLV de datos de una APDU protegida.- See Also:
- Constant Field Values
-
TAG_LE_TLV
private static final byte TAG_LE_TLV
Tag del TLV del Le de una APDU protegida.- See Also:
- Constant Field Values
-
TLV_VALUE_PREFIX_TO_MAC
private static final byte TLV_VALUE_PREFIX_TO_MAC
Byte prefijo de los datos para el cálculo de la MAC.- See Also:
- Constant Field Values
-
CLA_OF_PROTECTED_APDU
private static final byte CLA_OF_PROTECTED_APDU
CLA que se suma a los CLA de las APDU que se protegen.- See Also:
- Constant Field Values
-
ISO7816_PADDING_PREFIX
private static final byte ISO7816_PADDING_PREFIX
Primer byte a agregar en los padding ISO-7816.- See Also:
- Constant Field Values
-
paddingLength
protected transient int paddingLength
En el relleno ISO-7816, longitud de la cual debe ser múltiplo el tamaño de los datos de salida.
-
-
Method Detail
-
protectAPDU
public CipheredApdu protectAPDU(CommandApdu unprotectedApdu, byte[] keyCipher, byte[] keyMac, byte[] sendSequenceCounter, CryptoHelper cryptoHelper) throws java.io.IOException
Encapsula una APDU para ser enviada por un canal seguro CWA-14890. El contador SSC se autoincrementa durante la operación.- Parameters:
unprotectedApdu- APDU desprotegida (en claro).keyCipher- Clave simétrica de cifrado.keyMac- Clave simétrica para el MAC.sendSequenceCounter- Contador de secuencia actual.cryptoHelper- Operador criptográfico.- Returns:
- APDU protegida (cifrada y con MAC).
- Throws:
java.io.IOException- Si ocurren problemas durante los cifrados de la APDU.
-
encryptData
protected abstract byte[] encryptData(byte[] data, byte[] key, byte[] ssc, CryptoHelper cryptoHelper) throws java.io.IOExceptionEncripta los datos para una APDU cifrada.- Parameters:
data- Datos de la APDU.key- Clave de cifrado.ssc- Contador de secuencia.cryptoHelper- Clase con las funcionalidades de criptografía.- Returns:
- Datos enconcriptados.
- Throws:
java.io.IOException- En cualquier error.
-
addPadding7816
protected static byte[] addPadding7816(byte[] data, int size)Agrega un relleno (padding) a un array de bytes conforme las especificaciones ISO 7816. Esto es, se agrega un byte0x80al array y se completa con bytes0x00hasta que el array es múltiplo de 8.- Parameters:
data- Datos a los que agregar el relleno.size- Longitud de la cual debe ser múltiplo el tamaño de los datos de salida.- Returns:
- Datos con relleno.
-
removePadding7816
protected static byte[] removePadding7816(byte[] paddedData)
Elimina el padding ISO 7816 de los datos.- Parameters:
paddedData- Datos con padding.- Returns:
- Datos sin padding.
-
generateMac
protected abstract byte[] generateMac(byte[] dataPadded, byte[] ssc, byte[] kMac, CryptoHelper cryptoHelper) throws java.io.IOExceptionAplica el algoritmo para la generación de la MAC del mensaje.- Parameters:
dataPadded- Datos sobre los que generar la MAC.ssc- Contador de secuencia de la operación.kMac- Clave necesaria para la operación (algoritmo dependiente de la implementación).cryptoHelper- Manejador para la realización de las operaciones criptográficas.- Returns:
- Clave de autenticación de los datos.
- Throws:
java.io.IOException- Si hay errores de entrada / salida.
-
decryptResponseApdu
public abstract ResponseApdu decryptResponseApdu(ResponseApdu responseApdu, byte[] keyCipher, byte[] ssc, byte[] kMac, CryptoHelper cryptoHelper) throws java.io.IOException
Desencripta la Apdu de respuesta recibida a partir de las variables del canal de cifrado (kenc, kmac, ssc).- Parameters:
responseApdu- Respuesta a desencriptar.keyCipher- Clave de cifrado.ssc- Contador de secuencia.kMac- Clave de cifrado.cryptoHelper- Instancia que lleva a cabo las operaciones de cifrado.- Returns:
- Apdu descifrada.
- Throws:
java.io.IOException- En cualquier error durante el proceso de descifrado.
-
wipeByteArray
private static void wipeByteArray(byte[] inArray)
Borra un array de octetos insertando nulos.- Parameters:
inArray- Array a borrar, se modifica por mutabilidad.
-
getCompleteDataBytes
private static byte[] getCompleteDataBytes(java.lang.Integer le, byte[] tlvDataBytes)
-
getDataTlv
private byte[] getDataTlv(byte[] data, byte[] keyCipher, byte[] sendSequenceCounter, CryptoHelper cryptoHelper, int paddingSize) throws java.io.IOException- Throws:
java.io.IOException
-
-