use of es.gob.jmulticard.apdu.gemalto.MseSetSignatureKeyApduCommand in project jmulticard by ctt-gob-es.
the class TuiR5 method getPrivateKey.
@Override
public PrivateKeyReference getPrivateKey(final String alias) throws CryptoCardException {
if (alias == null) {
// $NON-NLS-1$
throw new IllegalArgumentException("El alias no puede ser nulo");
}
if (!certificatesByAlias.containsKey(alias)) {
// $NON-NLS-1$ //$NON-NLS-2$
LOGGER.warning("La tarjeta no contiene el alias '" + alias + "', se devolvera null");
return null;
}
final String[] aliases = getAliases();
byte index = (byte) 0xff;
for (int i = 0; i < aliases.length; i++) {
if (alias.equals(aliases[i])) {
index = (byte) i;
break;
}
}
if (index == (byte) 0xff) {
// $NON-NLS-1$
throw new IllegalStateException("La tarjeta no contiene el alias: " + alias);
}
final MseSetSignatureKeyApduCommand mseSet = new MseSetSignatureKeyApduCommand(CLA, MseSetSignatureKeyApduCommand.CryptographicMechanism.RSASSA_PKCS1v1_5_SHA1, index);
final ResponseApdu res;
try {
res = sendArbitraryApdu(mseSet);
} catch (final Exception e) {
// $NON-NLS-1$
throw new CryptoCardException("Error enviando la APDU de establecimiento de clave privada para firma: " + e, e);
}
if (res.isOk()) {
return new TuiPrivateKeyReference(index);
}
throw new CryptoCardException(// $NON-NLS-1$
"No se ha podido recuperar la referencia a la clave privada: " + HexUtils.hexify(res.getBytes(), true));
}
Aggregations