Search in sources :

Example 1 with PaceConnection

use of es.gob.jmulticard.card.pace.PaceConnection in project jmulticard by ctt-gob-es.

the class DnieNFC method getPaceConnection.

private static ApduConnection getPaceConnection(final ApduConnection con, final CallbackHandler ch) throws ApduConnectionException, PaceException {
    // Primero obtenemos el CAN/MRZ
    Callback tic = new CustomTextInputCallback();
    SecureMessaging sm = null;
    boolean wrongInit = true;
    int counter = 0;
    paceInitValue = null;
    paceInitType = null;
    while (wrongInit) {
        // El contador permite hacer dos verificaciones del can por si en la primera no se hubiera reseteado la tarjeta
        if (paceInitValue == null || paceInitType == null || counter > 0) {
            try {
                ch.handle(new Callback[] { tic });
            } catch (final Exception e) {
                // $NON-NLS-1$
                throw new PaceException("Error obteniendo el CAN: " + e, e);
            }
            paceInitValue = ((CustomTextInputCallback) tic).getText();
            // Se obtiene el tipo de inicializador analizando el valor introducido.
            paceInitType = getPasswordType(paceInitValue);
            if (paceInitValue == null || paceInitValue.isEmpty() || paceInitType == null) {
                // $NON-NLS-1$
                throw new InvalidCanException("El CAN/MRZ no puede ser nulo ni vacio");
            }
        }
        try {
            final PaceInitializer paceInitializer;
            switch(paceInitType) {
                case MRZ:
                    paceInitializer = PaceInitializerMrz.deriveMrz(paceInitValue);
                    break;
                case CAN:
                    paceInitializer = new PaceInitializerCan(paceInitValue);
                    break;
                default:
                    throw new UnsupportedOperationException(// $NON-NLS-1$
                    "Tipo de inicializador PACE no soportado: " + paceInitType);
            }
            sm = PaceChannelHelper.openPaceChannel((byte) 0x00, paceInitializer, con, new JseCryptoHelper());
            // En caso de establecer correctamente el canal inicializamos el contador para que
            // siempre obtenga el can mediante el callback
            counter = 0;
            wrongInit = false;
        } catch (final PaceException e) {
            // $NON-NLS-1$
            Logger.getLogger("es.gob.jmulticard").warning(// $NON-NLS-1$
            "Error estableciendo canal PACE (probablemente por CAN/MRZ invalido): " + e);
            // Si el CAN/MRZ es incorrecto modificamos el mensaje del dialogo y volvemos a pedirlo
            wrongInit = true;
            tic = new CustomTextInputCallback();
            counter++;
        }
    }
    // Establecemos el canal PACE
    return new PaceConnection(con, new JseCryptoHelper(), sm);
}
Also used : SecureMessaging(es.gob.jmulticard.de.tsenger.androsmex.iso7816.SecureMessaging) PaceInitializerCan(es.gob.jmulticard.card.pace.PaceInitializerCan) PaceConnection(es.gob.jmulticard.card.pace.PaceConnection) ApduConnectionException(es.gob.jmulticard.apdu.connection.ApduConnectionException) InvalidCanException(es.gob.jmulticard.card.pace.InvalidCanException) CryptoCardException(es.gob.jmulticard.card.CryptoCardException) PaceException(es.gob.jmulticard.card.pace.PaceException) PinException(es.gob.jmulticard.card.PinException) PaceException(es.gob.jmulticard.card.pace.PaceException) InvalidCanException(es.gob.jmulticard.card.pace.InvalidCanException) PasswordCallback(javax.security.auth.callback.PasswordCallback) Callback(javax.security.auth.callback.Callback) PaceInitializer(es.gob.jmulticard.card.pace.PaceInitializer) JseCryptoHelper(es.gob.jmulticard.JseCryptoHelper)

Example 2 with PaceConnection

use of es.gob.jmulticard.card.pace.PaceConnection in project jmulticard by ctt-gob-es.

the class DnieNFC method getPaceConnection.

private static ApduConnection getPaceConnection(final ApduConnection con) throws ApduConnectionException, PaceException {
    final PaceInitializer paceInitializer;
    switch(paceInitType) {
        case MRZ:
            paceInitializer = PaceInitializerMrz.deriveMrz(paceInitValue);
            break;
        case CAN:
        default:
            paceInitializer = new PaceInitializerCan(paceInitValue);
    }
    final SecureMessaging sm = PaceChannelHelper.openPaceChannel((byte) 0x00, // CAN/MRZ
    paceInitializer, con, new JseCryptoHelper());
    // Establecemos el canal PACE
    return new PaceConnection(con, new JseCryptoHelper(), sm);
}
Also used : SecureMessaging(es.gob.jmulticard.de.tsenger.androsmex.iso7816.SecureMessaging) PaceInitializerCan(es.gob.jmulticard.card.pace.PaceInitializerCan) PaceConnection(es.gob.jmulticard.card.pace.PaceConnection) PaceInitializer(es.gob.jmulticard.card.pace.PaceInitializer) JseCryptoHelper(es.gob.jmulticard.JseCryptoHelper)

Aggregations

JseCryptoHelper (es.gob.jmulticard.JseCryptoHelper)2 PaceConnection (es.gob.jmulticard.card.pace.PaceConnection)2 PaceInitializer (es.gob.jmulticard.card.pace.PaceInitializer)2 PaceInitializerCan (es.gob.jmulticard.card.pace.PaceInitializerCan)2 SecureMessaging (es.gob.jmulticard.de.tsenger.androsmex.iso7816.SecureMessaging)2 ApduConnectionException (es.gob.jmulticard.apdu.connection.ApduConnectionException)1 CryptoCardException (es.gob.jmulticard.card.CryptoCardException)1 PinException (es.gob.jmulticard.card.PinException)1 InvalidCanException (es.gob.jmulticard.card.pace.InvalidCanException)1 PaceException (es.gob.jmulticard.card.pace.PaceException)1 Callback (javax.security.auth.callback.Callback)1 PasswordCallback (javax.security.auth.callback.PasswordCallback)1