Class SecureMessaging
java.lang.Object
es.gob.jmulticard.de.tsenger.androsmex.iso7816.SecureMessaging
Empaquetado de envío y recepción de APDUs
para establecer una mensajería segura.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intTamaño de bloque de cifrado AES.private final CryptoHelperprivate final byte[]private final byte[]private final byte[] -
Constructor Summary
ConstructorsConstructorDescriptionSecureMessaging(byte[] ksenc, byte[] ksmac, byte[] initialSSC, CryptoHelper ch) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprivate 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 DO8Eprivate 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) unwrap(ResponseApdu responseApduEncrypted) Obtiene la APDU de respuesta en claro a partir de una APDU protegida.wrap(CommandApdu capdu) Transforma un Comando APDU en claro a Comando APDU protegido.
-
Field Details
-
kenc
private final transient byte[] kenc -
kmac
private final transient byte[] kmac -
ssc
private final transient byte[] ssc -
cryptoHelper
-
BLOCK_SIZE
public static final int BLOCK_SIZETamaño de bloque de cifrado AES.- See Also:
-
-
Constructor Details
-
SecureMessaging
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 Details
-
wrap
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
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
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
- Throws:
SecureMessagingException
-
buildDO97
-
getAPDUStructure
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 InvalidKeyException, 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:
NoSuchAlgorithmException- Si no se encuentra el algoritmo de creación del MAC.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.
-