use of es.gob.jmulticard.JseCryptoHelper 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.JseCryptoHelper in project jmulticard by ctt-gob-es.
the class CeresKeyStoreImpl method engineLoad.
/**
* {@inheritDoc}
*/
@Override
public void engineLoad(final KeyStore.LoadStoreParameter param) throws IOException {
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 = new Ceres(CeresProvider.getDefaultApduConnection(), new JseCryptoHelper());
this.cryptoCard.setCallbackHandler(((KeyStore.CallbackHandlerProtection) pp).getCallbackHandler());
} else if (pp instanceof KeyStore.PasswordProtection) {
final PasswordCallback pwc = new CeresPasswordCallback((PasswordProtection) pp);
this.cryptoCard = new Ceres(CeresProvider.getDefaultApduConnection(), new JseCryptoHelper());
this.cryptoCard.setPasswordCallback(pwc);
} else {
// $NON-NLS-1$
Logger.getLogger("es.gob.jmulticard").warning(// $NON-NLS-1$ //$NON-NLS-2$
"Se ha proporcionado un LoadStoreParameter de tipo no soportado, se ignorara: " + (pp != null ? pp.getClass().getName() : "NULO"));
}
} else {
this.cryptoCard = new Ceres(CeresProvider.getDefaultApduConnection(), new JseCryptoHelper());
}
userCertAliases = Arrays.asList(this.cryptoCard.getAliases());
}
use of es.gob.jmulticard.JseCryptoHelper 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.JseCryptoHelper in project jmulticard by ctt-gob-es.
the class PaceInitializerMrz method getMrzPswd.
/**
* Calcula el valor de inicialización partiendo de una MRZ.
* Siguiendo la especificación ICAO 9303:<br>
* <code>KDFπ(π) = KDF(f(π),3)</code><br>
* <code>K= f(π) = SHA-1(Serial Number || Date of Birth || Date of Expiry)</code><br>
* En este método se genera el valor de K que deberá posteriormente ser
* pasado como parámetro de la función KDF(K,3) para generar la contraseña.
* @param mrz MRZ completa.
* @return K Valor de inicialización.
* @throws IOException Si no se puede obtener el valor.
*/
private static byte[] getMrzPswd(final String mrz) throws IOException {
final MrzInfoData mrzData = parseMrzInfo(mrz);
final byte[] numberBytes = mrzData.getNumber().getBytes();
final byte[] birthBytes = mrzData.getBirth().getBytes();
final byte[] expiryBytes = mrzData.getExpiry().getBytes();
final byte[] concatenation = HexUtils.concatenateByteArrays(numberBytes, mrzData.getNumberCheck(), birthBytes, mrzData.getBirthCheck(), expiryBytes, mrzData.getExpiryCheck());
final CryptoHelper cryptoHelper = new JseCryptoHelper();
return cryptoHelper.digest(CryptoHelper.DigestAlgorithm.SHA1, concatenation);
}
use of es.gob.jmulticard.JseCryptoHelper 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);
}
Aggregations