Search in sources :

Example 6 with ApduConnection

use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.

the class CeresSc method openSecureChannelIfNotAlreadyOpened.

/**
 * Establece y abre el canal seguro CWA-14890 si no lo estaba ya hecho.
 * @throws CryptoCardException Si hay problemas en el proceso.
 * @throws PinException Si el PIN usado para la apertura de canal no es válido o no se ha proporcionado
 * 						un PIN para validar.
 */
@Override
protected void openSecureChannelIfNotAlreadyOpened() throws CryptoCardException, PinException {
    // Abrimos el canal seguro si no lo esta ya
    if (!isSecurityChannelOpen()) {
        // Aunque el canal seguro estuviese cerrado, podria si estar enganchado
        if (!(getConnection() instanceof Cwa14890Connection)) {
            final ApduConnection secureConnection;
            secureConnection = new Cwa14890OneV2Connection(this, getConnection(), this.cryptoHelper, getCwa14890PublicConstants(), getCwa14890PrivateConstants());
            try {
                setConnection(secureConnection);
            } catch (final ApduConnectionException e) {
                // $NON-NLS-1$
                throw new CryptoCardException("Error en el establecimiento del canal seguro: " + e, e);
            }
        }
        try {
            verifyPin(getInternalPasswordCallback());
        } catch (final ApduConnectionException e) {
            // $NON-NLS-1$
            throw new CryptoCardException("Error en la apertura del canal seguro: " + e, e);
        }
    }
}
Also used : Cwa14890Connection(es.gob.jmulticard.apdu.connection.cwa14890.Cwa14890Connection) Cwa14890OneV2Connection(es.gob.jmulticard.apdu.connection.cwa14890.Cwa14890OneV2Connection) ApduConnection(es.gob.jmulticard.apdu.connection.ApduConnection) CryptoCardException(es.gob.jmulticard.card.CryptoCardException) ApduConnectionException(es.gob.jmulticard.apdu.connection.ApduConnectionException)

Example 7 with ApduConnection

use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.

the class TestPaceDnie method main.

/**
 * Main.
 * @param args No se usa.
 * @throws Exception En cualquier error.
 */
public static void main(final String[] args) throws Exception {
    final ApduConnection conn = new SmartcardIoConnection();
    // $NON-NLS-1$
    final CachePasswordCallback cpc = new CachePasswordCallback("password".toCharArray());
    final Dnie dni = DnieFactory.getDnie(conn, cpc, new JseCryptoHelper(), null);
    // $NON-NLS-1$
    System.out.println("Canal PACE abierto");
    // $NON-NLS-1$ //$NON-NLS-2$
    dni.changePIN("password", "1234512345");
    // $NON-NLS-1$
    System.out.println("Se ha realizado el cambio de PIN correctamente");
}
Also used : Dnie(es.gob.jmulticard.card.dnie.Dnie) SmartcardIoConnection(es.gob.jmulticard.jse.smartcardio.SmartcardIoConnection) ApduConnection(es.gob.jmulticard.apdu.connection.ApduConnection)

Example 8 with ApduConnection

use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.

the class Cwa14890OneV1Connection method open.

/**
 * Abre el canal seguro con la tarjeta. La conexión se reiniciará previamente
 * a la apertura del canal.
 */
