fix RequiredInputParcel handling in CertifyOperation

This commit is contained in:
Vincent Breitmoser 2015-05-29 20:26:06 +02:00
parent 213798dde1
commit dd94c70fbe

View file

@ -79,13 +79,32 @@ public class CertifyOperation extends BaseOperation {
log.add(LogType.MSG_CRT_UNLOCK, 1); log.add(LogType.MSG_CRT_UNLOCK, 1);
certificationKey = secretKeyRing.getSecretKey(); certificationKey = secretKeyRing.getSecretKey();
if (!cryptoInput.hasPassphrase()) { Passphrase passphrase;
return new CertifyResult(log, RequiredInputParcel.createRequiredSignPassphrase(
certificationKey.getKeyId(), certificationKey.getKeyId(), null));
}
// certification is always with the master key id, so use that one switch (certificationKey.getSecretKeyType()) {
Passphrase passphrase = cryptoInput.getPassphrase(); case PIN:
case PATTERN:
case PASSPHRASE:
if (!cryptoInput.hasPassphrase()) {
return new CertifyResult(log, RequiredInputParcel.createRequiredSignPassphrase(
certificationKey.getKeyId(), certificationKey.getKeyId(), null));
}
// certification is always with the master key id, so use that one
passphrase = cryptoInput.getPassphrase();
break;
case PASSPHRASE_EMPTY:
passphrase = new Passphrase("");
break;
case DIVERT_TO_CARD:
passphrase = null;
break;
default:
log.add(LogType.MSG_CRT_ERROR_UNLOCK, 2);
return new CertifyResult(CertifyResult.RESULT_ERROR, log);
}
if (!certificationKey.unlock(passphrase)) { if (!certificationKey.unlock(passphrase)) {
log.add(LogType.MSG_CRT_ERROR_UNLOCK, 2); log.add(LogType.MSG_CRT_ERROR_UNLOCK, 2);