merge: add support for s2k dummy generation

if a public key gets merged into a secret one, and there are new
subkeys, the merge() routine now adds a newly generated, stripped secret
subkey instead.
This commit is contained in:
Vincent Breitmoser 2014-09-11 22:45:35 +02:00
parent 51d6ad4394
commit 2a6774b221
2 changed files with 4 additions and 24 deletions

View File

@ -517,10 +517,6 @@ public class UncachedKeyRing {
// Replace modified key in the keyring // Replace modified key in the keyring
ring = replacePublicKey(ring, modified); ring = replacePublicKey(ring, modified);
if (ring == null) {
log.add(LogLevel.ERROR, LogType.MSG_MG_ERROR_SECRET_DUMMY, indent);
return null;
}
indent -= 1; indent -= 1;
} }
@ -698,10 +694,6 @@ public class UncachedKeyRing {
} }
// replace pubkey in keyring // replace pubkey in keyring
ring = replacePublicKey(ring, modified); ring = replacePublicKey(ring, modified);
if (ring == null) {
log.add(LogLevel.ERROR, LogType.MSG_MG_ERROR_SECRET_DUMMY, indent);
return null;
}
indent -= 1; indent -= 1;
} }
@ -791,10 +783,6 @@ public class UncachedKeyRing {
} else { } else {
// otherwise, just insert the public key // otherwise, just insert the public key
result = replacePublicKey(result, key); result = replacePublicKey(result, key);
if (result == null) {
log.add(LogLevel.ERROR, LogType.MSG_MG_ERROR_SECRET_DUMMY, indent);
return null;
}
} }
continue; continue;
} }
@ -823,10 +811,6 @@ public class UncachedKeyRing {
if (!key.isMasterKey()) { if (!key.isMasterKey()) {
if (modified != resultKey) { if (modified != resultKey) {
result = replacePublicKey(result, modified); result = replacePublicKey(result, modified);
if (result == null) {
log.add(LogLevel.ERROR, LogType.MSG_MG_ERROR_SECRET_DUMMY, indent);
return null;
}
} }
continue; continue;
} }
@ -851,10 +835,6 @@ public class UncachedKeyRing {
// If anything changed, save the updated (sub)key // If anything changed, save the updated (sub)key
if (modified != resultKey) { if (modified != resultKey) {
result = replacePublicKey(result, modified); result = replacePublicKey(result, modified);
if (result == null) {
log.add(LogLevel.ERROR, LogType.MSG_MG_ERROR_SECRET_DUMMY, indent);
return null;
}
} }
} }
@ -905,10 +885,10 @@ public class UncachedKeyRing {
} else { } else {
PGPSecretKeyRing secRing = (PGPSecretKeyRing) ring; PGPSecretKeyRing secRing = (PGPSecretKeyRing) ring;
PGPSecretKey sKey = secRing.getSecretKey(key.getKeyID()); PGPSecretKey sKey = secRing.getSecretKey(key.getKeyID());
// TODO generate secret key with S2K dummy, if none exists! // if this is a secret key which does not yet occur in the secret ring
if (sKey == null) { if (sKey == null) {
Log.e(Constants.TAG, "dummy secret key generation not yet implemented"); // generate a stripped secret (sub)key
return null; sKey = PGPSecretKey.constructGnuDummyKey(key);
} }
sKey = PGPSecretKey.replacePublicKey(sKey, key); sKey = PGPSecretKey.replacePublicKey(sKey, key);
return PGPSecretKeyRing.insertSecretKey(secRing, sKey); return PGPSecretKeyRing.insertSecretKey(secRing, sKey);

2
extern/spongycastle vendored

@ -1 +1 @@
Subproject commit 526d23382e53ce46a17a5efd9c23d884125e32ce Subproject commit 375084d55341b575274e49d9a69fa4cf9356682a