Class Bac

java.lang.Object
es.gob.jmulticard.card.icao.bac.Bac

public final class Bac extends Object
Implementación del protocolo BAC (basic Access Control).
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final byte
     
    private static final byte[]
     
    private static final byte[]
     
    private static final byte[]
    Constante para ajustar la paridad de un array de octetos.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    private
    Bac()
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private static void
    adjustParity(byte[] key)
    Ajusta la paridad de una clave binaria.
    private static byte[]
    computeMAC(byte[] key, byte[] pt)
    Calcula un MAC según ISO/IEC 9797-1 Alg 3 con cifrado 3DES, vector de inicialización a ceros (IV=0 de 8 octetos) y relleno ISO9797-1 (método 2).
    static void
    Establecimiento de canal BAC.
    private static byte[]
    padByteArray(byte[] data)
    Rellena un array de octetos según ISO9797-1 (método 2).
    private static byte[]
    truncateMrzPwd(byte[] mrzInfoPwd)
     

    Methods inherited from class java.lang.Object

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

    • CLA

      private static final byte CLA
      See Also:
    • KENC_PADDING

      private static final byte[] KENC_PADDING
    • KMAC_PADDING

      private static final byte[] KMAC_PADDING
    • PARITY

      private static final byte[] PARITY
      Constante para ajustar la paridad de un array de octetos.
  • Constructor Details

    • Bac

      private Bac()
  • Method Details

    • doBac

      public static void doBac(String mrz, CryptoHelper ch, ApduConnection conn) throws IOException, Iso7816FourCardException
      Establecimiento de canal BAC.
      Parameters:
      mrz - MRZ del documento de identidad electrónico (MRTD).
      ch - Utilidad de operaciones criptográficas.
      conn - Conexión con el MRTD.
      Throws:
      IOException - Si hay problemas en el tratamiento de datos.
      Iso7816FourCardException - Si hay problemas en el diálogo con el IC del MRTD.
    • truncateMrzPwd

      private static byte[] truncateMrzPwd(byte[] mrzInfoPwd)
    • adjustParity

      private static void adjustParity(byte[] key)
      Ajusta la paridad de una clave binaria. Cada octeto tendrá un número impar de bits a '1' (el útimo bit de cada octeto no se usa).
      Parameters:
      key - Clave binaria de entrada.
    • computeMAC

      private static byte[] computeMAC(byte[] key, byte[] pt) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException
      Calcula un MAC según ISO/IEC 9797-1 Alg 3 con cifrado 3DES, vector de inicialización a ceros (IV=0 de 8 octetos) y relleno ISO9797-1 (método 2).
      Parameters:
      key - Clave 3DES.
      pt - Datos sobre los que calcular el MAC.
      Returns:
      MAC de 8 octetos.
      Throws:
      NoSuchPaddingException - Si no se soporta el relleno aplicado al 3DES.
      NoSuchAlgorithmException - Si no se soporta el cifrado 'DES/ECB/NoPadding'.
      InvalidKeyException - Si la clave 3DES no es válida.
      BadPaddingException - Si el relleno aplicado al 3DES no es válido.
      IllegalBlockSizeException - Si hay problemas con el ECB.
    • padByteArray

      private static byte[] padByteArray(byte[] data)
      Rellena un array de octetos según ISO9797-1 (método 2).
      Parameters:
      data - Datos de entrada a rellenar.
      Returns:
      Datos con el relleno aplicado.