Class SecureMessaging


  • public final class SecureMessaging
    extends java.lang.Object
    Empaquetado de envío y recepción de APDUs para establecer una mensajería segura.
    • 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 con kenc 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.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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

      • buildDO87

        private DO87 buildDO87​(byte[] data)
                        throws SecureMessagingException
        Encripta los datos con kenc para construir el DO87.
        Parameters:
        data - Datos a encriptar.
        Returns:
        DO87 Parámetros del comando.
        Throws:
        SecureMessagingException - En caso de error en el cifrado.
      • 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.