@Override
public void open() throws ApduConnectionException {
    final ApduConnection conn = this.subConnection;
    conn.open();
    // Obtenemos el numero de serie de la tarjeta.
    // IMPORTANTE: Esta operacion debe realizarse antes del inicio del proceso de autenticacion
    final byte[] serial = getPaddedSerial();
    try {
        this.card.verifyCaIntermediateIcc();
        this.card.verifyIcc();
    } catch (final SecurityException e) {
        conn.close();
        throw new IllegalStateException(// $NON-NLS-1$
        "Condicion de seguridad no satisfecha en la validacion de los certificados CWA-14890: " + e);
    } catch (final CertificateException e) {
        conn.close();
        throw new IllegalStateException(// $NON-NLS-1$
        "No se han podido tratar los certificados CWA-14890: " + e);
    } catch (final IOException e) {
        conn.close();
        throw new IllegalStateException(// $NON-NLS-1$
        "No se han podido validar los certificados CWA-14890: " + e);
    }
    // Clave publica del certificado de componente de la tarjeta. Necesario para autenticacion interna
    // y externa
    final RSAPublicKey iccPublicKey;
    try {
        iccPublicKey = (RSAPublicKey) this.cryptoHelper.generateCertificate(this.card.getIccCertEncoded()).getPublicKey();
    } catch (final CertificateException e) {
        conn.close();
        throw new ApduConnectionException(// $NON-NLS-1$
        "No se pudo obtener la clave publica del certificado de componente: " + e, // $NON-NLS-1$
        e);
    } catch (final IOException e) {
        conn.close();
        throw new ApduConnectionException(// $NON-NLS-1$
        "No se pudo leer certificado de componente: " + e, // $NON-NLS-1$
        e);
    }
    // ---------------
    try {
        this.card.verifyIfdCertificateChain(this.pubConsts);
    } catch (final Exception e) {
        conn.close();
        throw new ApduConnectionException(// $NON-NLS-1$
        "Error al verificar la cadena de certificados del controlador: " + e, // $NON-NLS-1$
        e);
    }
    // --- STAGE 3 ---
    // Autenticacion interna (El driver comprueba la tarjeta)
    // ---------------
    final byte[] randomIfd;
    try {
        randomIfd = this.cryptoHelper.generateRandomBytes(8);
    } catch (final IOException e1) {
        conn.close();
        throw new SecureChannelException(// $NON-NLS-1$
        "No se pudo generar el array de aleatorios: " + e1, // $NON-NLS-1$
        e1);
    }
    final byte[] kicc;
    try {
        kicc = this.internalAuthentication(randomIfd, iccPublicKey);
    } catch (final Exception e) {
        conn.close();
        throw new ApduConnectionException(// $NON-NLS-1$
        "Error durante el proceso de autenticacion interna de la tarjeta: " + e, // $NON-NLS-1$
        e);
    }
    // --- STAGE 4 ---
    // Autenticacion externa (La tarjeta comprueba el driver)
    // ---------------
    final byte[] randomIcc = this.card.getChallenge();
    final byte[] kifd;
    try {
        kifd = this.externalAuthentication(serial, randomIcc, iccPublicKey);
    } catch (final Exception e) {
        conn.close();
        throw new ApduConnectionException(// $NON-NLS-1$
        "Error durante el proceso de autenticacion externa de la tarjeta", // $NON-NLS-1$
        e);
    }
    // --- STAGE 5 ---
    // Esta fase no pertenece al procedimiento de apertura del canal seguro (ya esta
    // establecido), sino a la obtencion de las claves necesarias para su control. Estas
    // son:
    // - Kenc: Clave TripleDES (TDES o DESEDE) para encriptar y desencriptar criptogramas.
    // - Kmac: Clave TripleDES (TDES o DESEDE) para calcular y verificar checksums.
    // - SSC: Contador de secuencia.
    // ---------------
    // Calculamos Kifdicc como el XOR de los valores Kifd y Kicc
    final byte[] kidficc = HexUtils.xor(kicc, kifd);
    try {
        this.kenc = generateKenc(kidficc);
    } catch (final IOException e) {
        conn.close();
        throw new ApduConnectionException(// $NON-NLS-1$
        "Error al generar la clave Kenc para el tratamiento del canal seguro", // $NON-NLS-1$
        e);
    }
    try {
        this.kmac = generateKmac(kidficc);
    } catch (final IOException e) {
        conn.close();
        throw new ApduConnectionException(// $NON-NLS-1$
        "Error al generar la clave Kmac para el tratamiento del canal seguro", // $NON-NLS-1$
        e);
    }
    this.ssc = generateSsc(randomIfd, randomIcc);
    this.openState = true;
}
Also used : RSAPublicKey(java.security.interfaces.RSAPublicKey) CertificateException(java.security.cert.CertificateException) IOException(java.io.IOException) ApduConnection(es.gob.jmulticard.apdu.connection.ApduConnection) ApduConnectionException(es.gob.jmulticard.apdu.connection.ApduConnectionException) ApduConnectionException(es.gob.jmulticard.apdu.connection.ApduConnectionException) IOException(java.io.IOException) CertificateException(java.security.cert.CertificateException)

