diff options
Diffstat (limited to 'org_apg/src/org/thialfihar/android/apg/deprecated')
-rw-r--r-- | org_apg/src/org/thialfihar/android/apg/deprecated/DataProvider.java | 381 | ||||
-rw-r--r-- | org_apg/src/org/thialfihar/android/apg/deprecated/Database.java | 617 |
2 files changed, 998 insertions, 0 deletions
diff --git a/org_apg/src/org/thialfihar/android/apg/deprecated/DataProvider.java b/org_apg/src/org/thialfihar/android/apg/deprecated/DataProvider.java new file mode 100644 index 000000000..e377fc8c4 --- /dev/null +++ b/org_apg/src/org/thialfihar/android/apg/deprecated/DataProvider.java @@ -0,0 +1,381 @@ +///* +// * Copyright (C) 2010 Thialfihar <thi@thialfihar.org> +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +// */ +// +//package org.thialfihar.android.apg.deprecated; +// +//import java.io.File; +//import java.io.FileNotFoundException; +//import java.util.HashMap; +// +//import org.thialfihar.android.apg.Id; +// +//import android.content.ContentProvider; +//import android.content.ContentValues; +//import android.content.UriMatcher; +//import android.database.Cursor; +//import android.database.DatabaseUtils; +//import android.database.sqlite.SQLiteQueryBuilder; +//import android.net.Uri; +//import android.os.ParcelFileDescriptor; +//import android.text.TextUtils; +// +//public class DataProvider extends ContentProvider { +// public static final String AUTHORITY = "org.thialfihar.android.apg.provider"; +// +// private static final int PUBLIC_KEY_RING = 101; +// private static final int PUBLIC_KEY_RING_ID = 102; +// private static final int PUBLIC_KEY_RING_BY_KEY_ID = 103; +// private static final int PUBLIC_KEY_RING_BY_EMAILS = 104; +// private static final int PUBLIC_KEY_RING_KEY = 111; +// private static final int PUBLIC_KEY_RING_KEY_RANK = 112; +// private static final int PUBLIC_KEY_RING_USER_ID = 121; +// private static final int PUBLIC_KEY_RING_USER_ID_RANK = 122; +// +// private static final int SECRET_KEY_RING = 201; +// private static final int SECRET_KEY_RING_ID = 202; +// private static final int SECRET_KEY_RING_BY_KEY_ID = 203; +// private static final int SECRET_KEY_RING_BY_EMAILS = 204; +// private static final int SECRET_KEY_RING_KEY = 211; +// private static final int SECRET_KEY_RING_KEY_RANK = 212; +// private static final int SECRET_KEY_RING_USER_ID = 221; +// private static final int SECRET_KEY_RING_USER_ID_RANK = 222; +// +// private static final int DATA_STREAM = 301; +// +// private static final String PUBLIC_KEY_RING_CONTENT_DIR_TYPE = +// "vnd.android.cursor.dir/vnd.thialfihar.apg.public.key_ring"; +// private static final String PUBLIC_KEY_RING_CONTENT_ITEM_TYPE = +// "vnd.android.cursor.item/vnd.thialfihar.apg.public.key_ring"; +// +// private static final String PUBLIC_KEY_CONTENT_DIR_TYPE = +// "vnd.android.cursor.dir/vnd.thialfihar.apg.public.key"; +// private static final String PUBLIC_KEY_CONTENT_ITEM_TYPE = +// "vnd.android.cursor.item/vnd.thialfihar.apg.public.key"; +// +// private static final String SECRET_KEY_RING_CONTENT_DIR_TYPE = +// "vnd.android.cursor.dir/vnd.thialfihar.apg.secret.key_ring"; +// private static final String SECRET_KEY_RING_CONTENT_ITEM_TYPE = +// "vnd.android.cursor.item/vnd.thialfihar.apg.secret.key_ring"; +// +// private static final String SECRET_KEY_CONTENT_DIR_TYPE = +// "vnd.android.cursor.dir/vnd.thialfihar.apg.secret.key"; +// private static final String SECRET_KEY_CONTENT_ITEM_TYPE = +// "vnd.android.cursor.item/vnd.thialfihar.apg.secret.key"; +// +// private static final String USER_ID_CONTENT_DIR_TYPE = +// "vnd.android.cursor.dir/vnd.thialfihar.apg.user_id"; +// private static final String USER_ID_CONTENT_ITEM_TYPE = +// "vnd.android.cursor.item/vnd.thialfihar.apg.user_id"; +// +// public static final String _ID = "_id"; +// public static final String MASTER_KEY_ID = "master_key_id"; +// public static final String KEY_ID = "key_id"; +// public static final String USER_ID = "user_id"; +// +// private static final UriMatcher mUriMatcher; +// +// private Database mDb; +// +// static { +// mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); +// mUriMatcher.addURI(AUTHORITY, "key_rings/public/key_id/*", PUBLIC_KEY_RING_BY_KEY_ID); +// mUriMatcher.addURI(AUTHORITY, "key_rings/public/emails/*", PUBLIC_KEY_RING_BY_EMAILS); +// +// mUriMatcher.addURI(AUTHORITY, "key_rings/public/*/keys", PUBLIC_KEY_RING_KEY); +// mUriMatcher.addURI(AUTHORITY, "key_rings/public/*/keys/#", PUBLIC_KEY_RING_KEY_RANK); +// +// mUriMatcher.addURI(AUTHORITY, "key_rings/public/*/user_ids", PUBLIC_KEY_RING_USER_ID); +// mUriMatcher.addURI(AUTHORITY, "key_rings/public/*/user_ids/#", PUBLIC_KEY_RING_USER_ID_RANK); +// +// mUriMatcher.addURI(AUTHORITY, "key_rings/public", PUBLIC_KEY_RING); +// mUriMatcher.addURI(AUTHORITY, "key_rings/public/*", PUBLIC_KEY_RING_ID); +// +// mUriMatcher.addURI(AUTHORITY, "key_rings/secret/key_id/*", SECRET_KEY_RING_BY_KEY_ID); +// mUriMatcher.addURI(AUTHORITY, "key_rings/secret/emails/*", SECRET_KEY_RING_BY_EMAILS); +// +// mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*/keys", SECRET_KEY_RING_KEY); +// mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*/keys/#", SECRET_KEY_RING_KEY_RANK); +// +// mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*/user_ids", SECRET_KEY_RING_USER_ID); +// mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*/user_ids/#", SECRET_KEY_RING_USER_ID_RANK); +// +// mUriMatcher.addURI(AUTHORITY, "key_rings/secret", SECRET_KEY_RING); +// mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*", SECRET_KEY_RING_ID); +// +// mUriMatcher.addURI(AUTHORITY, "data/*", DATA_STREAM); +// } +// +// @Override +// public boolean onCreate() { +// mDb = new Database(getContext()); +// return true; +// } +// +// @Override +// public Cursor query(Uri uri, String[] projection, String selection, +// String[] selectionArgs, String sortOrder) { +// // TODO: implement the others, then use them for the lists +// SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); +// HashMap<String, String> projectionMap = new HashMap<String, String>(); +// +// int match = mUriMatcher.match(uri); +// int type; +// switch (match) { +// case PUBLIC_KEY_RING: +// case PUBLIC_KEY_RING_ID: +// case PUBLIC_KEY_RING_BY_KEY_ID: +// case PUBLIC_KEY_RING_BY_EMAILS: +// case PUBLIC_KEY_RING_KEY: +// case PUBLIC_KEY_RING_KEY_RANK: +// case PUBLIC_KEY_RING_USER_ID: +// case PUBLIC_KEY_RING_USER_ID_RANK: +// type = Id.database.type_public; +// break; +// +// case SECRET_KEY_RING: +// case SECRET_KEY_RING_ID: +// case SECRET_KEY_RING_BY_KEY_ID: +// case SECRET_KEY_RING_BY_EMAILS: +// case SECRET_KEY_RING_KEY: +// case SECRET_KEY_RING_KEY_RANK: +// case SECRET_KEY_RING_USER_ID: +// case SECRET_KEY_RING_USER_ID_RANK: +// type = Id.database.type_secret; +// break; +// +// default: { +// throw new IllegalArgumentException("Unknown URI " + uri); +// } +// } +// +// qb.appendWhere(KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = " + type); +// +// switch (match) { +// case PUBLIC_KEY_RING_ID: +// case SECRET_KEY_RING_ID: { +// qb.appendWhere(" AND " + +// KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID + " = "); +// qb.appendWhereEscapeString(uri.getPathSegments().get(2)); +// +// // break omitted intentionally +// } +// +// case PUBLIC_KEY_RING: +// case SECRET_KEY_RING: { +// qb.setTables(KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " + +// "(" + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + +// Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + " AND " + +// Keys.TABLE_NAME + "." + Keys.IS_MASTER_KEY + " = '1'" + +// ") " + +// " INNER JOIN " + UserIds.TABLE_NAME + " ON " + +// "(" + Keys.TABLE_NAME + "." + Keys._ID + " = " + +// UserIds.TABLE_NAME + "." + UserIds.KEY_ID + " AND " + +// UserIds.TABLE_NAME + "." + UserIds.RANK + " = '0') "); +// +// projectionMap.put(_ID, +// KeyRings.TABLE_NAME + "." + KeyRings._ID); +// projectionMap.put(MASTER_KEY_ID, +// KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID); +// projectionMap.put(USER_ID, +// UserIds.TABLE_NAME + "." + UserIds.USER_ID); +// +// if (TextUtils.isEmpty(sortOrder)) { +// sortOrder = UserIds.TABLE_NAME + "." + UserIds.USER_ID + " ASC"; +// } +// +// break; +// } +// +// case SECRET_KEY_RING_BY_KEY_ID: +// case PUBLIC_KEY_RING_BY_KEY_ID: { +// qb.setTables(Keys.TABLE_NAME + " AS tmp INNER JOIN " + +// KeyRings.TABLE_NAME + " ON (" + +// KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + +// "tmp." + Keys.KEY_RING_ID + ")" + +// " INNER JOIN " + Keys.TABLE_NAME + " ON " + +// "(" + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + +// Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + " AND " + +// Keys.TABLE_NAME + "." + Keys.IS_MASTER_KEY + " = '1'" + +// ") " + +// " INNER JOIN " + UserIds.TABLE_NAME + " ON " + +// "(" + Keys.TABLE_NAME + "." + Keys._ID + " = " + +// UserIds.TABLE_NAME + "." + UserIds.KEY_ID + " AND " + +// UserIds.TABLE_NAME + "." + UserIds.RANK + " = '0') "); +// +// projectionMap.put(_ID, +// KeyRings.TABLE_NAME + "." + KeyRings._ID); +// projectionMap.put(MASTER_KEY_ID, +// KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID); +// projectionMap.put(USER_ID, +// UserIds.TABLE_NAME + "." + UserIds.USER_ID); +// +// qb.appendWhere(" AND tmp." + Keys.KEY_ID + " = "); +// qb.appendWhereEscapeString(uri.getPathSegments().get(3)); +// +// break; +// } +// +// case SECRET_KEY_RING_BY_EMAILS: +// case PUBLIC_KEY_RING_BY_EMAILS: { +// qb.setTables(KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " + +// "(" + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + +// Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + " AND " + +// Keys.TABLE_NAME + "." + Keys.IS_MASTER_KEY + " = '1'" + +// ") " + +// " INNER JOIN " + UserIds.TABLE_NAME + " ON " + +// "(" + Keys.TABLE_NAME + "." + Keys._ID + " = " + +// UserIds.TABLE_NAME + "." + UserIds.KEY_ID + " AND " + +// UserIds.TABLE_NAME + "." + UserIds.RANK + " = '0') "); +// +// projectionMap.put(_ID, +// KeyRings.TABLE_NAME + "." + KeyRings._ID); +// projectionMap.put(MASTER_KEY_ID, +// KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID); +// projectionMap.put(USER_ID, +// UserIds.TABLE_NAME + "." + UserIds.USER_ID); +// +// String emails = uri.getPathSegments().get(3); +// String chunks[] = emails.split(" *, *"); +// boolean gotCondition = false; +// String emailWhere = ""; +// for (int i = 0; i < chunks.length; ++i) { +// if (chunks[i].length() == 0) { +// continue; +// } +// if (i != 0) { +// emailWhere += " OR "; +// } +// emailWhere += "tmp." + UserIds.USER_ID + " LIKE "; +// // match '*<email>', so it has to be at the *end* of the user id +// emailWhere += DatabaseUtils.sqlEscapeString("%<" + chunks[i] + ">"); +// gotCondition = true; +// } +// +// if (gotCondition) { +// qb.appendWhere(" AND EXISTS (SELECT tmp." + UserIds._ID + +// " FROM " + UserIds.TABLE_NAME + +// " AS tmp WHERE tmp." + UserIds.KEY_ID + " = " + +// Keys.TABLE_NAME + "." + Keys._ID + +// " AND (" + emailWhere + "))"); +// } +// +// break; +// } +// +// default: { +// throw new IllegalArgumentException("Unknown URI " + uri); +// } +// } +// +// qb.setProjectionMap(projectionMap); +// +// // If no sort order is specified use the default +// String orderBy; +// if (TextUtils.isEmpty(sortOrder)) { +// orderBy = null; +// } else { +// orderBy = sortOrder; +// } +// +// //System.out.println(qb.buildQuery(projection, selection, selectionArgs, null, null, sortOrder, null).replace("WHERE", "WHERE\n")); +// Cursor c = qb.query(mDb.db(), projection, selection, selectionArgs, null, null, orderBy); +// +// // Tell the cursor what uri to watch, so it knows when its source data changes +// c.setNotificationUri(getContext().getContentResolver(), uri); +// return c; +// } +// +// @Override +// public String getType(Uri uri) { +// switch (mUriMatcher.match(uri)) { +// case PUBLIC_KEY_RING: +// case PUBLIC_KEY_RING_BY_EMAILS: +// return PUBLIC_KEY_RING_CONTENT_DIR_TYPE; +// +// case PUBLIC_KEY_RING_ID: +// return PUBLIC_KEY_RING_CONTENT_ITEM_TYPE; +// +// case PUBLIC_KEY_RING_BY_KEY_ID: +// return PUBLIC_KEY_RING_CONTENT_ITEM_TYPE; +// +// case PUBLIC_KEY_RING_KEY: +// return PUBLIC_KEY_CONTENT_DIR_TYPE; +// +// case PUBLIC_KEY_RING_KEY_RANK: +// return PUBLIC_KEY_CONTENT_ITEM_TYPE; +// +// case PUBLIC_KEY_RING_USER_ID: +// return USER_ID_CONTENT_DIR_TYPE; +// +// case PUBLIC_KEY_RING_USER_ID_RANK: +// return USER_ID_CONTENT_ITEM_TYPE; +// +// case SECRET_KEY_RING: +// case SECRET_KEY_RING_BY_EMAILS: +// return SECRET_KEY_RING_CONTENT_DIR_TYPE; +// +// case SECRET_KEY_RING_ID: +// return SECRET_KEY_RING_CONTENT_ITEM_TYPE; +// +// case SECRET_KEY_RING_BY_KEY_ID: +// return SECRET_KEY_RING_CONTENT_ITEM_TYPE; +// +// case SECRET_KEY_RING_KEY: +// return SECRET_KEY_CONTENT_DIR_TYPE; +// +// case SECRET_KEY_RING_KEY_RANK: +// return SECRET_KEY_CONTENT_ITEM_TYPE; +// +// case SECRET_KEY_RING_USER_ID: +// return USER_ID_CONTENT_DIR_TYPE; +// +// case SECRET_KEY_RING_USER_ID_RANK: +// return USER_ID_CONTENT_ITEM_TYPE; +// +// default: +// throw new IllegalArgumentException("Unknown URI " + uri); +// } +// } +// +// @Override +// public Uri insert(Uri uri, ContentValues initialValues) { +// // not supported +// return null; +// } +// +// @Override +// public int delete(Uri uri, String where, String[] whereArgs) { +// // not supported +// return 0; +// } +// +// @Override +// public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { +// // not supported +// return 0; +// } +// +// @Override +// public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { +// int match = mUriMatcher.match(uri); +// if (match != DATA_STREAM) { +// throw new FileNotFoundException(); +// } +// String fileName = uri.getPathSegments().get(1); +// File file = new File(getContext().getFilesDir().getAbsolutePath(), fileName); +// return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY); +// } +//} diff --git a/org_apg/src/org/thialfihar/android/apg/deprecated/Database.java b/org_apg/src/org/thialfihar/android/apg/deprecated/Database.java new file mode 100644 index 000000000..92bbaed4f --- /dev/null +++ b/org_apg/src/org/thialfihar/android/apg/deprecated/Database.java @@ -0,0 +1,617 @@ +///* +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +// */ +// +//package org.thialfihar.android.apg.deprecated; +// +//import org.spongycastle.openpgp.PGPException; +//import org.spongycastle.openpgp.PGPPublicKey; +//import org.spongycastle.openpgp.PGPPublicKeyRing; +//import org.spongycastle.openpgp.PGPSecretKey; +//import org.spongycastle.openpgp.PGPSecretKeyRing; +//import org.thialfihar.android.apg.Id; +//import org.thialfihar.android.apg.helper.PGPHelper; +//import org.thialfihar.android.apg.util.IterableIterator; +// +//import android.content.ContentValues; +//import android.content.Context; +//import android.database.Cursor; +//import android.database.sqlite.SQLiteDatabase; +//import android.database.sqlite.SQLiteOpenHelper; +//import org.thialfihar.android.apg.util.Log; +// +//import java.io.IOException; +//import java.util.Date; +//import java.util.HashMap; +//import java.util.Vector; +// +//public class Database extends SQLiteOpenHelper { +// public static class GeneralException extends Exception { +// static final long serialVersionUID = 0xf812773343L; +// +// public GeneralException(String message) { +// super(message); +// } +// } +// +// private static final String DATABASE_NAME = "apg"; +// private static final int DATABASE_VERSION = 2; +// +// public static final String AUTHORITY = "org.thialfihar.android.apg.database"; +// +// public static HashMap<String, String> sKeyRingsProjection; +// public static HashMap<String, String> sKeysProjection; +// public static HashMap<String, String> sUserIdsProjection; +// +// private SQLiteDatabase mDb = null; +// private int mStatus = 0; +// +// static { +// sKeyRingsProjection = new HashMap<String, String>(); +// sKeyRingsProjection.put(KeyRings._ID, KeyRings._ID); +// sKeyRingsProjection.put(KeyRings.MASTER_KEY_ID, KeyRings.MASTER_KEY_ID); +// sKeyRingsProjection.put(KeyRings.TYPE, KeyRings.TYPE); +// sKeyRingsProjection.put(KeyRings.WHO_ID, KeyRings.WHO_ID); +// sKeyRingsProjection.put(KeyRings.KEY_RING_DATA, KeyRings.KEY_RING_DATA); +// +// sKeysProjection = new HashMap<String, String>(); +// sKeysProjection.put(Keys._ID, Keys._ID); +// sKeysProjection.put(Keys.KEY_ID, Keys.KEY_ID); +// sKeysProjection.put(Keys.TYPE, Keys.TYPE); +// sKeysProjection.put(Keys.IS_MASTER_KEY, Keys.IS_MASTER_KEY); +// sKeysProjection.put(Keys.ALGORITHM, Keys.ALGORITHM); +// sKeysProjection.put(Keys.KEY_SIZE, Keys.KEY_SIZE); +// sKeysProjection.put(Keys.CAN_SIGN, Keys.CAN_SIGN); +// sKeysProjection.put(Keys.CAN_ENCRYPT, Keys.CAN_ENCRYPT); +// sKeysProjection.put(Keys.IS_REVOKED, Keys.IS_REVOKED); +// sKeysProjection.put(Keys.CREATION, Keys.CREATION); +// sKeysProjection.put(Keys.EXPIRY, Keys.EXPIRY); +// sKeysProjection.put(Keys.KEY_DATA, Keys.KEY_DATA); +// sKeysProjection.put(Keys.RANK, Keys.RANK); +// +// sUserIdsProjection = new HashMap<String, String>(); +// sUserIdsProjection.put(UserIds._ID, UserIds._ID); +// sUserIdsProjection.put(UserIds.KEY_ID, UserIds.KEY_ID); +// sUserIdsProjection.put(UserIds.USER_ID, UserIds.USER_ID); +// sUserIdsProjection.put(UserIds.RANK, UserIds.RANK); +// } +// +// public Database(Context context) { +// super(context, DATABASE_NAME, null, DATABASE_VERSION); +// // force upgrade to test things +// //onUpgrade(getWritableDatabase(), 1, 2); +// mDb = getWritableDatabase(); +// } +// +// @Override +// protected void finalize() throws Throwable { +// mDb.close(); +// super.finalize(); +// } +// +// @Override +// public void onCreate(SQLiteDatabase db) { +// db.execSQL("CREATE TABLE " + KeyRings.TABLE_NAME + " (" + +// KeyRings._ID + " " + KeyRings._ID_type + "," + +// KeyRings.MASTER_KEY_ID + " " + KeyRings.MASTER_KEY_ID_type + ", " + +// KeyRings.TYPE + " " + KeyRings.TYPE_type + ", " + +// KeyRings.WHO_ID + " " + KeyRings.WHO_ID_type + ", " + +// KeyRings.KEY_RING_DATA + " " + KeyRings.KEY_RING_DATA_type + ");"); +// +// db.execSQL("CREATE TABLE " + Keys.TABLE_NAME + " (" + +// Keys._ID + " " + Keys._ID_type + "," + +// Keys.KEY_ID + " " + Keys.KEY_ID_type + ", " + +// Keys.TYPE + " " + Keys.TYPE_type + ", " + +// Keys.IS_MASTER_KEY + " " + Keys.IS_MASTER_KEY_type + ", " + +// Keys.ALGORITHM + " " + Keys.ALGORITHM_type + ", " + +// Keys.KEY_SIZE + " " + Keys.KEY_SIZE_type + ", " + +// Keys.CAN_SIGN + " " + Keys.CAN_SIGN_type + ", " + +// Keys.CAN_ENCRYPT + " " + Keys.CAN_ENCRYPT_type + ", " + +// Keys.IS_REVOKED + " " + Keys.IS_REVOKED_type + ", " + +// Keys.CREATION + " " + Keys.CREATION_type + ", " + +// Keys.EXPIRY + " " + Keys.EXPIRY_type + ", " + +// Keys.KEY_RING_ID + " " + Keys.KEY_RING_ID_type + ", " + +// Keys.KEY_DATA + " " + Keys.KEY_DATA_type + +// Keys.RANK + " " + Keys.RANK_type + ");"); +// +// db.execSQL("CREATE TABLE " + UserIds.TABLE_NAME + " (" + +// UserIds._ID + " " + UserIds._ID_type + "," + +// UserIds.KEY_ID + " " + UserIds.KEY_ID_type + "," + +// UserIds.USER_ID + " " + UserIds.USER_ID_type + "," + +// UserIds.RANK + " " + UserIds.RANK_type + ");"); +// +// } +// +// @Override +// public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { +// mDb = db; +// for (int version = oldVersion; version < newVersion; ++version) { +// switch (version) { +// case 1: { // upgrade 1 to 2 +// db.execSQL("DROP TABLE IF EXISTS " + KeyRings.TABLE_NAME + ";"); +// db.execSQL("DROP TABLE IF EXISTS " + Keys.TABLE_NAME + ";"); +// db.execSQL("DROP TABLE IF EXISTS " + UserIds.TABLE_NAME + ";"); +// +// db.execSQL("CREATE TABLE " + KeyRings.TABLE_NAME + " (" + +// KeyRings._ID + " " + KeyRings._ID_type + "," + +// KeyRings.MASTER_KEY_ID + " " + KeyRings.MASTER_KEY_ID_type + ", " + +// KeyRings.TYPE + " " + KeyRings.TYPE_type + ", " + +// KeyRings.WHO_ID + " " + KeyRings.WHO_ID_type + ", " + +// KeyRings.KEY_RING_DATA + " " + KeyRings.KEY_RING_DATA_type + ");"); +// +// +// db.execSQL("CREATE TABLE " + Keys.TABLE_NAME + " (" + +// Keys._ID + " " + Keys._ID_type + "," + +// Keys.KEY_ID + " " + Keys.KEY_ID_type + ", " + +// Keys.TYPE + " " + Keys.TYPE_type + ", " + +// Keys.IS_MASTER_KEY + " " + Keys.IS_MASTER_KEY_type + ", " + +// Keys.ALGORITHM + " " + Keys.ALGORITHM_type + ", " + +// Keys.KEY_SIZE + " " + Keys.KEY_SIZE_type + ", " + +// Keys.CAN_SIGN + " " + Keys.CAN_SIGN_type + ", " + +// Keys.CAN_ENCRYPT + " " + Keys.CAN_ENCRYPT_type + ", " + +// Keys.IS_REVOKED + " " + Keys.IS_REVOKED_type + ", " + +// Keys.CREATION + " " + Keys.CREATION_type + ", " + +// Keys.EXPIRY + " " + Keys.EXPIRY_type + ", " + +// Keys.KEY_RING_ID + " " + Keys.KEY_RING_ID_type + ", " + +// Keys.KEY_DATA + " " + Keys.KEY_DATA_type + +// Keys.RANK + " " + Keys.RANK_type + ");"); +// +// db.execSQL("CREATE TABLE " + UserIds.TABLE_NAME + " (" + +// UserIds._ID + " " + UserIds._ID_type + "," + +// UserIds.KEY_ID + " " + UserIds.KEY_ID_type + "," + +// UserIds.USER_ID + " " + UserIds.USER_ID_type + "," + +// UserIds.RANK + " " + UserIds.RANK_type + ");"); +// +// Cursor cursor = db.query("public_keys", new String[] { "c_key_data" }, +// null, null, null, null, null); +// if (cursor != null && cursor.moveToFirst()) { +// do { +// byte[] data = cursor.getBlob(0); +// try { +// PGPPublicKeyRing keyRing = new PGPPublicKeyRing(data); +// saveKeyRing(keyRing); +// } catch (IOException e) { +// Log.e("apg.db.upgrade", "key import failed: " + e); +// } catch (GeneralException e) { +// Log.e("apg.db.upgrade", "key import failed: " + e); +// } +// } while (cursor.moveToNext()); +// } +// +// if (cursor != null) { +// cursor.close(); +// } +// +// cursor = db.query("secret_keys", new String[]{ "c_key_data" }, +// null, null, null, null, null); +// if (cursor != null && cursor.moveToFirst()) { +// do { +// byte[] data = cursor.getBlob(0); +// try { +// PGPSecretKeyRing keyRing = new PGPSecretKeyRing(data); +// saveKeyRing(keyRing); +// } catch (IOException e) { +// Log.e("apg.db.upgrade", "key import failed: " + e); +// } catch (PGPException e) { +// Log.e("apg.db.upgrade", "key import failed: " + e); +// } catch (GeneralException e) { +// Log.e("apg.db.upgrade", "key import failed: " + e); +// } +// } while (cursor.moveToNext()); +// } +// +// if (cursor != null) { +// cursor.close(); +// } +// +// db.execSQL("DROP TABLE IF EXISTS public_keys;"); +// db.execSQL("DROP TABLE IF EXISTS secret_keys;"); +// +// break; +// } +// +// default: { +// break; +// } +// } +// } +// mDb = null; +// } +// +// public int saveKeyRing(PGPPublicKeyRing keyRing) throws IOException, GeneralException { +// mDb.beginTransaction(); +// ContentValues values = new ContentValues(); +// PGPPublicKey masterKey = keyRing.getPublicKey(); +// long masterKeyId = masterKey.getKeyID(); +// +// values.put(KeyRings.MASTER_KEY_ID, masterKeyId); +// values.put(KeyRings.TYPE, Id.database.type_public); +// values.put(KeyRings.KEY_RING_DATA, keyRing.getEncoded()); +// +// long rowId = insertOrUpdateKeyRing(values); +// int returnValue = mStatus; +// +// if (rowId == -1) { +// throw new GeneralException("saving public key ring " + masterKeyId + " failed"); +// } +// +// Vector<Integer> seenIds = new Vector<Integer>(); +// int rank = 0; +// for (PGPPublicKey key : new IterableIterator<PGPPublicKey>(keyRing.getPublicKeys())) { +// seenIds.add(saveKey(rowId, key, rank)); +// ++rank; +// } +// +// String seenIdsStr = ""; +// for (Integer id : seenIds) { +// if (seenIdsStr.length() > 0) { +// seenIdsStr += ","; +// } +// seenIdsStr += id; +// } +// mDb.delete(Keys.TABLE_NAME, +// Keys.KEY_RING_ID + " = ? AND " + +// Keys._ID + " NOT IN (" + seenIdsStr + ")", +// new String[] { "" + rowId }); +// +// mDb.setTransactionSuccessful(); +// mDb.endTransaction(); +// return returnValue; +// } +// +// public int saveKeyRing(PGPSecretKeyRing keyRing) throws IOException, GeneralException { +// mDb.beginTransaction(); +// ContentValues values = new ContentValues(); +// PGPSecretKey masterKey = keyRing.getSecretKey(); +// long masterKeyId = masterKey.getKeyID(); +// +// values.put(KeyRings.MASTER_KEY_ID, masterKeyId); +// values.put(KeyRings.TYPE, Id.database.type_secret); +// values.put(KeyRings.KEY_RING_DATA, keyRing.getEncoded()); +// +// long rowId = insertOrUpdateKeyRing(values); +// int returnValue = mStatus; +// +// if (rowId == -1) { +// throw new GeneralException("saving secret key ring " + masterKeyId + " failed"); +// } +// +// Vector<Integer> seenIds = new Vector<Integer>(); +// int rank = 0; +// for (PGPSecretKey key : new IterableIterator<PGPSecretKey>(keyRing.getSecretKeys())) { +// seenIds.add(saveKey(rowId, key, rank)); +// ++rank; +// } +// +// String seenIdsStr = ""; +// for (Integer id : seenIds) { +// if (seenIdsStr.length() > 0) { +// seenIdsStr += ","; +// } +// seenIdsStr += id; +// } +// mDb.delete(Keys.TABLE_NAME, +// Keys.KEY_RING_ID + " = ? AND " + +// Keys._ID + " NOT IN (" + seenIdsStr + ")", +// new String[] { "" + rowId }); +// +// mDb.setTransactionSuccessful(); +// mDb.endTransaction(); +// return returnValue; +// } +// +// private int saveKey(long keyRingId, PGPPublicKey key, int rank) +// throws IOException, GeneralException { +// ContentValues values = new ContentValues(); +// +// values.put(Keys.KEY_ID, key.getKeyID()); +// values.put(Keys.TYPE, Id.database.type_public); +// values.put(Keys.IS_MASTER_KEY, key.isMasterKey()); +// values.put(Keys.ALGORITHM, key.getAlgorithm()); +// values.put(Keys.KEY_SIZE, key.getBitStrength()); +// values.put(Keys.CAN_SIGN, PGPHelper.isSigningKey(key)); +// values.put(Keys.CAN_ENCRYPT, PGPHelper.isEncryptionKey(key)); +// values.put(Keys.IS_REVOKED, key.isRevoked()); +// values.put(Keys.CREATION, PGPHelper.getCreationDate(key).getTime() / 1000); +// Date expiryDate = PGPHelper.getExpiryDate(key); +// if (expiryDate != null) { +// values.put(Keys.EXPIRY, expiryDate.getTime() / 1000); +// } +// values.put(Keys.KEY_RING_ID, keyRingId); +// values.put(Keys.KEY_DATA, key.getEncoded()); +// values.put(Keys.RANK, rank); +// +// long rowId = insertOrUpdateKey(values); +// +// if (rowId == -1) { +// throw new GeneralException("saving public key " + key.getKeyID() + " failed"); +// } +// +// Vector<Integer> seenIds = new Vector<Integer>(); +// int userIdRank = 0; +// for (String userId : new IterableIterator<String>(key.getUserIDs())) { +// seenIds.add(saveUserId(rowId, userId, userIdRank)); +// ++userIdRank; +// } +// +// String seenIdsStr = ""; +// for (Integer id : seenIds) { +// if (seenIdsStr.length() > 0) { +// seenIdsStr += ","; +// } +// seenIdsStr += id; +// } +// mDb.delete(UserIds.TABLE_NAME, +// UserIds.KEY_ID + " = ? AND " + +// UserIds._ID + " NOT IN (" + seenIdsStr + ")", +// new String[] { "" + rowId }); +// +// return (int)rowId; +// } +// +// private int saveKey(long keyRingId, PGPSecretKey key, int rank) +// throws IOException, GeneralException { +// ContentValues values = new ContentValues(); +// +// values.put(Keys.KEY_ID, key.getPublicKey().getKeyID()); +// values.put(Keys.TYPE, Id.database.type_secret); +// 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_SIGN, PGPHelper.isSigningKey(key)); +// values.put(Keys.CAN_ENCRYPT, PGPHelper.isEncryptionKey(key)); +// values.put(Keys.IS_REVOKED, key.getPublicKey().isRevoked()); +// values.put(Keys.CREATION, PGPHelper.getCreationDate(key).getTime() / 1000); +// Date expiryDate = PGPHelper.getExpiryDate(key); +// if (expiryDate != null) { +// values.put(Keys.EXPIRY, expiryDate.getTime() / 1000); +// } +// values.put(Keys.KEY_RING_ID, keyRingId); +// values.put(Keys.KEY_DATA, key.getEncoded()); +// values.put(Keys.RANK, rank); +// +// long rowId = insertOrUpdateKey(values); +// +// if (rowId == -1) { +// throw new GeneralException("saving secret key " + key.getPublicKey().getKeyID() + " failed"); +// } +// +// Vector<Integer> seenIds = new Vector<Integer>(); +// int userIdRank = 0; +// for (String userId : new IterableIterator<String>(key.getUserIDs())) { +// seenIds.add(saveUserId(rowId, userId, userIdRank)); +// ++userIdRank; +// } +// +// String seenIdsStr = ""; +// for (Integer id : seenIds) { +// if (seenIdsStr.length() > 0) { +// seenIdsStr += ","; +// } +// seenIdsStr += id; +// } +// mDb.delete(UserIds.TABLE_NAME, +// UserIds.KEY_ID + " = ? AND " + +// UserIds._ID + " NOT IN (" + seenIdsStr + ")", +// new String[] { "" + rowId }); +// +// return (int)rowId; +// } +// +// private int saveUserId(long keyId, String userId, int rank) throws GeneralException { +// ContentValues values = new ContentValues(); +// +// values.put(UserIds.KEY_ID, keyId); +// values.put(UserIds.USER_ID, userId); +// values.put(UserIds.RANK, rank); +// +// long rowId = insertOrUpdateUserId(values); +// +// if (rowId == -1) { +// throw new GeneralException("saving user id " + userId + " failed"); +// } +// +// return (int)rowId; +// } +// +// private long insertOrUpdateKeyRing(ContentValues values) { +// Cursor c = mDb.query(KeyRings.TABLE_NAME, new String[] { KeyRings._ID }, +// KeyRings.MASTER_KEY_ID + " = ? AND " + KeyRings.TYPE + " = ?", +// new String[] { +// values.getAsString(KeyRings.MASTER_KEY_ID), +// values.getAsString(KeyRings.TYPE), +// }, +// null, null, null); +// long rowId = -1; +// if (c != null && c.moveToFirst()) { +// rowId = c.getLong(0); +// mDb.update(KeyRings.TABLE_NAME, values, +// KeyRings._ID + " = ?", new String[] { "" + rowId }); +// mStatus = Id.return_value.updated; +// } else { +// rowId = mDb.insert(KeyRings.TABLE_NAME, KeyRings.WHO_ID, values); +// mStatus = Id.return_value.ok; +// } +// +// if (c != null) { +// c.close(); +// } +// +// return rowId; +// } +// +// private long insertOrUpdateKey(ContentValues values) { +// Cursor c = mDb.query(Keys.TABLE_NAME, new String[] { Keys._ID }, +// Keys.KEY_ID + " = ? AND " + Keys.TYPE + " = ?", +// new String[] { +// values.getAsString(Keys.KEY_ID), +// values.getAsString(Keys.TYPE), +// }, +// null, null, null); +// long rowId = -1; +// if (c != null && c.moveToFirst()) { +// rowId = c.getLong(0); +// mDb.update(Keys.TABLE_NAME, values, +// Keys._ID + " = ?", new String[] { "" + rowId }); +// } else { +// rowId = mDb.insert(Keys.TABLE_NAME, Keys.KEY_DATA, values); +// } +// +// if (c != null) { +// c.close(); +// } +// +// return rowId; +// } +// +// private long insertOrUpdateUserId(ContentValues values) { +// Cursor c = mDb.query(UserIds.TABLE_NAME, new String[] { UserIds._ID }, +// UserIds.KEY_ID + " = ? AND " + UserIds.USER_ID + " = ?", +// new String[] { +// values.getAsString(UserIds.KEY_ID), +// values.getAsString(UserIds.USER_ID), +// }, +// null, null, null); +// long rowId = -1; +// if (c != null && c.moveToFirst()) { +// rowId = c.getLong(0); +// mDb.update(UserIds.TABLE_NAME, values, +// UserIds._ID + " = ?", new String[] { "" + rowId }); +// } else { +// rowId = mDb.insert(UserIds.TABLE_NAME, UserIds.USER_ID, values); +// } +// +// if (c != null) { +// c.close(); +// } +// +// return rowId; +// } +// +// public Object getKeyRing(int keyRingId) { +// Cursor c = mDb.query(KeyRings.TABLE_NAME, +// new String[] { KeyRings.KEY_RING_DATA, KeyRings.TYPE }, +// KeyRings._ID + " = ?", +// new String[] { +// "" + keyRingId, +// }, +// null, null, null); +// byte[] data = null; +// Object keyRing = null; +// if (c != null && c.moveToFirst()) { +// data = c.getBlob(0); +// if (data != null) { +// try { +// if (c.getInt(1) == Id.database.type_public) { +// keyRing = new PGPPublicKeyRing(data); +// } else { +// keyRing = new PGPSecretKeyRing(data); +// } +// } catch (IOException e) { +// // can't load it, then +// } catch (PGPException e) { +// // can't load it, then +// } +// } +// } +// +// if (c != null) { +// c.close(); +// } +// +// return keyRing; +// } +// +// public byte[] getKeyRingDataFromKeyId(int type, long keyId) { +// Cursor c = mDb.query(Keys.TABLE_NAME + " INNER JOIN " + KeyRings.TABLE_NAME + " ON (" + +// KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + +// Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + ")", +// new String[] { KeyRings.TABLE_NAME + "." + KeyRings.KEY_RING_DATA }, +// Keys.TABLE_NAME + "." + Keys.KEY_ID + " = ? AND " + +// KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = ?", +// new String[] { +// "" + keyId, +// "" + type, +// }, +// null, null, null); +// +// byte[] data = null; +// if (c != null && c.moveToFirst()) { +// data = c.getBlob(0); +// } +// +// if (c != null) { +// c.close(); +// } +// +// return data; +// } +// +// public byte[] getKeyDataFromKeyId(int type, long keyId) { +// Cursor c = mDb.query(Keys.TABLE_NAME, new String[] { Keys.KEY_DATA }, +// Keys.KEY_ID + " = ? AND " + Keys.TYPE + " = ?", +// new String[] { +// "" + keyId, +// "" + type, +// }, +// null, null, null); +// byte[] data = null; +// if (c != null && c.moveToFirst()) { +// data = c.getBlob(0); +// } +// +// if (c != null) { +// c.close(); +// } +// +// return data; +// } +// +// public void deleteKeyRing(int keyRingId) { +// mDb.beginTransaction(); +// mDb.delete(KeyRings.TABLE_NAME, +// KeyRings._ID + " = ?", new String[] { "" + keyRingId }); +// +// Cursor c = mDb.query(Keys.TABLE_NAME, new String[] { Keys._ID }, +// Keys.KEY_RING_ID + " = ?", +// new String[] { +// "" + keyRingId, +// }, +// null, null, null); +// if (c != null && c.moveToFirst()) { +// do { +// int keyId = c.getInt(0); +// deleteKey(keyId); +// } while (c.moveToNext()); +// } +// +// if (c != null) { +// c.close(); +// } +// +// mDb.setTransactionSuccessful(); +// mDb.endTransaction(); +// } +// +// private void deleteKey(int keyId) { +// mDb.delete(Keys.TABLE_NAME, +// Keys._ID + " = ?", new String[] { "" + keyId }); +// +// mDb.delete(UserIds.TABLE_NAME, +// UserIds.KEY_ID + " = ?", new String[] { "" + keyId }); +// } +// +// public SQLiteDatabase db() { +// return mDb; +// } +//} |