Package es.gob.jmulticard.card.icao.bac
Class Bac
- java.lang.Object
-
- es.gob.jmulticard.card.icao.bac.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)
-
-
-
Field Detail
-
CLA
private static final byte CLA
- See Also:
- Constant Field Values
-
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.
-
-
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.
-
-