Class SecureMessaging
- java.lang.Object
-
- es.gob.jmulticard.de.tsenger.androsmex.iso7816.SecureMessaging
-
public final class SecureMessaging extends java.lang.Object
Empaquetado de envío y recepción de APDUs para establecer una mensajería segura.
-
-
Field Summary
Fields Modifier and Type Field Description static int
BLOCK_SIZE
Tamaño de bloque de cifrado AES.private CryptoHelper
cryptoHelper
private byte[]
kenc
private byte[]
kmac
private byte[]
ssc
-
Constructor Summary
Constructors Constructor Description SecureMessaging(byte[] ksenc, byte[] ksmac, byte[] initialSSC, CryptoHelper ch)
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static byte[]
addPadding(byte[] data)
Añade un relleno ISO9797-1 (método 2) / ISO7816d4-Padding a los datos proporcionados.private DO87
buildDO87(byte[] data)
Encripta los datos conkenc
para construir el DO87.private DO8E
buildDO8E(byte[] header, DO87 do87, DO97 do97)
private static DO97
buildDO97(int le)
private static byte
getAPDUStructure(CommandApdu capdu)
Determina el equivalente a la APDU (ISO/IEC 7816-3 Capítulo 12.1).private byte[]
getMac(byte[] data, byte[] ssCounter, byte[] keyBytes)
Obtiene el Código de Autenticación de Mensaje (MAC) de tipo AES para los datos proporcionados.private static void
incrementAtIndex(byte[] array)
ResponseApdu
unwrap(ResponseApdu responseApduEncrypted)
Obtiene la APDU de respuesta en claro a partir de una APDU protegida.CommandApdu
wrap(CommandApdu capdu)
Transforma un Comando APDU en claro a Comando APDU protegido.
-
-
-
Field Detail
-
kenc
private final transient byte[] kenc
-
kmac
private final transient byte[] kmac
-
ssc
private final transient byte[] ssc
-
cryptoHelper
private final transient CryptoHelper cryptoHelper
-
BLOCK_SIZE
public static final int BLOCK_SIZE
Tamaño de bloque de cifrado AES.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
SecureMessaging
public SecureMessaging(byte[] ksenc, byte[] ksmac, byte[] initialSSC, CryptoHelper ch)
Constructor.- Parameters:
ksenc
- Clave de sesión para encriptar.ksmac
- Clave de sesión para el checksum.initialSSC
- Contador de sequencia de envío.ch
- Utilidad para operaciones criptográficas.
-
-
Method Detail
-
wrap
public CommandApdu wrap(CommandApdu capdu) throws SecureMessagingException
Transforma un Comando APDU en claro a Comando APDU protegido.- Parameters:
capdu
- APDU en claro.- Returns:
- CommandApdu APDU protegida.
- Throws:
SecureMessagingException
- En cualquier error.
-
unwrap
public ResponseApdu unwrap(ResponseApdu responseApduEncrypted) throws SecureMessagingException
Obtiene la APDU de respuesta en claro a partir de una APDU protegida.- Parameters:
responseApduEncrypted
- APDU protegida.- Returns:
- APDU en claro.
- Throws:
SecureMessagingException
- En cualquier error.
-
buildDO87
private DO87 buildDO87(byte[] data) throws SecureMessagingException
Encripta los datos conkenc
para construir el DO87.- Parameters:
data
- Datos a encriptar.- Returns:
- DO87 Parámetros del comando.
- Throws:
SecureMessagingException
- En caso de error en el cifrado.
-
buildDO8E
private DO8E buildDO8E(byte[] header, DO87 do87, DO97 do97) throws SecureMessagingException
- Throws:
SecureMessagingException
-
buildDO97
private static DO97 buildDO97(int le)
-
getAPDUStructure
private static byte getAPDUStructure(CommandApdu capdu)
Determina el equivalente a la APDU (ISO/IEC 7816-3 Capítulo 12.1).- Parameters:
capdu
- Comando APDU.- Returns:
- Tipo de estructura (1 = CASE1, etc.).
-
incrementAtIndex
private static void incrementAtIndex(byte[] array)
-
getMac
private byte[] getMac(byte[] data, byte[] ssCounter, byte[] keyBytes) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException
Obtiene el Código de Autenticación de Mensaje (MAC) de tipo AES para los datos proporcionados.- Parameters:
data
- Datos sobre los que calcular el MAC.ssCounter
- Contador de secuencia de envíos (Send Sequence Counter).keyBytes
- Clave de creación de MAC.- Returns:
- MAC de los datos.
- Throws:
java.security.NoSuchAlgorithmException
- Si no se encuentra el algoritmo de creación del MAC.java.security.InvalidKeyException
- Si la clave de creación del MAC es inválida.
-
addPadding
private static byte[] addPadding(byte[] data)
Añade un relleno ISO9797-1 (método 2) / ISO7816d4-Padding a los datos proporcionados.- Parameters:
data
- Datos a rellenar.- Returns:
- Datos con el relleno aplicado.
-
-