Class AbstractApduEncrypter

java.lang.Object
es.gob.jmulticard.connection.AbstractApduEncrypter
Direct Known Subclasses:
ApduEncrypterAes, ApduEncrypterDes

public abstract class AbstractApduEncrypter extends Object
Cifrador de APDU según CWA-14890.
Author:
Tomás García-Merás.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected int
    En el relleno ISO-7816, longitud de la cual debe ser múltiplo el tamaño de los datos de salida.
    protected static final byte
    Tag del TLV de datos de una APDU protegida.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected static byte[]
    addPadding7816(byte[] data, int size)
    Agrega un relleno (padding) a un array de bytes conforme las especificaciones ISO 7816.
    abstract ResponseApdu
    decryptResponseApdu(ResponseApdu responseApdu, byte[] keyCipher, byte[] ssc, byte[] kMac, CryptoHelper cryptoHelper)
    Desencripta la Apdu de respuesta recibida a partir de las variables del canal de cifrado (kenc, kmac, ssc).
    protected abstract byte[]
    encryptData(byte[] data, byte[] key, byte[] ssc, CryptoHelper cryptoHelper)
    Encripta los datos para una APDU cifrada.
    protected abstract byte[]
    generateMac(byte[] dataPadded, byte[] ssc, byte[] kMac, CryptoHelper cryptoHelper)
    Aplica el algoritmo para la generación de la MAC del mensaje.
    protectAPDU(CommandApdu unprotectedApdu, byte[] keyCipher, byte[] keyMac, byte[] sendSequenceCounter, CryptoHelper cryptoHelper)
    Encapsula una APDU para ser enviada por un canal seguro CWA-14890.
    protected static byte[]
    removePadding7816(byte[] paddedData)
    Elimina el padding ISO 7816 de los datos.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • TAG_DATA_TLV

      protected static final byte TAG_DATA_TLV
      Tag del TLV de datos de una APDU protegida.
      See Also:
    • paddingLength

      protected transient int paddingLength
      En el relleno ISO-7816, longitud de la cual debe ser múltiplo el tamaño de los datos de salida.
  • Constructor Details

    • AbstractApduEncrypter

      public AbstractApduEncrypter()
  • Method Details

    • protectAPDU

      public CipheredApdu protectAPDU(CommandApdu unprotectedApdu, byte[] keyCipher, byte[] keyMac, byte[] sendSequenceCounter, CryptoHelper cryptoHelper) throws IOException
      Encapsula una APDU para ser enviada por un canal seguro CWA-14890. El contador SSC se autoincrementa durante la operación.
      Parameters:
      unprotectedApdu - APDU desprotegida (en claro).
      keyCipher - Clave simétrica de cifrado.
      keyMac - Clave simétrica para el MAC.
      sendSequenceCounter - Contador de secuencia actual.
      cryptoHelper - Operador criptográfico.
      Returns:
      APDU protegida (cifrada y con MAC).
      Throws:
      IOException - Si ocurren problemas durante los cifrados de la APDU.
    • encryptData

      protected abstract byte[] encryptData(byte[] data, byte[] key, byte[] ssc, CryptoHelper cryptoHelper) throws IOException
      Encripta los datos para una APDU cifrada.
      Parameters:
      data - Datos de la APDU.
      key - Clave de cifrado.
      ssc - Contador de secuencia.
      cryptoHelper - Clase con las funcionalidades de criptografía.
      Returns:
      Datos enconcriptados.
      Throws:
      IOException - En cualquier error.
    • addPadding7816

      protected static byte[] addPadding7816(byte[] data, int size)
      Agrega un relleno (padding) a un array de bytes conforme las especificaciones ISO 7816. Esto es, se agrega un byte 0x80 al array y se completa con bytes 0x00 hasta que el array es múltiplo de 8.
      Parameters:
      data - Datos a los que agregar el relleno.
      size - Longitud de la cual debe ser múltiplo el tamaño de los datos de salida.
      Returns:
      Datos con relleno.
    • removePadding7816

      protected static byte[] removePadding7816(byte[] paddedData)
      Elimina el padding ISO 7816 de los datos.
      Parameters:
      paddedData - Datos con padding.
      Returns:
      Datos sin padding.
    • generateMac

      protected abstract byte[] generateMac(byte[] dataPadded, byte[] ssc, byte[] kMac, CryptoHelper cryptoHelper) throws IOException
      Aplica el algoritmo para la generación de la MAC del mensaje.
      Parameters:
      dataPadded - Datos sobre los que generar la MAC.
      ssc - Contador de secuencia de la operación.
      kMac - Clave necesaria para la operación (algoritmo dependiente de la implementación).
      cryptoHelper - Manejador para la realización de las operaciones criptográficas.
      Returns:
      Clave de autenticación de los datos.
      Throws:
      IOException - Si hay errores de entrada / salida.
    • decryptResponseApdu

      public abstract ResponseApdu decryptResponseApdu(ResponseApdu responseApdu, byte[] keyCipher, byte[] ssc, byte[] kMac, CryptoHelper cryptoHelper) throws IOException
      Desencripta la Apdu de respuesta recibida a partir de las variables del canal de cifrado (kenc, kmac, ssc).
      Parameters:
      responseApdu - Respuesta a desencriptar.
      keyCipher - Clave de cifrado.
      ssc - Contador de secuencia.
      kMac - Clave de cifrado.
      cryptoHelper - Instancia que lleva a cabo las operaciones de cifrado.
      Returns:
      Apdu descifrada.
      Throws:
      IOException - En cualquier error durante el proceso de descifrado.