token-import: use entire fingerprint for promote operation
This commit is contained in:
@@ -18,6 +18,8 @@
|
||||
package org.sufficientlysecure.keychain.ui.token;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
import org.sufficientlysecure.keychain.operations.results.OperationResult;
|
||||
@@ -79,7 +81,7 @@ class ManageSecurityTokenContract {
|
||||
void hideAction();
|
||||
|
||||
void operationImportKey(byte[] importKeyData);
|
||||
void operationPromote(long masterKeyId, byte[] cardAid, long[] subKeyIds);
|
||||
void operationPromote(long masterKeyId, byte[] cardAid, List<byte[]> fingerprints);
|
||||
void operationResetSecurityToken();
|
||||
void operationChangePinSecurityToken(String adminPin, String newPin);
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
package org.sufficientlysecure.keychain.ui.token;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
@@ -277,12 +279,13 @@ public class ManageSecurityTokenFragment extends Fragment implements ManageSecur
|
||||
}
|
||||
|
||||
@Override
|
||||
public void operationPromote(long masterKeyId, byte[] cardAid, long[] subkeys) {
|
||||
public void operationPromote(long masterKeyId, byte[] cardAid, List<byte[]> fingerprints) {
|
||||
if (currentImportKeyringParcel != null) {
|
||||
throw new IllegalStateException("Cannot trigger import operation twice!");
|
||||
}
|
||||
|
||||
currentPromoteKeyringParcel = PromoteKeyringParcel.createPromoteKeyringParcel(masterKeyId, cardAid, subkeys);
|
||||
currentPromoteKeyringParcel = PromoteKeyringParcel.createPromoteKeyringParcel(
|
||||
masterKeyId, cardAid, fingerprints);
|
||||
cryptoPromoteOperationHelper.setOperationMinimumDelay(1000L);
|
||||
cryptoPromoteOperationHelper.cryptoOperation();
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@ import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.KeyRetr
|
||||
import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.KeyserverRetrievalLoader;
|
||||
import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.LocalKeyLookupLoader;
|
||||
import org.sufficientlysecure.keychain.ui.token.PublicKeyRetrievalLoader.UriKeyRetrievalLoader;
|
||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||
import org.sufficientlysecure.keychain.ui.util.PermissionsUtil;
|
||||
|
||||
|
||||
@@ -207,13 +206,13 @@ class ManageSecurityTokenPresenter implements ManageSecurityTokenMvpPresenter {
|
||||
public Loader<KeyRetrievalResult> onCreateLoader(int id, Bundle args) {
|
||||
switch (id) {
|
||||
case LOADER_LOCAL:
|
||||
return new LocalKeyLookupLoader(context, tokenInfo.getAllFingerprints());
|
||||
return new LocalKeyLookupLoader(context, tokenInfo.getFingerprints());
|
||||
case LOADER_URI:
|
||||
return new UriKeyRetrievalLoader(context, tokenInfo.getUrl(), tokenInfo.getAllFingerprints());
|
||||
return new UriKeyRetrievalLoader(context, tokenInfo.getUrl(), tokenInfo.getFingerprints());
|
||||
case LOADER_KEYSERVER:
|
||||
return new KeyserverRetrievalLoader(context, tokenInfo.getAllFingerprints());
|
||||
return new KeyserverRetrievalLoader(context, tokenInfo.getFingerprints());
|
||||
case LOADER_CONTENT_URI:
|
||||
return new ContentUriRetrievalLoader(context, tokenInfo.getAllFingerprints(),
|
||||
return new ContentUriRetrievalLoader(context, tokenInfo.getFingerprints(),
|
||||
args.<Uri>getParcelable(ARG_CONTENT_URI));
|
||||
}
|
||||
throw new IllegalArgumentException("called with unknown loader id!");
|
||||
@@ -286,10 +285,7 @@ class ManageSecurityTokenPresenter implements ManageSecurityTokenMvpPresenter {
|
||||
}
|
||||
|
||||
private void promoteKeyWithTokenInfo(Long masterKeyId) {
|
||||
long signKeyId = KeyFormattingUtils.getKeyIdFromFingerprint(tokenInfo.getFingerprintSign());
|
||||
long decryptKeyId = KeyFormattingUtils.getKeyIdFromFingerprint(tokenInfo.getFingerprintDecrypt());
|
||||
long authKeyId = KeyFormattingUtils.getKeyIdFromFingerprint(tokenInfo.getFingerprintAuth());
|
||||
view.operationPromote(masterKeyId, tokenInfo.getAid(), new long[] { signKeyId, decryptKeyId, authKeyId });
|
||||
view.operationPromote(masterKeyId, tokenInfo.getAid(), tokenInfo.getFingerprints());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.ui.token;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.List;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
@@ -64,10 +65,10 @@ public abstract class PublicKeyRetrievalLoader extends AsyncTaskLoader<KeyRetrie
|
||||
|
||||
private KeyRetrievalResult cachedResult;
|
||||
|
||||
protected final byte[][] fingerprints;
|
||||
protected final List<byte[]> fingerprints;
|
||||
|
||||
|
||||
private PublicKeyRetrievalLoader(Context context, byte[][] fingerprints) {
|
||||
private PublicKeyRetrievalLoader(Context context, List<byte[]> fingerprints) {
|
||||
super(context);
|
||||
|
||||
this.fingerprints = fingerprints;
|
||||
@@ -94,7 +95,7 @@ public abstract class PublicKeyRetrievalLoader extends AsyncTaskLoader<KeyRetrie
|
||||
static class LocalKeyLookupLoader extends PublicKeyRetrievalLoader {
|
||||
private final KeyRepository keyRepository;
|
||||
|
||||
LocalKeyLookupLoader(Context context, byte[][] fingerprints) {
|
||||
LocalKeyLookupLoader(Context context, List<byte[]> fingerprints) {
|
||||
super(context, fingerprints);
|
||||
|
||||
this.keyRepository = KeyRepository.createDatabaseInteractor(context);
|
||||
@@ -158,7 +159,7 @@ public abstract class PublicKeyRetrievalLoader extends AsyncTaskLoader<KeyRetrie
|
||||
static class UriKeyRetrievalLoader extends PublicKeyRetrievalLoader {
|
||||
private final String tokenUri;
|
||||
|
||||
UriKeyRetrievalLoader(Context context, String tokenUri, byte[][] fingerprints) {
|
||||
UriKeyRetrievalLoader(Context context, String tokenUri, List<byte[]> fingerprints) {
|
||||
super(context, fingerprints);
|
||||
|
||||
this.tokenUri = tokenUri;
|
||||
@@ -211,7 +212,7 @@ public abstract class PublicKeyRetrievalLoader extends AsyncTaskLoader<KeyRetrie
|
||||
}
|
||||
|
||||
static class KeyserverRetrievalLoader extends PublicKeyRetrievalLoader {
|
||||
KeyserverRetrievalLoader(Context context, byte[][] fingerprints) {
|
||||
KeyserverRetrievalLoader(Context context, List<byte[]> fingerprints) {
|
||||
super(context, fingerprints);
|
||||
}
|
||||
|
||||
@@ -228,7 +229,7 @@ public abstract class PublicKeyRetrievalLoader extends AsyncTaskLoader<KeyRetrie
|
||||
log.add(LogType.MSG_RET_KS_START, 0);
|
||||
|
||||
String keyString = keyserverClient.get(
|
||||
"0x" + KeyFormattingUtils.convertFingerprintToHex(fingerprints[0]), parcelableProxy);
|
||||
"0x" + KeyFormattingUtils.convertFingerprintToHex(fingerprints.get(0)), parcelableProxy);
|
||||
UncachedKeyRing keyRing = UncachedKeyRing.decodeFromData(keyString.getBytes());
|
||||
|
||||
if (!keyRing.containsKeyWithAnyFingerprint(fingerprints)) {
|
||||
@@ -255,7 +256,7 @@ public abstract class PublicKeyRetrievalLoader extends AsyncTaskLoader<KeyRetrie
|
||||
private final ContentResolver contentResolver;
|
||||
private final Uri uri;
|
||||
|
||||
ContentUriRetrievalLoader(Context context, byte[][] fingerprints, Uri uri) {
|
||||
ContentUriRetrievalLoader(Context context, List<byte[]> fingerprints, Uri uri) {
|
||||
super(context, fingerprints);
|
||||
|
||||
this.uri = uri;
|
||||
|
||||
Reference in New Issue
Block a user