Example 9 with ApduConnection

use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.

the class TestStBit4IdCamerfirma method main.

/**
 * Prueba general de la tarjeta.
 * @param args No se usa.
 * @throws Exception En cualquier error.
 */
public static void main(final String[] args) throws Exception {
    final ApduConnection conn = new SmartcardIoConnection();
    final StCard card = new StCard(conn);
    card.verifyPin(new CachePasswordCallback(PIN.toCharArray()));
}
Also used : StCard(es.gob.jmulticard.card.bit4id.stcm.StCard) SmartcardIoConnection(es.gob.jmulticard.jse.smartcardio.SmartcardIoConnection) ApduConnection(es.gob.jmulticard.apdu.connection.ApduConnection)

Example 10 with ApduConnection

use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.

the class Ceres430KeyStoreImpl method engineLoad.

/**
 * {@inheritDoc}
 */
@Override
public void engineLoad(final InputStream stream, final char[] password) throws IOException {
    // Ponemos la conexion por defecto
    final ApduConnection conn;
    try {
        conn = Ceres430Provider.getDefaultApduConnection() == null ? // $NON-NLS-1$
        (ApduConnection) Class.forName("es.gob.jmulticard.jse.smartcardio.SmartcardIoConnection").getConstructor().newInstance() : Ceres430Provider.getDefaultApduConnection();
    } catch (final Exception e) {
        // $NON-NLS-1$
        throw new IllegalStateException("No hay una conexion de APDU por defecto: " + e);
    }
    // Aqui se realiza el acceso e inicializacion del DNIe
    this.cryptoCard = new CeresSc(conn, password != null ? new CachePasswordCallback(password) : null, new JseCryptoHelper(), null);
    this.aliases = Arrays.asList(this.cryptoCard.getAliases());
}
Also used : JseCryptoHelper(es.gob.jmulticard.JseCryptoHelper) ApduConnection(es.gob.jmulticard.apdu.connection.ApduConnection) AuthenticationModeLockedException(es.gob.jmulticard.card.AuthenticationModeLockedException) CryptoCardException(es.gob.jmulticard.card.CryptoCardException) BadPinException(es.gob.jmulticard.card.BadPinException) ProviderException(java.security.ProviderException) IOException(java.io.IOException) PinException(es.gob.jmulticard.card.PinException) CeresSc(es.gob.jmulticard.card.dnie.CeresSc)

Aggregations

ApduConnection (es.gob.jmulticard.apdu.connection.ApduConnection)12 ApduConnectionException (es.gob.jmulticard.apdu.connection.ApduConnectionException)5 CryptoCardException (es.gob.jmulticard.card.CryptoCardException)5 JseCryptoHelper (es.gob.jmulticard.JseCryptoHelper)4 SmartcardIoConnection (es.gob.jmulticard.jse.smartcardio.SmartcardIoConnection)4 IOException (java.io.IOException)4 PinException (es.gob.jmulticard.card.PinException)3 Cwa14890Connection (es.gob.jmulticard.apdu.connection.cwa14890.Cwa14890Connection)2 Cwa14890OneV2Connection (es.gob.jmulticard.apdu.connection.cwa14890.Cwa14890OneV2Connection)2 AuthenticationModeLockedException (es.gob.jmulticard.card.AuthenticationModeLockedException)2 BadPinException (es.gob.jmulticard.card.BadPinException)2 Dnie (es.gob.jmulticard.card.dnie.Dnie)2 SmartCafePkcs15Applet (es.gob.jmulticard.card.gide.smartcafe.SmartCafePkcs15Applet)2 ProviderException (java.security.ProviderException)2 Cwa14890OneV1Connection (es.gob.jmulticard.apdu.connection.cwa14890.Cwa14890OneV1Connection)1 StCard (es.gob.jmulticard.card.bit4id.stcm.StCard)1 CeresSc (es.gob.jmulticard.card.dnie.CeresSc)1 Iso7816FourCardException (es.gob.jmulticard.card.iso7816four.Iso7816FourCardException)1 KeyStore (java.security.KeyStore)1 PasswordProtection (java.security.KeyStore.PasswordProtection)1