Class Bac


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

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

      Constructors 
      Modifier Constructor Description
      private Bac()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      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 doBac​(java.lang.String mrz, CryptoHelper ch, ApduConnection conn)
      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 Detail

      • 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 Detail

      • Bac

        private Bac()
    • Method Detail

      • doBac

        public static void doBac​(java.lang.String mrz,
                                 CryptoHelper ch,
                                 ApduConnection conn)
                          throws java.io.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:
        java.io.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 java.security.NoSuchAlgorithmException,
                                         javax.crypto.NoSuchPaddingException,
                                         java.security.InvalidKeyException,
                                         javax.crypto.IllegalBlockSizeException,
                                         javax.crypto.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:
        javax.crypto.NoSuchPaddingException - Si no se soporta el relleno aplicado al 3DES.
        java.security.NoSuchAlgorithmException - Si no se soporta el cifrado 'DES/ECB/NoPadding'.
        java.security.InvalidKeyException - Si la clave 3DES no es válida.
        javax.crypto.BadPaddingException - Si el relleno aplicado al 3DES no es válido.
        javax.crypto.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.