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 int
Tamaño de bloque de cifrado AES.private final CryptoHelper
private 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 DO87
buildDO87
(byte[] data) Encripta los datos conkenc
para construir el DO87.private DO8E
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) 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 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
- 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.
-