Class AbstractApduEncrypter
java.lang.Object
es.gob.jmulticard.connection.AbstractApduEncrypter
- Direct Known Subclasses:
ApduEncrypterAes, ApduEncrypterDes
Cifrador de APDU según CWA-14890.
- Author:
- Tomás García-Merás.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected intEn el relleno ISO-7816, longitud de la cual debe ser múltiplo el tamaño de los datos de salida.protected static final byteTag del TLV de datos de una APDU protegida. -
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 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.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.
-
Field Details
-
TAG_DATA_TLV
protected static final byte TAG_DATA_TLVTag del TLV de datos de una APDU protegida.- 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 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 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.
-