use byte[] for expected fingerprint
This commit is contained in:
@@ -30,6 +30,7 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -56,7 +57,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
private boolean mUpdated;
|
private boolean mUpdated;
|
||||||
|
|
||||||
private Date mDate;
|
private Date mDate;
|
||||||
private String mFingerprintHex;
|
private byte[] mFingerprint;
|
||||||
private Integer mBitStrength;
|
private Integer mBitStrength;
|
||||||
private String mCurveOid;
|
private String mCurveOid;
|
||||||
private String mAlgorithm;
|
private String mAlgorithm;
|
||||||
@@ -78,10 +79,10 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasSameKeyAs(ImportKeysListEntry other) {
|
public boolean hasSameKeyAs(ImportKeysListEntry other) {
|
||||||
if (mFingerprintHex == null || other == null) {
|
if (mFingerprint == null || other == null || other.mFingerprint == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return mFingerprintHex.equals(other.mFingerprintHex);
|
return Arrays.equals(mFingerprint, other.mFingerprint);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getKeyIdHex() {
|
public String getKeyIdHex() {
|
||||||
@@ -140,16 +141,12 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
mDate = date;
|
mDate = date;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getFingerprintHex() {
|
|
||||||
return mFingerprintHex;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFingerprintHex(String fingerprintHex) {
|
|
||||||
mFingerprintHex = fingerprintHex;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFingerprint(byte[] fingerprint) {
|
public void setFingerprint(byte[] fingerprint) {
|
||||||
mFingerprintHex = KeyFormattingUtils.convertFingerprintToHex(fingerprint);
|
mFingerprint = fingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getFingerprint() {
|
||||||
|
return mFingerprint;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getBitStrength() {
|
public Integer getBitStrength() {
|
||||||
@@ -371,7 +368,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
if (mDate != null) {
|
if (mDate != null) {
|
||||||
dest.writeLong(mDate.getTime());
|
dest.writeLong(mDate.getTime());
|
||||||
}
|
}
|
||||||
dest.writeString(mFingerprintHex);
|
dest.writeByteArray(mFingerprint);
|
||||||
dest.writeString(mKeyIdHex);
|
dest.writeString(mKeyIdHex);
|
||||||
dest.writeInt(mBitStrength == null ? 0 : 1);
|
dest.writeInt(mBitStrength == null ? 0 : 1);
|
||||||
if (mBitStrength != null) {
|
if (mBitStrength != null) {
|
||||||
@@ -397,7 +394,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
vr.mExpired = source.readByte() == 1;
|
vr.mExpired = source.readByte() == 1;
|
||||||
vr.mUpdated = source.readByte() == 1;
|
vr.mUpdated = source.readByte() == 1;
|
||||||
vr.mDate = source.readInt() != 0 ? new Date(source.readLong()) : null;
|
vr.mDate = source.readInt() != 0 ? new Date(source.readLong()) : null;
|
||||||
vr.mFingerprintHex = source.readString();
|
vr.mFingerprint = source.createByteArray();
|
||||||
vr.mKeyIdHex = source.readString();
|
vr.mKeyIdHex = source.readString();
|
||||||
vr.mBitStrength = source.readInt() != 0 ? source.readInt() : null;
|
vr.mBitStrength = source.readInt() != 0 ? source.readInt() : null;
|
||||||
vr.mAlgorithm = source.readString();
|
vr.mAlgorithm = source.readString();
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public class KeybaseKeyserver extends Keyserver {
|
|||||||
String username = match.getUsername();
|
String username = match.getUsername();
|
||||||
String fullName = match.getFullName();
|
String fullName = match.getFullName();
|
||||||
String fingerprint = match.getFingerprint();
|
String fingerprint = match.getFingerprint();
|
||||||
entry.setFingerprintHex(fingerprint);
|
entry.setFingerprint(KeyFormattingUtils.convertFingerprintHexFingerprint(fingerprint));
|
||||||
|
|
||||||
entry.setKeyIdHex("0x" + match.getKeyID());
|
entry.setKeyIdHex("0x" + match.getKeyID());
|
||||||
// so we can query for the keybase id directly, and to identify the location from which the
|
// so we can query for the keybase id directly, and to identify the location from which the
|
||||||
|
|||||||
@@ -301,7 +301,8 @@ public class ParcelableHkpKeyserver extends Keyserver implements Parcelable {
|
|||||||
// see https://bitbucket.org/skskeyserver/sks-keyserver/pull-request/12/fixes-for-machine-readable-indexes/diff
|
// see https://bitbucket.org/skskeyserver/sks-keyserver/pull-request/12/fixes-for-machine-readable-indexes/diff
|
||||||
String fingerprintOrKeyId = matcher.group(1).toLowerCase(Locale.ENGLISH);
|
String fingerprintOrKeyId = matcher.group(1).toLowerCase(Locale.ENGLISH);
|
||||||
if (fingerprintOrKeyId.length() == 40) {
|
if (fingerprintOrKeyId.length() == 40) {
|
||||||
entry.setFingerprintHex(fingerprintOrKeyId);
|
byte[] fingerprint = KeyFormattingUtils.convertFingerprintHexFingerprint(fingerprintOrKeyId);
|
||||||
|
entry.setFingerprint(fingerprint);
|
||||||
entry.setKeyIdHex("0x" + fingerprintOrKeyId.substring(fingerprintOrKeyId.length()
|
entry.setKeyIdHex("0x" + fingerprintOrKeyId.substring(fingerprintOrKeyId.length()
|
||||||
- 16, fingerprintOrKeyId.length()));
|
- 16, fingerprintOrKeyId.length()));
|
||||||
} else if (fingerprintOrKeyId.length() == 16) {
|
} else if (fingerprintOrKeyId.length() == 16) {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class ParcelableKeyRing implements Parcelable {
|
|||||||
public final byte[] mBytes;
|
public final byte[] mBytes;
|
||||||
|
|
||||||
// dual role!
|
// dual role!
|
||||||
public final String mExpectedFingerprint;
|
public final byte[] mExpectedFingerprint;
|
||||||
public final String mKeyIdHex;
|
public final String mKeyIdHex;
|
||||||
public final String mKeybaseName;
|
public final String mKeybaseName;
|
||||||
public final String mFbUsername;
|
public final String mFbUsername;
|
||||||
@@ -39,13 +39,13 @@ public class ParcelableKeyRing implements Parcelable {
|
|||||||
this(bytes, null, null, null, null);
|
this(bytes, null, null, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParcelableKeyRing(String expectedFingerprint, String keyIdHex, String keybaseName,
|
public ParcelableKeyRing(byte[] expectedFingerprint, String keyIdHex, String keybaseName,
|
||||||
String fbUsername) {
|
String fbUsername) {
|
||||||
|
|
||||||
this(null, expectedFingerprint, keyIdHex, keybaseName, fbUsername);
|
this(null, expectedFingerprint, keyIdHex, keybaseName, fbUsername);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParcelableKeyRing(byte[] bytes, String expectedFingerprint, String keyIdHex,
|
public ParcelableKeyRing(byte[] bytes, byte[] expectedFingerprint, String keyIdHex,
|
||||||
String keybaseName, String fbUsername) {
|
String keybaseName, String fbUsername) {
|
||||||
|
|
||||||
this.mBytes = bytes;
|
this.mBytes = bytes;
|
||||||
@@ -58,7 +58,7 @@ public class ParcelableKeyRing implements Parcelable {
|
|||||||
private ParcelableKeyRing(Parcel source) {
|
private ParcelableKeyRing(Parcel source) {
|
||||||
mBytes = source.createByteArray();
|
mBytes = source.createByteArray();
|
||||||
|
|
||||||
mExpectedFingerprint = source.readString();
|
mExpectedFingerprint = source.createByteArray();
|
||||||
mKeyIdHex = source.readString();
|
mKeyIdHex = source.readString();
|
||||||
mKeybaseName = source.readString();
|
mKeybaseName = source.readString();
|
||||||
mFbUsername = source.readString();
|
mFbUsername = source.readString();
|
||||||
@@ -67,7 +67,7 @@ public class ParcelableKeyRing implements Parcelable {
|
|||||||
public void writeToParcel(Parcel dest, int flags) {
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
dest.writeByteArray(mBytes);
|
dest.writeByteArray(mBytes);
|
||||||
|
|
||||||
dest.writeString(mExpectedFingerprint);
|
dest.writeByteArray(mExpectedFingerprint);
|
||||||
dest.writeString(mKeyIdHex);
|
dest.writeString(mKeyIdHex);
|
||||||
dest.writeString(mKeybaseName);
|
dest.writeString(mKeybaseName);
|
||||||
dest.writeString(mFbUsername);
|
dest.writeString(mFbUsername);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import org.sufficientlysecure.keychain.operations.results.GetKeyResult;
|
|||||||
import org.sufficientlysecure.keychain.operations.results.OperationResult;
|
import org.sufficientlysecure.keychain.operations.results.OperationResult;
|
||||||
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
||||||
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
|
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
|
||||||
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
import org.sufficientlysecure.keychain.util.ParcelableProxy;
|
import org.sufficientlysecure.keychain.util.ParcelableProxy;
|
||||||
import org.sufficientlysecure.keychain.util.Preferences;
|
import org.sufficientlysecure.keychain.util.Preferences;
|
||||||
@@ -83,7 +84,7 @@ public class ImportKeysListCloudLoader
|
|||||||
|
|
||||||
// Now we have all the data needed to build the parcelable key ring for this key
|
// Now we have all the data needed to build the parcelable key ring for this key
|
||||||
for (ImportKeysListEntry e : mEntryList) {
|
for (ImportKeysListEntry e : mEntryList) {
|
||||||
e.setParcelableKeyRing(new ParcelableKeyRing(e.getFingerprintHex(), e.getKeyIdHex(),
|
e.setParcelableKeyRing(new ParcelableKeyRing(e.getFingerprint(), e.getKeyIdHex(),
|
||||||
e.getKeybaseName(), e.getFbUsername()));
|
e.getKeybaseName(), e.getFbUsername()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,16 +147,19 @@ public class ImportKeysListCloudLoader
|
|||||||
mEntryList.clear();
|
mEntryList.clear();
|
||||||
// add result to data
|
// add result to data
|
||||||
if (enforceFingerprint) {
|
if (enforceFingerprint) {
|
||||||
String fingerprint = mState.mServerQuery.substring(2);
|
String fingerprintHex = mState.mServerQuery.substring(2);
|
||||||
Log.d(Constants.TAG, "fingerprint: " + fingerprint);
|
Log.d(Constants.TAG, "fingerprint: " + fingerprintHex);
|
||||||
// query must return only one result!
|
// query must return only one result!
|
||||||
if (searchResult.size() == 1) {
|
if (searchResult.size() == 1) {
|
||||||
|
if (fingerprintHex.length() != 40) {
|
||||||
|
throw new IllegalArgumentException("Bad format!");
|
||||||
|
}
|
||||||
ImportKeysListEntry uniqueEntry = searchResult.get(0);
|
ImportKeysListEntry uniqueEntry = searchResult.get(0);
|
||||||
/*
|
/*
|
||||||
* set fingerprint explicitly after query
|
* set fingerprint explicitly after query
|
||||||
* to enforce a check when the key is imported by KeychainService
|
* to enforce a check when the key is imported by KeychainService
|
||||||
*/
|
*/
|
||||||
uniqueEntry.setFingerprintHex(fingerprint);
|
uniqueEntry.setFingerprint(KeyFormattingUtils.convertFingerprintHexFingerprint(fingerprintHex));
|
||||||
mEntryList.add(uniqueEntry);
|
mEntryList.add(uniqueEntry);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ import org.sufficientlysecure.keychain.service.ContactSyncAdapterService;
|
|||||||
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
|
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
|
||||||
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
||||||
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
|
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
|
||||||
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.util.IteratorWithSize;
|
import org.sufficientlysecure.keychain.util.IteratorWithSize;
|
||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
import org.sufficientlysecure.keychain.util.ParcelableFileCache;
|
import org.sufficientlysecure.keychain.util.ParcelableFileCache;
|
||||||
@@ -340,9 +341,10 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
|
|||||||
|
|
||||||
// Download by fingerprint, or keyId - whichever is available
|
// Download by fingerprint, or keyId - whichever is available
|
||||||
if (entry.mExpectedFingerprint != null) {
|
if (entry.mExpectedFingerprint != null) {
|
||||||
|
String fingerprintHex = KeyFormattingUtils.convertFingerprintToHex(entry.mExpectedFingerprint);
|
||||||
log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, "0x" +
|
log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, "0x" +
|
||||||
entry.mExpectedFingerprint.substring(24));
|
fingerprintHex.substring(24));
|
||||||
data = hkpKeyserver.get("0x" + entry.mExpectedFingerprint, proxy).getBytes();
|
data = hkpKeyserver.get("0x" + fingerprintHex, proxy).getBytes();
|
||||||
} else {
|
} else {
|
||||||
log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, entry.mKeyIdHex);
|
log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, entry.mKeyIdHex);
|
||||||
data = hkpKeyserver.get(entry.mKeyIdHex, proxy).getBytes();
|
data = hkpKeyserver.get(entry.mKeyIdHex, proxy).getBytes();
|
||||||
|
|||||||
@@ -18,19 +18,20 @@
|
|||||||
|
|
||||||
package org.sufficientlysecure.keychain.pgp;
|
package org.sufficientlysecure.keychain.pgp;
|
||||||
|
|
||||||
import org.bouncycastle.openpgp.PGPKeyRing;
|
|
||||||
import org.bouncycastle.openpgp.PGPPublicKey;
|
|
||||||
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
|
|
||||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
|
||||||
import org.sufficientlysecure.keychain.util.IterableIterator;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bouncycastle.openpgp.PGPKeyRing;
|
||||||
|
import org.bouncycastle.openpgp.PGPPublicKey;
|
||||||
|
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
|
||||||
|
import org.sufficientlysecure.keychain.util.IterableIterator;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A generic wrapped PGPKeyRing object.
|
* A generic wrapped PGPKeyRing object.
|
||||||
@@ -168,14 +169,13 @@ public abstract class CanonicalizedKeyRing extends KeyRing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns true iff the keyring contains a primary key or mutually bound subkey with the expected fingerprint
|
/// Returns true iff the keyring contains a primary key or mutually bound subkey with the expected fingerprint
|
||||||
public boolean containsBoundSubkey(String expectedFingerprint) {
|
public boolean containsBoundSubkey(byte[] expectedFingerprint) {
|
||||||
for (CanonicalizedPublicKey key : publicKeyIterator()) {
|
for (CanonicalizedPublicKey key : publicKeyIterator()) {
|
||||||
boolean isMasterOrMutuallyBound = key.isMasterKey() || key.canSign();
|
boolean isMasterOrMutuallyBound = key.isMasterKey() || key.canSign();
|
||||||
if (!isMasterOrMutuallyBound) {
|
if (!isMasterOrMutuallyBound) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (KeyFormattingUtils.convertFingerprintToHex(
|
if (Arrays.equals(key.getFingerprint(), expectedFingerprint)) {
|
||||||
key.getFingerprint()).equalsIgnoreCase(expectedFingerprint)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -747,7 +747,7 @@ public class KeyWritableRepository extends KeyRepository {
|
|||||||
* If you want to merge keys in-memory only and not save in database set skipSave=true.
|
* If you want to merge keys in-memory only and not save in database set skipSave=true.
|
||||||
*/
|
*/
|
||||||
public SaveKeyringResult savePublicKeyRing(UncachedKeyRing publicRing,
|
public SaveKeyringResult savePublicKeyRing(UncachedKeyRing publicRing,
|
||||||
String expectedFingerprint,
|
byte[] expectedFingerprint,
|
||||||
ArrayList<CanonicalizedKeyRing> canKeyRings,
|
ArrayList<CanonicalizedKeyRing> canKeyRings,
|
||||||
boolean skipSave) {
|
boolean skipSave) {
|
||||||
|
|
||||||
@@ -869,7 +869,7 @@ public class KeyWritableRepository extends KeyRepository {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SaveKeyringResult savePublicKeyRing(UncachedKeyRing publicRing, String expectedFingerprint) {
|
public SaveKeyringResult savePublicKeyRing(UncachedKeyRing publicRing, byte[] expectedFingerprint) {
|
||||||
return savePublicKeyRing(publicRing, expectedFingerprint, null, false);
|
return savePublicKeyRing(publicRing, expectedFingerprint, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -462,10 +462,8 @@ public class KeyserverSyncAdapterService extends Service {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Log.d(Constants.TAG, "Keyserver sync: Updating {" + keyId + "}");
|
Log.d(Constants.TAG, "Keyserver sync: Updating {" + keyId + "}");
|
||||||
String fingerprint = KeyFormattingUtils
|
byte[] fingerprint = keyCursor.getBlob(INDEX_FINGERPRINT);
|
||||||
.convertFingerprintToHex(keyCursor.getBlob(INDEX_FINGERPRINT));
|
String hexKeyId = KeyFormattingUtils.convertKeyIdToHex(keyId);
|
||||||
String hexKeyId = KeyFormattingUtils
|
|
||||||
.convertKeyIdToHex(keyId);
|
|
||||||
// we aren't updating from keybase as of now
|
// we aren't updating from keybase as of now
|
||||||
keyList.add(new ParcelableKeyRing(fingerprint, hexKeyId, null, null));
|
keyList.add(new ParcelableKeyRing(fingerprint, hexKeyId, null, null));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ public class CreateSecurityTokenImportResetFragment
|
|||||||
private byte[] mTokenAid;
|
private byte[] mTokenAid;
|
||||||
private double mTokenVersion;
|
private double mTokenVersion;
|
||||||
private String mTokenUserId;
|
private String mTokenUserId;
|
||||||
private String mTokenFingerprint;
|
private byte[] mTokenFingerprint;
|
||||||
private TextView vSerNo;
|
private TextView vSerNo;
|
||||||
private TextView vUserId;
|
private TextView vUserId;
|
||||||
private TextView mNextButton;
|
private TextView mNextButton;
|
||||||
@@ -107,7 +107,7 @@ public class CreateSecurityTokenImportResetFragment
|
|||||||
|
|
||||||
byte[] fp = new byte[20];
|
byte[] fp = new byte[20];
|
||||||
ByteBuffer.wrap(fp).put(mTokenFingerprints, 0, 20);
|
ByteBuffer.wrap(fp).put(mTokenFingerprints, 0, 20);
|
||||||
mTokenFingerprint = KeyFormattingUtils.convertFingerprintToHex(fp);
|
mTokenFingerprint = fp;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,7 +261,7 @@ public class CreateSecurityTokenImportResetFragment
|
|||||||
|
|
||||||
byte[] fp = new byte[20];
|
byte[] fp = new byte[20];
|
||||||
ByteBuffer.wrap(fp).put(mTokenFingerprints, 0, 20);
|
ByteBuffer.wrap(fp).put(mTokenFingerprints, 0, 20);
|
||||||
mTokenFingerprint = KeyFormattingUtils.convertFingerprintToHex(fp);
|
mTokenFingerprint = fp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult.LogTyp
|
|||||||
import org.sufficientlysecure.keychain.operations.results.SingletonResult;
|
import org.sufficientlysecure.keychain.operations.results.SingletonResult;
|
||||||
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
|
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
|
||||||
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
|
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
|
||||||
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.util.IntentIntegratorSupportV4;
|
import org.sufficientlysecure.keychain.util.IntentIntegratorSupportV4;
|
||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
import org.sufficientlysecure.keychain.keyimport.ParcelableHkpKeyserver;
|
import org.sufficientlysecure.keychain.keyimport.ParcelableHkpKeyserver;
|
||||||
@@ -152,8 +153,8 @@ public class ImportKeysProxyActivity extends FragmentActivity
|
|||||||
returnResult(intent);
|
returnResult(intent);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final String fingerprint = uri.getEncodedSchemeSpecificPart().toLowerCase(Locale.ENGLISH);
|
final String fingerprintHex = uri.getEncodedSchemeSpecificPart().toLowerCase(Locale.ENGLISH);
|
||||||
if (!fingerprint.matches("[a-fA-F0-9]{40}")) {
|
if (!fingerprintHex.matches("[a-fA-F0-9]{40}")) {
|
||||||
SingletonResult result = new SingletonResult(
|
SingletonResult result = new SingletonResult(
|
||||||
SingletonResult.RESULT_ERROR, LogType.MSG_WRONG_QR_CODE_FP);
|
SingletonResult.RESULT_ERROR, LogType.MSG_WRONG_QR_CODE_FP);
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
@@ -161,6 +162,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
|
|||||||
returnResult(intent);
|
returnResult(intent);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
byte[] fingerprint = KeyFormattingUtils.convertFingerprintHexFingerprint(fingerprintHex);
|
||||||
|
|
||||||
if (ACTION_SCAN_WITH_RESULT.equals(action)) {
|
if (ACTION_SCAN_WITH_RESULT.equals(action)) {
|
||||||
Intent result = new Intent();
|
Intent result = new Intent();
|
||||||
@@ -168,7 +170,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
|
|||||||
setResult(RESULT_OK, result);
|
setResult(RESULT_OK, result);
|
||||||
finish();
|
finish();
|
||||||
} else {
|
} else {
|
||||||
importKeys(fingerprint);
|
importKeysFromFingerprint(fingerprint);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -196,7 +198,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
|
|||||||
startImportService(selectedEntries);
|
startImportService(selectedEntries);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void importKeys(String fingerprint) {
|
public void importKeysFromFingerprint(byte[] fingerprint) {
|
||||||
ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null, null);
|
ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null, null);
|
||||||
ArrayList<ParcelableKeyRing> selectedEntries = new ArrayList<>();
|
ArrayList<ParcelableKeyRing> selectedEntries = new ArrayList<>();
|
||||||
selectedEntries.add(keyEntry);
|
selectedEntries.add(keyEntry);
|
||||||
|
|||||||
@@ -502,8 +502,7 @@ public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
|
|||||||
ArrayList<ParcelableKeyRing> keyList = new ArrayList<>();
|
ArrayList<ParcelableKeyRing> keyList = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
byte[] blob = cursor.getBlob(0); //fingerprint column is 0
|
byte[] fingerprint = cursor.getBlob(0); //fingerprint column is 0
|
||||||
String fingerprint = KeyFormattingUtils.convertFingerprintToHex(blob);
|
|
||||||
ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null, null);
|
ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null, null);
|
||||||
keyList.add(keyEntry);
|
keyList.add(keyEntry);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1148,9 +1148,8 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
|
|||||||
mRefresh.startAnimation(mRotate);
|
mRefresh.startAnimation(mRotate);
|
||||||
|
|
||||||
byte[] blob = keyRepository.getCachedPublicKeyRing(dataUri).getFingerprint();
|
byte[] blob = keyRepository.getCachedPublicKeyRing(dataUri).getFingerprint();
|
||||||
String fingerprint = KeyFormattingUtils.convertFingerprintToHex(blob);
|
|
||||||
|
|
||||||
ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null, null);
|
ParcelableKeyRing keyEntry = new ParcelableKeyRing(blob, null, null, null);
|
||||||
ArrayList<ParcelableKeyRing> entries = new ArrayList<>();
|
ArrayList<ParcelableKeyRing> entries = new ArrayList<>();
|
||||||
entries.add(keyEntry);
|
entries.add(keyEntry);
|
||||||
mKeyList = entries;
|
mKeyList = entries;
|
||||||
|
|||||||
@@ -330,6 +330,13 @@ public class KeyFormattingUtils {
|
|||||||
return hexString;
|
return hexString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static byte[] convertFingerprintHexFingerprint(String fingerprintHex) {
|
||||||
|
if (fingerprintHex.length() != 40) {
|
||||||
|
throw new IllegalArgumentException("fingerprint must be 40 chars long!");
|
||||||
|
}
|
||||||
|
return Hex.decode(fingerprintHex);
|
||||||
|
}
|
||||||
|
|
||||||
public static long convertKeyIdHexToKeyId(String hex) {
|
public static long convertKeyIdHexToKeyId(String hex) {
|
||||||
return new BigInteger(hex.substring(2), 16).longValue();
|
return new BigInteger(hex.substring(2), 16).longValue();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,8 +57,7 @@ public class EmailKeyHelper {
|
|||||||
// Put them in a list and import
|
// Put them in a list and import
|
||||||
ArrayList<ParcelableKeyRing> keys = new ArrayList<>(entries.size());
|
ArrayList<ParcelableKeyRing> keys = new ArrayList<>(entries.size());
|
||||||
for (ImportKeysListEntry entry : entries) {
|
for (ImportKeysListEntry entry : entries) {
|
||||||
keys.add(new ParcelableKeyRing(entry.getFingerprintHex(), entry.getKeyIdHex(), null,
|
keys.add(new ParcelableKeyRing(entry.getFingerprint(), entry.getKeyIdHex(), null, null));
|
||||||
null));
|
|
||||||
}
|
}
|
||||||
mKeyList = keys;
|
mKeyList = keys;
|
||||||
mKeyserver = keyserver;
|
mKeyserver = keyserver;
|
||||||
|
|||||||
Reference in New Issue
Block a user