use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.
the class SmartCafeKeyStoreImpl method engineLoad.
/**
* {@inheritDoc}
*/
@Override
public void engineLoad(final KeyStore.LoadStoreParameter param) throws IOException {
final ApduConnection conn = new es.gob.jmulticard.jse.smartcardio.SmartcardIoConnection();
this.cryptoCard = new SmartCafePkcs15Applet(conn, new JseCryptoHelper());
if (param != null) {
final ProtectionParameter pp = param.getProtectionParameter();
if (pp instanceof KeyStore.CallbackHandlerProtection) {
if (((KeyStore.CallbackHandlerProtection) pp).getCallbackHandler() == null) {
// $NON-NLS-1$
throw new IllegalArgumentException("El CallbackHandler no puede ser nulo");
}
this.cryptoCard.setCallbackHandler(((KeyStore.CallbackHandlerProtection) pp).getCallbackHandler());
} else if (pp instanceof KeyStore.PasswordProtection) {
final PasswordCallback pwc = new CachePasswordCallback(((PasswordProtection) pp).getPassword());
this.cryptoCard.setPasswordCallback(pwc);
} else {
LOGGER.warning(// $NON-NLS-1$ //$NON-NLS-2$
"Se ha proporcionado un LoadStoreParameter de tipo no soportado, se ignorara: " + (pp != null ? pp.getClass().getName() : "NULO"));
}
}
this.aliases = Arrays.asList(this.cryptoCard.getAliases());
}
use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.
the class TestDnieChangePIN method testChangePIN.
/**
* Test para probar el cambio de PIN tras la apertura del canal seguro.
* @throws Exception En cualquier error.
*/
@SuppressWarnings("static-method")
@Test
@Ignore
public void testChangePIN() throws Exception {
// $NON-NLS-1$
final CachePasswordCallback cpc = new CachePasswordCallback("password".toCharArray());
final ApduConnection ac = new SmartcardIoConnection();
final Dnie dni = DnieFactory.getDnie(ac, cpc, new JseCryptoHelper(), null);
// $NON-NLS-1$ //$NON-NLS-2$
dni.changePIN("password", "pinNuevo");
}
use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.
the class DnieKeyStoreImpl 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 = DnieProvider.getDefaultApduConnection() == null ? // $NON-NLS-1$
(ApduConnection) Class.forName("es.gob.jmulticard.jse.smartcardio.SmartcardIoConnection").getConstructor().newInstance() : DnieProvider.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 = DnieFactory.getDnie(conn, password != null ? new CachePasswordCallback(password) : null, new JseCryptoHelper(), null);
this.aliases = Arrays.asList(this.cryptoCard.getAliases());
}
use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.
the class Dnie 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.
*/
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 Cwa14890OneV1Connection(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);
}
}
}
use of es.gob.jmulticard.apdu.connection.ApduConnection in project jmulticard by ctt-gob-es.
the class Dnie3 method openSecureChannelIfNotAlreadyOpened.
/**
* Si no se había hecho anteriormente, establece y abre el canal seguro de PIN CWA-14890,
* solicita y comprueba el PIN e inmediatamente después y, si la verificación es correcta,
* establece el canal de USUARIO CWA-14890.
* Si falla algún punto del proceso, vuelve al modo inicial de conexión (sin canal seguro).
* @throws CryptoCardException Si hay problemas en el proceso.
* @throws PinException Si el PIN usado para la apertura de canal no es válido.
*/
@Override
protected void openSecureChannelIfNotAlreadyOpened() throws CryptoCardException, PinException {
// Si el canal seguro esta ya abierto salimos sin hacer nada
if (isSecurityChannelOpen()) {
return;
}
// establecido pero cerrado
try {
setConnection(this.rawConnection);
} catch (final ApduConnectionException e) {
throw new CryptoCardException(// $NON-NLS-1$
"Error en el establecimiento del canal inicial previo al seguro de PIN: " + e, // $NON-NLS-1$
e);
}
// Establecemos el canal PIN y lo verificamos
final ApduConnection pinSecureConnection = new Cwa14890OneV2Connection(this, getConnection(), getCryptoHelper(), new Dnie3PinCwa14890Constants(), new Dnie3PinCwa14890Constants());
try {
selectMasterFile();
} catch (final Exception e) {
throw new CryptoCardException(// $NON-NLS-1$
"Error seleccionado el MF tras el establecimiento del canal seguro de PIN: " + e, // $NON-NLS-1$
e);
}
try {
setConnection(pinSecureConnection);
} catch (final ApduConnectionException e) {
throw new CryptoCardException(// $NON-NLS-1$
"Error en el establecimiento del canal seguro de PIN: " + e, // $NON-NLS-1$
e);
}
// $NON-NLS-1$
LOGGER.info("Canal seguro de PIN para DNIe establecido");
try {
verifyPin(getInternalPasswordCallback());
} catch (final ApduConnectionException e) {
throw new CryptoCardException(// $NON-NLS-1$
"Error en la verificacion de PIN: " + e, // $NON-NLS-1$
e);
}
// Y establecemos ahora el canal de usuario
final ApduConnection usrSecureConnection = new Cwa14890OneV2Connection(this, getConnection(), getCryptoHelper(), new Dnie3UsrCwa14890Constants(), new Dnie3UsrCwa14890Constants());
try {
selectMasterFile();
} catch (final Exception e) {
throw new CryptoCardException(// $NON-NLS-1$
"Error seleccionado el MF tras el establecimiento del canal seguro de usuario: " + e, // $NON-NLS-1$
e);
}
try {
setConnection(usrSecureConnection);
} catch (final ApduConnectionException e) {
throw new CryptoCardException(// $NON-NLS-1$
"Error en el establecimiento del canal seguro de usuario: " + e, // $NON-NLS-1$
e);
}
// $NON-NLS-1$
LOGGER.info("Canal seguro de Usuario para DNIe establecido");
}
Aggregations