From 2d856c5f0e4f0ba9e1973ad85fde14ad06a1133c Mon Sep 17 00:00:00 2001 From: Ash Hughes Date: Mon, 18 Mar 2013 18:51:24 +0000 Subject: [PATCH] use db to mark keys which can certify --- .../res/drawable-hdpi/certify_small.png | Bin 0 -> 2091 bytes .../res/drawable-mdpi/certify_small.png | Bin 0 -> 1401 bytes .../res/drawable/certify_small.png | Bin 0 -> 1401 bytes .../res/layout/key_list_child_item.xml | 8 ++++- .../keychain/helper/PgpHelper.java | 30 ++++++++++++++++++ .../keychain/provider/KeychainContract.java | 1 + .../keychain/provider/KeychainDatabase.java | 7 +++- .../keychain/provider/KeychainProvider.java | 1 + .../keychain/provider/ProviderHelper.java | 1 + .../keychain/ui/SelectSecretKeyFragment.java | 2 +- .../keychain/ui/widget/KeyListAdapter.java | 12 +++++-- .../ui/widget/SelectKeyCursorAdapter.java | 2 +- 12 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 OpenPGP-Keychain/res/drawable-hdpi/certify_small.png create mode 100644 OpenPGP-Keychain/res/drawable-mdpi/certify_small.png create mode 100644 OpenPGP-Keychain/res/drawable/certify_small.png diff --git a/OpenPGP-Keychain/res/drawable-hdpi/certify_small.png b/OpenPGP-Keychain/res/drawable-hdpi/certify_small.png new file mode 100644 index 0000000000000000000000000000000000000000..9e54464ed6b61eff446eda483649026523284225 GIT binary patch literal 2091 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 Hu0mjfgBF^A literal 0 HcmV?d00001 diff --git a/OpenPGP-Keychain/res/drawable/certify_small.png b/OpenPGP-Keychain/res/drawable/certify_small.png new file mode 100644 index 0000000000000000000000000000000000000000..575b2d8662124cc3e75fb0c2a612c44e412ff21e GIT binary patch literal 1401 zcmV-<1%~>GP)3$g6vxk7=FQUCx=yDHb}C(fK&31~jG-n_i_k)8iY(C(5{;2WBZ}e&KulaBNQ`mA z4}3z97?heA1tAb?(^fW%E$x&7wqxl`J2Rc_&AfT5=MHV9#fIulZtmPOH~-%|%RQHZ zX~ufH-OkC818EFhEGU{UrfQuUP2Hq4pcze@>&nWgVO6Eb9SpU!$=cpw5&l3aZK@nK z9bl7<`|73o+AWMMr;doK3cM%*;A)~N5Mxo$6a_eg0rs71`Sn6v-i*ionh~JZq^oSG zT7FUQ9i)Apf$6>>WzWkmfJ+J4|AE_6h1;$f0iMk?HNCu{uCDpiNuU@8%nm1*($j%u zb)ZQih|ws-10#@#$H8K?!mv40+|$v!0{v@yAYh$|-m!gk^(T?u>ktWtA**~Y81#Ce z6$}*#mn30mWKbj-_+S8{kuYRFTnewXb-X_y!+rz^_d+J+pw`T6Y*@DRShgxLH@myQ zSy2gkmIW4LO)C=61b|b+smKyYxbmS8*fTSrJrIo__V`}(N^leb$~a^Kur7_8|5%Bu zb#Z|s?OJ;)*b5(mjJ$jlmqCYCQ1R!G46NxxPV=>4ta>1AG{@W))!WtCs zz7Md;%$(f0Zq0_)pML^P(;$C-1(-N4C9Xr^6a*)M5P%pBgMc{@u&M+sPR?wBZkd98 z9{<{;0zcdbc*SY+)-77#=xA>P8viYP1jD1LphrOtg*j4^xH6bzWi$YiD5iu3{Fnr} z09XJavmIV{556(1!XY%J>U$zYJF<;8o_=)k>?>n{0!*$E>s^n+dK5OKrUYy_1X@x6 z5ryLjAd^6dnk732-s|&TIun;0ar@^aK)s3H|NM&Od;2@DK~fOF;miZ8#gY;x03%uB zJQ(d)$Kr0tk>Y8X>^y;ZVQ-LbIT}il!@*0Ay2_mgXol)2G+ZEve}4 z>V!SyBJDk4t(lY{ZB zZ!nph6}i@~awD7W8}>m4LxUANoBI;}MZGyWj5>pBAt-jjdkq z$~!Fv{UBn^TR0s!Z8jKHFqv5QnFz8{Dt1^6dibPv&>#D-UxbfQ&@&@IV`C#@J==7- zZkDq`z@F2e6y-DiM%*+7fE9x!! z(y%1$9#lZ^YU-)53|G<2Te4h*xsD}ot$MP4lhtYl3PYx7}GwPQLvn@rvD+Q&72d<*YvUZ@yFCyz_W6 zne3Yy&KY^&Dr;DvYRWEIiu%HV?n|;5Y!w6{kdw2>QB_@ky5*OqbAtmHcakEQQJGFX zR93d#;&va2qMfuIa)~EKX=y|8NU(d^sQ>y2G)}x^;|Kl*+XZSjHg?{M00000NkvXX Hu0mjfgBF^A literal 0 HcmV?d00001 diff --git a/OpenPGP-Keychain/res/layout/key_list_child_item.xml b/OpenPGP-Keychain/res/layout/key_list_child_item.xml index 868989cf6..81d843529 100644 --- a/OpenPGP-Keychain/res/layout/key_list_child_item.xml +++ b/OpenPGP-Keychain/res/layout/key_list_child_item.xml @@ -63,6 +63,12 @@ android:paddingBottom="2dip" android:paddingTop="2dip" > + + - \ No newline at end of file + diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/helper/PgpHelper.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/helper/PgpHelper.java index bb5f8eccd..0ff957b66 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/helper/PgpHelper.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/helper/PgpHelper.java @@ -333,6 +333,36 @@ public class PgpHelper { return isSigningKey(key.getPublicKey()); } + @SuppressWarnings("unchecked") + public static boolean isCertificationKey(PGPPublicKey key) { + if (key.getVersion() <= 3) { + return true; + } + + for (PGPSignature sig : new IterableIterator(key.getSignatures())) { + if (key.isMasterKey() && sig.getKeyID() != key.getKeyID()) { + continue; + } + PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets(); + + if (hashed != null && (hashed.getKeyFlags() & KeyFlags.CERTIFY_OTHER) != 0) { + return true; + } + + PGPSignatureSubpacketVector unhashed = sig.getUnhashedSubPackets(); + + if (unhashed != null && (unhashed.getKeyFlags() & KeyFlags.CERTIFY_OTHER) != 0) { + return true; + } + } + + return false; + } + + public static boolean isCertificationKey(PGPSecretKey key) { + return isCertificationKey(key.getPublicKey()); + } + public static String getAlgorithmInfo(PGPPublicKey key) { return getAlgorithmInfo(key.getAlgorithm(), key.getBitStrength()); } diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainContract.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainContract.java index 3d4dddea5..b284eccaa 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainContract.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainContract.java @@ -36,6 +36,7 @@ public class KeychainContract { String IS_MASTER_KEY = "is_master_key"; String ALGORITHM = "algorithm"; String KEY_SIZE = "key_size"; + String CAN_CERTIFY = "can_certify"; String CAN_SIGN = "can_sign"; String CAN_ENCRYPT = "can_encrypt"; String IS_REVOKED = "is_revoked"; diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainDatabase.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainDatabase.java index 4a2aeeb80..ef95ce7f7 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainDatabase.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainDatabase.java @@ -31,7 +31,7 @@ import android.provider.BaseColumns; public class KeychainDatabase extends SQLiteOpenHelper { private static final String DATABASE_NAME = "apg.db"; - private static final int DATABASE_VERSION = 3; + private static final int DATABASE_VERSION = 4; public interface Tables { String KEY_RINGS = "key_rings"; @@ -48,6 +48,7 @@ public class KeychainDatabase extends SQLiteOpenHelper { + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KeysColumns.KEY_ID + " INT64, " + KeysColumns.TYPE + " INTEGER, " + KeysColumns.IS_MASTER_KEY + " INTEGER, " + KeysColumns.ALGORITHM + " INTEGER, " + KeysColumns.KEY_SIZE + + " INTEGER, " + KeysColumns.CAN_CERTIFY + " INTEGER, " + KeysColumns.CAN_SIGN + " INTEGER, " + KeysColumns.CAN_ENCRYPT + " INTEGER, " + KeysColumns.IS_REVOKED + " INTEGER, " + KeysColumns.CREATION + " INTEGER, " + KeysColumns.EXPIRY + " INTEGER, " + KeysColumns.KEY_DATA + " BLOB," @@ -93,6 +94,10 @@ public class KeychainDatabase extends SQLiteOpenHelper { Log.w(Constants.TAG, "Upgrading database to version " + version); switch (version) { + case 3: + db.execSQL("ALTER TABLE " + Tables.KEYS + " ADD COLUMN " + KeysColumns.CAN_CERTIFY + " INTEGER DEFAULT 0;"); + db.execSQL("UPDATE " + Tables.KEYS + " SET " + KeysColumns.CAN_CERTIFY + " = 1 WHERE " + KeysColumns.IS_MASTER_KEY + "= 1;"); + break; default: break; diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java index 23f9616e0..c63d9e772 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java @@ -367,6 +367,7 @@ public class KeychainProvider extends ContentProvider { projectionMap.put(KeysColumns.IS_MASTER_KEY, KeysColumns.IS_MASTER_KEY); projectionMap.put(KeysColumns.ALGORITHM, KeysColumns.ALGORITHM); projectionMap.put(KeysColumns.KEY_SIZE, KeysColumns.KEY_SIZE); + projectionMap.put(KeysColumns.CAN_CERTIFY, KeysColumns.CAN_CERTIFY); projectionMap.put(KeysColumns.CAN_SIGN, KeysColumns.CAN_SIGN); projectionMap.put(KeysColumns.CAN_ENCRYPT, KeysColumns.CAN_ENCRYPT); projectionMap.put(KeysColumns.IS_REVOKED, KeysColumns.IS_REVOKED); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java index c23dcc559..7190d72c4 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -382,6 +382,7 @@ public class ProviderHelper { values.put(Keys.IS_MASTER_KEY, key.isMasterKey()); values.put(Keys.ALGORITHM, key.getPublicKey().getAlgorithm()); values.put(Keys.KEY_SIZE, key.getPublicKey().getBitStrength()); + values.put(Keys.CAN_CERTIFY, (PgpHelper.isCertificationKey(key) && has_private)); values.put(Keys.CAN_SIGN, (PgpHelper.isSigningKey(key) && has_private)); values.put(Keys.CAN_ENCRYPT, PgpHelper.isEncryptionKey(key)); values.put(Keys.IS_REVOKED, key.getPublicKey().isRevoked()); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyFragment.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyFragment.java index d7d9fb0af..a3d9167a3 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyFragment.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyFragment.java @@ -89,7 +89,7 @@ public class SelectSecretKeyFragment extends SherlockListFragment implements public Loader onCreateLoader(int id, Bundle args) { // This is called when a new Loader needs to be created. This // sample only has one Loader, so we don't care about the ID. - Uri baseUri = KeyRings.buildPublicKeyRingsUri(); + Uri baseUri = KeyRings.buildSecretKeyRingsUri(); // These are the rows that we will retrieve. long now = new Date().getTime() / 1000; diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/KeyListAdapter.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/KeyListAdapter.java index 9b5941706..75c764540 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/KeyListAdapter.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/KeyListAdapter.java @@ -151,6 +151,13 @@ public class KeyListAdapter extends CursorTreeAdapter { masterKeyIcon.setVisibility(View.VISIBLE); } + ImageView certifyIcon = (ImageView) view.findViewById(R.id.ic_certifyKey); + if (cursor.getInt(cursor.getColumnIndex(Keys.CAN_CERTIFY)) != 1) { + certifyIcon.setVisibility(View.GONE); + } else { + certifyIcon.setVisibility(View.VISIBLE); + } + ImageView encryptIcon = (ImageView) view.findViewById(R.id.ic_encryptKey); if (cursor.getInt(cursor.getColumnIndex(Keys.CAN_ENCRYPT)) != 1) { encryptIcon.setVisibility(View.GONE); @@ -159,7 +166,6 @@ public class KeyListAdapter extends CursorTreeAdapter { } ImageView signIcon = (ImageView) view.findViewById(R.id.ic_signKey); - if (cursor.getInt(cursor.getColumnIndex(Keys.CAN_SIGN)) != 1) { signIcon.setVisibility(View.GONE); } else { @@ -213,7 +219,7 @@ public class KeyListAdapter extends CursorTreeAdapter { switch (type) { case CHILD_FINGERPRINT: projection = new String[] { Keys._ID, Keys.KEY_ID, Keys.IS_MASTER_KEY, Keys.ALGORITHM, - Keys.KEY_SIZE, Keys.CAN_SIGN, Keys.CAN_ENCRYPT, }; + Keys.KEY_SIZE, Keys.CAN_CERTIFY, Keys.CAN_SIGN, Keys.CAN_ENCRYPT, }; sortOrder = Keys.RANK + " ASC"; // use only master key for fingerprint @@ -228,7 +234,7 @@ public class KeyListAdapter extends CursorTreeAdapter { case CHILD_KEY: projection = new String[] { Keys._ID, Keys.KEY_ID, Keys.IS_MASTER_KEY, Keys.ALGORITHM, - Keys.KEY_SIZE, Keys.CAN_SIGN, Keys.CAN_ENCRYPT, }; + Keys.KEY_SIZE, Keys.CAN_CERTIFY, Keys.CAN_SIGN, Keys.CAN_ENCRYPT, }; sortOrder = Keys.RANK + " ASC"; if (mKeyType == Id.type.public_key) { diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/SelectKeyCursorAdapter.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/SelectKeyCursorAdapter.java index da8ac94ee..17423136f 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/SelectKeyCursorAdapter.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/SelectKeyCursorAdapter.java @@ -139,4 +139,4 @@ public class SelectKeyCursorAdapter extends CursorAdapter { return mInflater.inflate(R.layout.select_key_item, null); } -} \ No newline at end of file +}