Package es.gob.jmulticard.connection
Class AbstractApduEncrypter
java.lang.Object
es.gob.jmulticard.connection.AbstractApduEncrypter
- Direct Known Subclasses:
ApduEncrypterAes
,ApduEncrypterDes
Cifrador de APDU según CWA-14890.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final byte
CLA que se suma a los CLA de las APDU que se protegen.private static final byte
Primer byte a agregar en los padding ISO-7816.protected int
En el relleno ISO-7816, longitud de la cual debe ser múltiplo el tamaño de los datos de salida.protected static final byte
Tag del TLV de datos de una APDU protegida.private static final byte
Tag del TLV del Le de una APDU protegida.private static final byte
Byte prefijo de los datos para el cálculo de la MAC. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected static byte[]
addPadding7816
(byte[] data, int size) Agrega un relleno (padding) a un array de bytes conforme las especificaciones ISO 7816.abstract ResponseApdu
decryptResponseApdu
(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
(Integer le, byte[] tlvDataBytes) private byte[]
getDataTlv
(byte[] data, byte[] keyCipher, byte[] sendSequenceCounter, CryptoHelper cryptoHelper, int paddingSize) protectAPDU
(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 void
wipeByteArray
(byte[] inArray) Borra un array de octetos insertando nulos.
-
Field Details
-
TAG_DATA_TLV
protected static final byte TAG_DATA_TLVTag del TLV de datos de una APDU protegida.- See Also:
-
TAG_LE_TLV
private static final byte TAG_LE_TLVTag del TLV del Le de una APDU protegida.- See Also:
-
TLV_VALUE_PREFIX_TO_MAC
private static final byte TLV_VALUE_PREFIX_TO_MACByte prefijo de los datos para el cálculo de la MAC.- See Also:
-
CLA_OF_PROTECTED_APDU
private static final byte CLA_OF_PROTECTED_APDUCLA que se suma a los CLA de las APDU que se protegen.- See Also:
-
ISO7816_PADDING_PREFIX
private static final byte ISO7816_PADDING_PREFIXPrimer byte a agregar en los padding ISO-7816.- See Also:
-
paddingLength
protected transient int paddingLengthEn el relleno ISO-7816, longitud de la cual debe ser múltiplo el tamaño de los datos de salida.
-
-
Constructor Details
-
AbstractApduEncrypter
public AbstractApduEncrypter()
-
-
Method Details
-
protectAPDU
public CipheredApdu protectAPDU(CommandApdu unprotectedApdu, byte[] keyCipher, byte[] keyMac, byte[] sendSequenceCounter, CryptoHelper cryptoHelper) throws 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:
IOException
- Si ocurren problemas durante los cifrados de la APDU.
-
encryptData
protected abstract byte[] encryptData(byte[] data, byte[] key, byte[] ssc, CryptoHelper cryptoHelper) throws IOException Encripta 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:
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 byte0x80
al array y se completa con bytes0x00
hasta 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 IOException Aplica 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:
IOException
- Si hay errores de entrada / salida.
-
decryptResponseApdu
public abstract ResponseApdu decryptResponseApdu(ResponseApdu responseApdu, byte[] keyCipher, byte[] ssc, byte[] kMac, CryptoHelper cryptoHelper) throws 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:
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
-
getDataTlv
private byte[] getDataTlv(byte[] data, byte[] keyCipher, byte[] sendSequenceCounter, CryptoHelper cryptoHelper, int paddingSize) throws IOException - Throws:
IOException
-