aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-05-15 01:04:25 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2015-05-16 23:10:04 +0200
commit5b75b542e8d2d467ce9e34bd9df2038d6c88885e (patch)
tree6f61dad043ef0b0f5318ca3c5ece77f7ff6d25eb /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
parentaa133574b00d65c698d52d815db566c8536195fa (diff)
downloadopen-keychain-5b75b542e8d2d467ce9e34bd9df2038d6c88885e.tar.gz
open-keychain-5b75b542e8d2d467ce9e34bd9df2038d6c88885e.tar.bz2
open-keychain-5b75b542e8d2d467ce9e34bd9df2038d6c88885e.zip
yubikey: don't assume signing key is masterKeyId in ViewKeyActivity
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java86
1 files changed, 46 insertions, 40 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
index 302236570..7ae4f1be3 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
@@ -546,49 +546,54 @@ public class ViewKeyActivity extends BaseNfcActivity implements
final String nfcUserId = nfcGetUserId();
final byte[] nfcAid = nfcGetAid();
- String fp = KeyFormattingUtils.convertFingerprintToHex(nfcFingerprints);
- final long masterKeyId = KeyFormattingUtils.getKeyIdFromFingerprint(nfcFingerprints);
-
- if (!mFingerprint.equals(fp)) {
- try {
- CachedPublicKeyRing ring = mProviderHelper.getCachedPublicKeyRing(masterKeyId);
- ring.getMasterKeyId();
-
- Notify.create(this, R.string.snack_yubi_other, Notify.LENGTH_LONG,
- Style.WARN, new ActionListener() {
- @Override
- public void onAction() {
- Intent intent = new Intent(
- ViewKeyActivity.this, ViewKeyActivity.class);
- intent.setData(KeyRings.buildGenericKeyRingUri(masterKeyId));
- intent.putExtra(ViewKeyActivity.EXTRA_NFC_AID, nfcAid);
- intent.putExtra(ViewKeyActivity.EXTRA_NFC_USER_ID, nfcUserId);
- intent.putExtra(ViewKeyActivity.EXTRA_NFC_FINGERPRINTS, nfcFingerprints);
- startActivity(intent);
- finish();
- }
- }, R.string.snack_yubikey_view).show();
- return;
+ long yubiKeyId = KeyFormattingUtils.getKeyIdFromFingerprint(nfcFingerprints);
- } catch (PgpKeyNotFoundException e) {
- Notify.create(this, R.string.snack_yubi_other, Notify.LENGTH_LONG,
- Style.WARN, new ActionListener() {
- @Override
- public void onAction() {
- Intent intent = new Intent(
- ViewKeyActivity.this, CreateKeyActivity.class);
- intent.putExtra(ViewKeyActivity.EXTRA_NFC_AID, nfcAid);
- intent.putExtra(ViewKeyActivity.EXTRA_NFC_USER_ID, nfcUserId);
- intent.putExtra(ViewKeyActivity.EXTRA_NFC_FINGERPRINTS, nfcFingerprints);
- startActivity(intent);
- finish();
- }
- }, R.string.snack_yubikey_import).show();
+ try {
+
+ // if the yubikey matches a subkey in any key
+ CachedPublicKeyRing ring = mProviderHelper.getCachedPublicKeyRing(
+ KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(yubiKeyId));
+ byte[] candidateFp = ring.getFingerprint();
+
+ // if the master key of that key matches this one, just show the yubikey dialog
+ if (KeyFormattingUtils.convertFingerprintToHex(candidateFp).equals(mFingerprint)) {
+ showYubiKeyFragment(nfcFingerprints, nfcUserId, nfcAid);
return;
}
- }
- showYubiKeyFragment(nfcFingerprints, nfcUserId, nfcAid);
+ // otherwise, offer to go to that key
+ final long masterKeyId = KeyFormattingUtils.getKeyIdFromFingerprint(candidateFp);
+ Notify.create(this, R.string.snack_yubi_other, Notify.LENGTH_LONG,
+ Style.WARN, new ActionListener() {
+ @Override
+ public void onAction() {
+ Intent intent = new Intent(
+ ViewKeyActivity.this, ViewKeyActivity.class);
+ intent.setData(KeyRings.buildGenericKeyRingUri(masterKeyId));
+ intent.putExtra(ViewKeyActivity.EXTRA_NFC_AID, nfcAid);
+ intent.putExtra(ViewKeyActivity.EXTRA_NFC_USER_ID, nfcUserId);
+ intent.putExtra(ViewKeyActivity.EXTRA_NFC_FINGERPRINTS, nfcFingerprints);
+ startActivity(intent);
+ finish();
+ }
+ }, R.string.snack_yubikey_view).show();
+
+ // and if it's not found, offer import
+ } catch (PgpKeyNotFoundException e) {
+ Notify.create(this, R.string.snack_yubi_other, Notify.LENGTH_LONG,
+ Style.WARN, new ActionListener() {
+ @Override
+ public void onAction() {
+ Intent intent = new Intent(
+ ViewKeyActivity.this, CreateKeyActivity.class);
+ intent.putExtra(ViewKeyActivity.EXTRA_NFC_AID, nfcAid);
+ intent.putExtra(ViewKeyActivity.EXTRA_NFC_USER_ID, nfcUserId);
+ intent.putExtra(ViewKeyActivity.EXTRA_NFC_FINGERPRINTS, nfcFingerprints);
+ startActivity(intent);
+ finish();
+ }
+ }, R.string.snack_yubikey_import).show();
+ }
}
@@ -820,7 +825,8 @@ public class ViewKeyActivity extends BaseNfcActivity implements
}
mMasterKeyId = data.getLong(INDEX_MASTER_KEY_ID);
- mFingerprint = KeyFormattingUtils.convertFingerprintToHex(data.getBlob(INDEX_FINGERPRINT));
+ mFingerprint = KeyFormattingUtils.convertFingerprintToHex(
+ data.getBlob(INDEX_FINGERPRINT));
mIsSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0;
mHasEncrypt = data.getInt(INDEX_HAS_ENCRYPT) != 0;