use autovalue for ParcelableKeyRing
This commit is contained in:
@@ -302,7 +302,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
||||
|
||||
try {
|
||||
byte[] encoded = ring.getEncoded();
|
||||
mParcelableKeyRing = new ParcelableKeyRing(encoded);
|
||||
mParcelableKeyRing = ParcelableKeyRing.createFromEncodedBytes(encoded);
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,73 +18,38 @@
|
||||
|
||||
package org.sufficientlysecure.keychain.keyimport;
|
||||
|
||||
import android.os.Parcel;
|
||||
|
||||
import android.os.Parcelable;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.google.auto.value.AutoValue;
|
||||
|
||||
|
||||
/**
|
||||
* This class is a parcelable representation of either a keyring as raw data,
|
||||
* or a (unique) reference to one as a fingerprint, keyid, or keybase name.
|
||||
*/
|
||||
public class ParcelableKeyRing implements Parcelable {
|
||||
|
||||
public final byte[] mBytes;
|
||||
@AutoValue
|
||||
public abstract class ParcelableKeyRing implements Parcelable {
|
||||
@Nullable
|
||||
public abstract byte[] getBytes();
|
||||
|
||||
// dual role!
|
||||
public final byte[] mExpectedFingerprint;
|
||||
public final String mKeyIdHex;
|
||||
public final String mKeybaseName;
|
||||
public final String mFbUsername;
|
||||
@Nullable
|
||||
public abstract byte[] getExpectedFingerprint();
|
||||
@Nullable
|
||||
public abstract String getKeyIdHex();
|
||||
@Nullable
|
||||
public abstract String getKeybaseName();
|
||||
@Nullable
|
||||
public abstract String getFbUsername();
|
||||
|
||||
public ParcelableKeyRing(byte[] bytes) {
|
||||
this(bytes, null, null, null, null);
|
||||
public static ParcelableKeyRing createFromEncodedBytes(byte[] bytes) {
|
||||
return new AutoValue_ParcelableKeyRing(bytes, null, null, null, null);
|
||||
}
|
||||
|
||||
public ParcelableKeyRing(byte[] expectedFingerprint, String keyIdHex, String keybaseName,
|
||||
String fbUsername) {
|
||||
|
||||
this(null, expectedFingerprint, keyIdHex, keybaseName, fbUsername);
|
||||
public static ParcelableKeyRing createFromReference(
|
||||
byte[] expectedFingerprint, String keyIdHex, String keybaseName, String fbUsername) {
|
||||
return new AutoValue_ParcelableKeyRing(null, expectedFingerprint, keyIdHex, keybaseName, fbUsername);
|
||||
}
|
||||
|
||||
public ParcelableKeyRing(byte[] bytes, byte[] expectedFingerprint, String keyIdHex,
|
||||
String keybaseName, String fbUsername) {
|
||||
|
||||
this.mBytes = bytes;
|
||||
this.mExpectedFingerprint = expectedFingerprint;
|
||||
this.mKeyIdHex = keyIdHex;
|
||||
this.mKeybaseName = keybaseName;
|
||||
this.mFbUsername = fbUsername;
|
||||
}
|
||||
|
||||
private ParcelableKeyRing(Parcel source) {
|
||||
mBytes = source.createByteArray();
|
||||
|
||||
mExpectedFingerprint = source.createByteArray();
|
||||
mKeyIdHex = source.readString();
|
||||
mKeybaseName = source.readString();
|
||||
mFbUsername = source.readString();
|
||||
}
|
||||
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeByteArray(mBytes);
|
||||
|
||||
dest.writeByteArray(mExpectedFingerprint);
|
||||
dest.writeString(mKeyIdHex);
|
||||
dest.writeString(mKeybaseName);
|
||||
dest.writeString(mFbUsername);
|
||||
}
|
||||
|
||||
public static final Creator<ParcelableKeyRing> CREATOR = new Creator<ParcelableKeyRing>() {
|
||||
public ParcelableKeyRing createFromParcel(final Parcel source) {
|
||||
return new ParcelableKeyRing(source);
|
||||
}
|
||||
|
||||
public ParcelableKeyRing[] newArray(final int size) {
|
||||
return new ParcelableKeyRing[size];
|
||||
}
|
||||
};
|
||||
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ public class ImportKeysListCloudLoader
|
||||
|
||||
// Now we have all the data needed to build the parcelable key ring for this key
|
||||
for (ImportKeysListEntry e : mEntryList) {
|
||||
e.setParcelableKeyRing(new ParcelableKeyRing(e.getFingerprint(), e.getKeyIdHex(),
|
||||
e.setParcelableKeyRing(ParcelableKeyRing.createFromReference(e.getFingerprint(), e.getKeyIdHex(),
|
||||
e.getKeybaseName(), e.getFbUsername()));
|
||||
}
|
||||
|
||||
|
||||
@@ -178,8 +178,8 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
|
||||
UncachedKeyRing key = null;
|
||||
|
||||
// If there is already byte data, use that
|
||||
if (entry.mBytes != null) {
|
||||
key = UncachedKeyRing.decodeFromData(entry.mBytes);
|
||||
if (entry.getBytes() != null) {
|
||||
key = UncachedKeyRing.decodeFromData(entry.getBytes());
|
||||
} else {
|
||||
try {
|
||||
key = fetchKeyFromInternet(hkpKeyserver, proxy, log, entry, key);
|
||||
@@ -216,7 +216,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
|
||||
if (key.isSecret()) {
|
||||
result = mKeyWritableRepository.saveSecretKeyRing(key, canKeyRings, skipSave);
|
||||
} else {
|
||||
result = mKeyWritableRepository.savePublicKeyRing(key, entry.mExpectedFingerprint, canKeyRings, skipSave);
|
||||
result = mKeyWritableRepository.savePublicKeyRing(key, entry.getExpectedFingerprint(), canKeyRings, skipSave);
|
||||
}
|
||||
}
|
||||
if (!result.success()) {
|
||||
@@ -325,7 +325,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
|
||||
QueryNotFoundException queryNotFoundException = null;
|
||||
|
||||
boolean canFetchFromKeyservers =
|
||||
hkpKeyserver != null && (entry.mKeyIdHex != null || entry.mExpectedFingerprint != null);
|
||||
hkpKeyserver != null && (entry.getKeyIdHex() != null || entry.getExpectedFingerprint()!= null);
|
||||
if (canFetchFromKeyservers) {
|
||||
UncachedKeyRing keyserverKey = null;
|
||||
try {
|
||||
@@ -339,7 +339,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
|
||||
}
|
||||
}
|
||||
|
||||
boolean hasKeybaseName = entry.mKeybaseName != null;
|
||||
boolean hasKeybaseName = entry.getKeybaseName() != null;
|
||||
if (hasKeybaseName) {
|
||||
UncachedKeyRing keybaseKey = fetchKeyFromKeybase(proxy, log, entry);
|
||||
if (keybaseKey != null) {
|
||||
@@ -347,7 +347,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
|
||||
}
|
||||
}
|
||||
|
||||
boolean hasFacebookName = entry.mFbUsername != null;
|
||||
boolean hasFacebookName = entry.getFbUsername() != null;
|
||||
if (hasFacebookName) {
|
||||
UncachedKeyRing facebookKey = fetchKeyFromFacebook(proxy, log, entry);
|
||||
if (facebookKey != null) {
|
||||
@@ -370,14 +370,14 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
|
||||
log.add(LogType.MSG_IMPORT_KEYSERVER, 1, hkpKeyserver);
|
||||
|
||||
// Download by fingerprint, or keyId - whichever is available
|
||||
if (entry.mExpectedFingerprint != null) {
|
||||
String fingerprintHex = KeyFormattingUtils.convertFingerprintToHex(entry.mExpectedFingerprint);
|
||||
if (entry.getExpectedFingerprint() != null) {
|
||||
String fingerprintHex = KeyFormattingUtils.convertFingerprintToHex(entry.getExpectedFingerprint());
|
||||
log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, "0x" +
|
||||
fingerprintHex.substring(24));
|
||||
data = hkpKeyserver.get("0x" + fingerprintHex, proxy).getBytes();
|
||||
} else {
|
||||
log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, entry.mKeyIdHex);
|
||||
data = hkpKeyserver.get(entry.mKeyIdHex, proxy).getBytes();
|
||||
log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, entry.getKeyIdHex());
|
||||
data = hkpKeyserver.get(entry.getKeyIdHex(), proxy).getBytes();
|
||||
}
|
||||
UncachedKeyRing keyserverKey = UncachedKeyRing.decodeFromData(data);
|
||||
if (keyserverKey != null) {
|
||||
@@ -403,8 +403,8 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
|
||||
}
|
||||
|
||||
try {
|
||||
log.add(LogType.MSG_IMPORT_FETCH_KEYBASE, 2, entry.mKeybaseName);
|
||||
byte[] data = keybaseServer.get(entry.mKeybaseName, proxy).getBytes();
|
||||
log.add(LogType.MSG_IMPORT_FETCH_KEYBASE, 2, entry.getKeybaseName());
|
||||
byte[] data = keybaseServer.get(entry.getKeybaseName(), proxy).getBytes();
|
||||
UncachedKeyRing keybaseKey = UncachedKeyRing.decodeFromData(data);
|
||||
|
||||
if (keybaseKey != null) {
|
||||
@@ -429,8 +429,8 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
|
||||
}
|
||||
|
||||
try {
|
||||
log.add(LogType.MSG_IMPORT_FETCH_FACEBOOK, 2, entry.mFbUsername);
|
||||
byte[] data = facebookServer.get(entry.mFbUsername, proxy).getBytes();
|
||||
log.add(LogType.MSG_IMPORT_FETCH_FACEBOOK, 2, entry.getFbUsername());
|
||||
byte[] data = facebookServer.get(entry.getFbUsername(), proxy).getBytes();
|
||||
UncachedKeyRing facebookKey = UncachedKeyRing.decodeFromData(data);
|
||||
|
||||
if (facebookKey != null) {
|
||||
|
||||
@@ -1054,7 +1054,7 @@ public class KeyWritableRepository extends KeyRepository {
|
||||
if (cursor.isAfterLast()) {
|
||||
return false;
|
||||
}
|
||||
ring = new ParcelableKeyRing(cursor.getBlob(0));
|
||||
ring = ParcelableKeyRing.createFromEncodedBytes(cursor.getBlob(0));
|
||||
cursor.moveToNext();
|
||||
return true;
|
||||
}
|
||||
@@ -1116,7 +1116,7 @@ public class KeyWritableRepository extends KeyRepository {
|
||||
if (cursor.isAfterLast()) {
|
||||
return false;
|
||||
}
|
||||
ring = new ParcelableKeyRing(cursor.getBlob(0));
|
||||
ring = ParcelableKeyRing.createFromEncodedBytes(cursor.getBlob(0));
|
||||
cursor.moveToNext();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -366,8 +366,7 @@ public class KeyserverSyncAdapterService extends Service {
|
||||
first = false;
|
||||
}
|
||||
|
||||
Log.d(Constants.TAG, "Updating key with fingerprint " + keyRing.mExpectedFingerprint +
|
||||
" with a wait time of " + waitTime + "s");
|
||||
Log.d(Constants.TAG, "Updating key with a wait time of " + waitTime + "s");
|
||||
try {
|
||||
Thread.sleep(waitTime * 1000);
|
||||
} catch (InterruptedException e) {
|
||||
@@ -465,7 +464,7 @@ public class KeyserverSyncAdapterService extends Service {
|
||||
byte[] fingerprint = keyCursor.getBlob(INDEX_FINGERPRINT);
|
||||
String hexKeyId = KeyFormattingUtils.convertKeyIdToHex(keyId);
|
||||
// we aren't updating from keybase as of now
|
||||
keyList.add(new ParcelableKeyRing(fingerprint, hexKeyId, null, null));
|
||||
keyList.add(ParcelableKeyRing.createFromReference(fingerprint, hexKeyId, null, null));
|
||||
}
|
||||
keyCursor.close();
|
||||
|
||||
|
||||
@@ -215,7 +215,7 @@ public class CreateSecurityTokenImportResetFragment
|
||||
|
||||
public void importKey() {
|
||||
ArrayList<ParcelableKeyRing> keyList = new ArrayList<>();
|
||||
keyList.add(new ParcelableKeyRing(mTokenFingerprint, null, null, null));
|
||||
keyList.add(ParcelableKeyRing.createFromReference(mTokenFingerprint, null, null, null));
|
||||
mKeyList = keyList;
|
||||
|
||||
mKeyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
|
||||
|
||||
@@ -146,7 +146,7 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager.
|
||||
keyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
|
||||
|
||||
{
|
||||
ParcelableKeyRing keyEntry = new ParcelableKeyRing(null,
|
||||
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(null,
|
||||
KeyFormattingUtils.convertKeyIdToHex(unknownKeyId), null, null);
|
||||
ArrayList<ParcelableKeyRing> selectedEntries = new ArrayList<>();
|
||||
selectedEntries.add(keyEntry);
|
||||
|
||||
@@ -766,7 +766,7 @@ public class DecryptListFragment
|
||||
keyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver();
|
||||
|
||||
{
|
||||
ParcelableKeyRing keyEntry = new ParcelableKeyRing(null,
|
||||
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(null,
|
||||
KeyFormattingUtils.convertKeyIdToHex(unknownKeyId), null, null);
|
||||
ArrayList<ParcelableKeyRing> selectedEntries = new ArrayList<>();
|
||||
selectedEntries.add(keyEntry);
|
||||
|
||||
@@ -191,7 +191,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
|
||||
}
|
||||
|
||||
public void importKeys(byte[] keyringData) {
|
||||
ParcelableKeyRing keyEntry = new ParcelableKeyRing(keyringData);
|
||||
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromEncodedBytes(keyringData);
|
||||
ArrayList<ParcelableKeyRing> selectedEntries = new ArrayList<>();
|
||||
selectedEntries.add(keyEntry);
|
||||
|
||||
@@ -199,7 +199,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
|
||||
}
|
||||
|
||||
public void importKeysFromFingerprint(byte[] fingerprint) {
|
||||
ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null, null);
|
||||
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(fingerprint, null, null, null);
|
||||
ArrayList<ParcelableKeyRing> selectedEntries = new ArrayList<>();
|
||||
selectedEntries.add(keyEntry);
|
||||
|
||||
|
||||
@@ -503,7 +503,7 @@ public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
|
||||
try {
|
||||
while (cursor.moveToNext()) {
|
||||
byte[] fingerprint = cursor.getBlob(0); //fingerprint column is 0
|
||||
ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null, null);
|
||||
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(fingerprint, null, null, null);
|
||||
keyList.add(keyEntry);
|
||||
}
|
||||
mKeyList = keyList;
|
||||
|
||||
@@ -172,7 +172,7 @@ public class SafeSlingerActivity extends BaseActivity
|
||||
do {
|
||||
d = extras.getByteArray(ExchangeConfig.extra.MEMBER_DATA + i);
|
||||
if (d != null) {
|
||||
list.add(new ParcelableKeyRing(d));
|
||||
list.add(ParcelableKeyRing.createFromEncodedBytes(d));
|
||||
i++;
|
||||
}
|
||||
} while (d != null);
|
||||
|
||||
@@ -222,7 +222,7 @@ public class ImportKeysAdapter extends RecyclerView.Adapter<ImportKeysAdapter.Vi
|
||||
ParcelableHkpKeyserver keyserver = null;
|
||||
|
||||
ParcelableKeyRing keyRing = entry.getParcelableKeyRing();
|
||||
if (keyRing.mBytes != null) {
|
||||
if (keyRing.getBytes() != null) {
|
||||
// instead of giving the entries by Intent extra, cache them into a
|
||||
// file to prevent Java Binder problems on heavy imports
|
||||
// read FileImportCache for more info.
|
||||
|
||||
@@ -1163,7 +1163,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
||||
|
||||
byte[] blob = keyRepository.getCachedPublicKeyRing(dataUri).getFingerprint();
|
||||
|
||||
ParcelableKeyRing keyEntry = new ParcelableKeyRing(blob, null, null, null);
|
||||
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(blob, null, null, null);
|
||||
ArrayList<ParcelableKeyRing> entries = new ArrayList<>();
|
||||
entries.add(keyEntry);
|
||||
mKeyList = entries;
|
||||
|
||||
@@ -57,7 +57,7 @@ public class EmailKeyHelper {
|
||||
// Put them in a list and import
|
||||
ArrayList<ParcelableKeyRing> keys = new ArrayList<>(entries.size());
|
||||
for (ImportKeysListEntry entry : entries) {
|
||||
keys.add(new ParcelableKeyRing(entry.getFingerprint(), entry.getKeyIdHex(), null, null));
|
||||
keys.add(ParcelableKeyRing.createFromReference(entry.getFingerprint(), entry.getKeyIdHex(), null, null));
|
||||
}
|
||||
mKeyList = keys;
|
||||
mKeyserver = keyserver;
|
||||
|
||||
Reference in New Issue
Block a user