diff options
| author | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-07-16 00:22:45 +0200 | 
|---|---|---|
| committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-07-16 00:22:45 +0200 | 
| commit | d3c54d5f129ca24cbfa08208fc5c79c626897d4b (patch) | |
| tree | bc42c88d6741c39a79f18a85a8b7c8c2ba7e6ba7 /OpenKeychain/src/main/java/org | |
| parent | 64b87f75be6e9d47ef2e799c8899cc00b751f528 (diff) | |
| download | open-keychain-d3c54d5f129ca24cbfa08208fc5c79c626897d4b.tar.gz open-keychain-d3c54d5f129ca24cbfa08208fc5c79c626897d4b.tar.bz2 open-keychain-d3c54d5f129ca24cbfa08208fc5c79c626897d4b.zip | |
Fallback if no primary user id exists
Diffstat (limited to 'OpenKeychain/src/main/java/org')
11 files changed, 34 insertions, 13 deletions
| diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java index 0a49cb629..30e93f957 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java @@ -250,7 +250,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {          mHashCode = key.hashCode(); -        mPrimaryUserId = key.getPrimaryUserId(); +        mPrimaryUserId = key.getPrimaryUserIdWithFallback();          mUserIds = key.getUnorderedUserIds();          // if there was no user id flagged as primary, use the first one diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/KeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/KeyRing.java index 47b827677..129ffba3e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/KeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/KeyRing.java @@ -22,8 +22,10 @@ public abstract class KeyRing {      abstract public String getPrimaryUserId() throws PgpGeneralException; -    public String[] getSplitPrimaryUserId() throws PgpGeneralException { -        return splitUserId(getPrimaryUserId()); +    abstract public String getPrimaryUserIdWithFallback() throws PgpGeneralException; + +    public String[] getSplitPrimaryUserIdWithFallback() throws PgpGeneralException { +        return splitUserId(getPrimaryUserIdWithFallback());      }      abstract public boolean isRevoked() throws PgpGeneralException; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java index c279b7a9b..db9e2c6c6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -409,7 +409,7 @@ public class PgpDecryptVerify {                  signatureResultBuilder.knownKey(true);                  signatureResultBuilder.keyId(signingRing.getMasterKeyId());                  try { -                    signatureResultBuilder.userId(signingRing.getPrimaryUserId()); +                    signatureResultBuilder.userId(signingRing.getPrimaryUserIdWithFallback());                  } catch(PgpGeneralException e) {                      Log.d(Constants.TAG, "No primary user id in key " + signingRing.getMasterKeyId());                  } @@ -596,7 +596,7 @@ public class PgpDecryptVerify {              signatureResultBuilder.knownKey(true);              signatureResultBuilder.keyId(signingRing.getMasterKeyId());              try { -                signatureResultBuilder.userId(signingRing.getPrimaryUserId()); +                signatureResultBuilder.userId(signingRing.getPrimaryUserIdWithFallback());              } catch(PgpGeneralException e) {                  Log.d(Constants.TAG, "No primary user id in key " + signingRing.getMasterKeyId());              } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java index 0bd2c2c02..ef5aa8e86 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedPublicKey.java @@ -144,6 +144,17 @@ public class UncachedPublicKey {          return found;      } +    /** +     * Returns primary user id if existing. If not, return first encountered user id. +     */ +    public String getPrimaryUserIdWithFallback()  { +        String userId = getPrimaryUserId(); +        if (userId == null) { +            userId = (String) mPublicKey.getUserIDs().next(); +        } +        return userId; +    } +      public ArrayList<String> getUnorderedUserIds() {          ArrayList<String> userIds = new ArrayList<String>();          for (String userId : new IterableIterator<String>(mPublicKey.getUserIDs())) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedKeyRing.java index ba5ebea4a..a054255dc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedKeyRing.java @@ -40,7 +40,11 @@ public abstract class WrappedKeyRing extends KeyRing {      public String getPrimaryUserId() throws PgpGeneralException {          return getPublicKey().getPrimaryUserId(); -    }; +    } + +    public String getPrimaryUserIdWithFallback() throws PgpGeneralException { +        return getPublicKey().getPrimaryUserIdWithFallback(); +    }      public boolean isRevoked() throws PgpGeneralException {          // Is the master key revoked? diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedSecretKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedSecretKey.java index 067aaeda3..98ad2b706 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedSecretKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedSecretKey.java @@ -97,7 +97,7 @@ public class WrappedSecretKey extends WrappedPublicKey {              signatureGenerator.init(signatureType, mPrivateKey);              PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator(); -            spGen.setSignerUserID(false, mRing.getPrimaryUserId()); +            spGen.setSignerUserID(false, mRing.getPrimaryUserIdWithFallback());              signatureGenerator.setHashedSubpackets(spGen.generate());              return signatureGenerator;          } catch(PGPException e) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java index 48d40430a..34de0024d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java @@ -70,6 +70,10 @@ public class CachedPublicKeyRing extends KeyRing {          }      } +    public String getPrimaryUserIdWithFallback() throws PgpGeneralException { +        return getPrimaryUserId(); +    } +      public boolean isRevoked() throws PgpGeneralException {          try {              Object data = mProviderHelper.getGenericData(mUri, diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java index 1e4e926e9..9a4cef2f1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -351,7 +351,7 @@ public class KeychainIntentService extends IntentService                      // cache new passphrase                      if (saveParcel.mNewPassphrase != null) {                          PassphraseCacheService.addCachedPassphrase(this, ring.getMasterKeyId(), -                                saveParcel.mNewPassphrase, ring.getPublicKey().getPrimaryUserId()); +                                saveParcel.mNewPassphrase, ring.getPublicKey().getPrimaryUserIdWithFallback());                      }                  } catch (ProviderHelper.NotFoundException e) {                      sendErrorToHandler(e); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java index 72c1a8f67..13d9b497f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java @@ -191,7 +191,7 @@ public class PassphraseCacheService extends Service {                  Log.d(Constants.TAG, "Key has no passphrase! Caches and returns empty passphrase!");                  try { -                    addCachedPassphrase(this, keyId, "", key.getPrimaryUserId()); +                    addCachedPassphrase(this, keyId, "", key.getPrimaryUserIdWithFallback());                  } catch (PgpGeneralException e) {                      Log.d(Constants.TAG, "PgpGeneralException occured");                  } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java index 51963e963..dc0510189 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java @@ -198,7 +198,7 @@ public class EncryptAsymmetricFragment extends Fragment {              String[] userId;              try {                  userId = mProviderHelper.getCachedPublicKeyRing( -                        KeyRings.buildUnifiedKeyRingUri(mSecretKeyId)).getSplitPrimaryUserId(); +                        KeyRings.buildUnifiedKeyRingUri(mSecretKeyId)).getSplitPrimaryUserIdWithFallback();              } catch (PgpGeneralException e) {                  userId = null;              } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/PassphraseDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/PassphraseDialogFragment.java index 4d0b73d30..d723f88af 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/PassphraseDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/PassphraseDialogFragment.java @@ -152,7 +152,7 @@ public class PassphraseDialogFragment extends DialogFragment implements OnEditor                  // above can't be statically verified to have been set in all cases because                  // the catch clause doesn't return.                  try { -                    userId = secretRing.getPrimaryUserId(); +                    userId = secretRing.getPrimaryUserIdWithFallback();                  } catch (PgpGeneralException e) {                      userId = null;                  } @@ -232,7 +232,7 @@ public class PassphraseDialogFragment extends DialogFragment implements OnEditor                  try {                      PassphraseCacheService.addCachedPassphrase(activity, masterKeyId, passphrase, -                        secretRing.getPrimaryUserId()); +                        secretRing.getPrimaryUserIdWithFallback());                  } catch(PgpGeneralException e) {                      Log.e(Constants.TAG, "adding of a passhrase failed", e);                  } @@ -240,7 +240,7 @@ public class PassphraseDialogFragment extends DialogFragment implements OnEditor                  if (unlockedSecretKey.getKeyId() != masterKeyId) {                      PassphraseCacheService.addCachedPassphrase(                              activity, unlockedSecretKey.getKeyId(), passphrase, -                            unlockedSecretKey.getPrimaryUserId()); +                            unlockedSecretKey.getPrimaryUserIdWithFallback());                  }                  // also return passphrase back to activity | 
