Class SecureMessaging
- java.lang.Object
-
- es.gob.jmulticard.de.tsenger.androsmex.iso7816.SecureMessaging
-
public final class SecureMessaging extends java.lang.ObjectEmpaquetado de envío y recepción de APDUs para establecer una mensajería segura.
-
-
Field Summary
Fields Modifier and Type Field Description static intBLOCK_SIZETamaño de bloque de cifrado AES.private CryptoHelpercryptoHelperprivate byte[]kencprivate byte[]kmacprivate 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 DO87buildDO87(byte[] data)Encripta los datos conkencpara construir el DO87.private DO8EbuildDO8E(byte[] header, DO87 do87, DO97 do97)private static DO97buildDO97(int le)private static bytegetAPDUStructure(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 voidincrementAtIndex(byte[] array)ResponseApduunwrap(ResponseApdu responseApduEncrypted)Obtiene la APDU de respuesta en claro a partir de una APDU protegida.CommandApduwrap(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 conkencpara 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.NoSuchAlgorithmExceptionObtiene 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.
-
-