mirror of
https://github.com/moparisthebest/open-keychain
synced 2025-02-22 22:03:45 -05:00
remove notiion of nonce/identifier
This commit is contained in:
parent
b26e57ab19
commit
a9a5551d95
@ -770,8 +770,6 @@ public abstract class OperationResult implements Parcelable {
|
||||
MSG_LV_MATCH_ERROR (LogLevel.ERROR, R.string.msg_lv_match_error),
|
||||
MSG_LV_FP_OK (LogLevel.DEBUG, R.string.msg_lv_fp_ok),
|
||||
MSG_LV_FP_ERROR (LogLevel.ERROR, R.string.msg_lv_fp_error),
|
||||
MSG_LV_NONCE_OK (LogLevel.OK, R.string.msg_lv_nonce_ok),
|
||||
MSG_LV_NONCE_ERROR (LogLevel.ERROR, R.string.msg_lv_nonce_error),
|
||||
|
||||
MSG_LV_FETCH (LogLevel.DEBUG, R.string.msg_lv_fetch),
|
||||
MSG_LV_FETCH_REDIR (LogLevel.DEBUG, R.string.msg_lv_fetch_redir),
|
||||
|
@ -41,7 +41,7 @@ public class WrappedUserAttribute implements Serializable {
|
||||
|
||||
public static final int UAT_NONE = 0;
|
||||
public static final int UAT_IMAGE = UserAttributeSubpacketTags.IMAGE_ATTRIBUTE;
|
||||
public static final int UAT_LINKED_ID = 100;
|
||||
public static final int UAT_LINKED_ID = 101;
|
||||
|
||||
private PGPUserAttributeSubpacketVector mVector;
|
||||
|
||||
@ -82,7 +82,7 @@ public class WrappedUserAttribute implements Serializable {
|
||||
public static WrappedUserAttribute fromData (byte[] data) throws IOException {
|
||||
UserAttributeSubpacketInputStream in =
|
||||
new UserAttributeSubpacketInputStream(new ByteArrayInputStream(data));
|
||||
ArrayList<UserAttributeSubpacket> list = new ArrayList<UserAttributeSubpacket>();
|
||||
ArrayList<UserAttributeSubpacket> list = new ArrayList<>();
|
||||
while (in.available() > 0) {
|
||||
list.add(in.readPacket());
|
||||
}
|
||||
@ -126,6 +126,7 @@ public class WrappedUserAttribute implements Serializable {
|
||||
private void readObjectNoData() throws ObjectStreamException {
|
||||
}
|
||||
|
||||
@SuppressWarnings("SimplifiableIfStatement")
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (!WrappedUserAttribute.class.isInstance(o)) {
|
||||
|
@ -61,16 +61,16 @@ public abstract class LinkedCookieResource extends LinkedResource {
|
||||
return mSubUri;
|
||||
}
|
||||
|
||||
public static String generate (Context context, byte[] fingerprint, int nonce) {
|
||||
return String.format("[Verifying my PGP key: openpgp4fpr:%s#%08x]",
|
||||
KeyFormattingUtils.convertFingerprintToHex(fingerprint), nonce);
|
||||
public static String generate (Context context, byte[] fingerprint) {
|
||||
return String.format("[Verifying my PGP key: openpgp4fpr:%s]",
|
||||
KeyFormattingUtils.convertFingerprintToHex(fingerprint));
|
||||
}
|
||||
|
||||
public static String generatePreview () {
|
||||
return "[Verifying my PGP key: openpgp4fpr:0x…]";
|
||||
}
|
||||
|
||||
public LinkedVerifyResult verify(byte[] fingerprint, int nonce) {
|
||||
public LinkedVerifyResult verify(byte[] fingerprint) {
|
||||
|
||||
OperationLog log = new OperationLog();
|
||||
log.add(LogType.MSG_LV, 0);
|
||||
@ -84,7 +84,7 @@ public abstract class LinkedCookieResource extends LinkedResource {
|
||||
|
||||
Log.d(Constants.TAG, "Resource data: '" + res + "'");
|
||||
|
||||
return verifyString(log, 1, res, nonce, fingerprint);
|
||||
return verifyString(log, 1, res, fingerprint);
|
||||
|
||||
}
|
||||
|
||||
@ -96,7 +96,7 @@ public abstract class LinkedCookieResource extends LinkedResource {
|
||||
|
||||
protected LinkedVerifyResult verifyString (OperationLog log, int indent,
|
||||
String res,
|
||||
int nonce, byte[] fingerprint) {
|
||||
byte[] fingerprint) {
|
||||
|
||||
log.add(LogType.MSG_LV_MATCH, indent);
|
||||
Matcher match = matchResource(log, indent+1, res);
|
||||
@ -106,27 +106,13 @@ public abstract class LinkedCookieResource extends LinkedResource {
|
||||
}
|
||||
|
||||
String candidateFp = match.group(1).toLowerCase();
|
||||
try {
|
||||
int nonceCandidate = (int) Long.parseLong(match.group(2).toLowerCase(), 16);
|
||||
|
||||
if (nonce != nonceCandidate) {
|
||||
log.add(LogType.MSG_LV_NONCE_ERROR, indent);
|
||||
return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log);
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
log.add(LogType.MSG_LV_NONCE_ERROR, indent);
|
||||
return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log);
|
||||
}
|
||||
|
||||
String fp = KeyFormattingUtils.convertFingerprintToHex(fingerprint);
|
||||
|
||||
if (!fp.equals(candidateFp)) {
|
||||
log.add(LogType.MSG_LV_FP_ERROR, indent);
|
||||
return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log);
|
||||
}
|
||||
log.add(LogType.MSG_LV_FP_OK, indent);
|
||||
|
||||
log.add(LogType.MSG_LV_NONCE_OK, indent);
|
||||
return new LinkedVerifyResult(LinkedVerifyResult.RESULT_OK, log);
|
||||
|
||||
}
|
||||
|
@ -8,8 +8,6 @@ import org.sufficientlysecure.keychain.util.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.DrawableRes;
|
||||
@ -19,8 +17,8 @@ public class LinkedIdentity extends RawLinkedIdentity {
|
||||
|
||||
public final LinkedResource mResource;
|
||||
|
||||
protected LinkedIdentity(int nonce, URI uri, LinkedResource resource) {
|
||||
super(nonce, uri);
|
||||
protected LinkedIdentity(URI uri, LinkedResource resource) {
|
||||
super(uri);
|
||||
if (resource == null) {
|
||||
throw new AssertionError("resource must not be null in a LinkedIdentity!");
|
||||
}
|
||||
@ -42,29 +40,27 @@ public class LinkedIdentity extends RawLinkedIdentity {
|
||||
* subpacket can not be parsed as a valid linked id.
|
||||
*/
|
||||
static RawLinkedIdentity fromAttributeSubpacket(UserAttributeSubpacket subpacket) {
|
||||
if (subpacket.getType() != 100) {
|
||||
if (subpacket.getType() != 101) {
|
||||
return null;
|
||||
}
|
||||
|
||||
byte[] data = subpacket.getData();
|
||||
|
||||
return fromSubpacketData(data);
|
||||
|
||||
}
|
||||
|
||||
static RawLinkedIdentity fromSubpacketData(byte[] data) {
|
||||
|
||||
try {
|
||||
int nonce = ByteBuffer.wrap(data).getInt();
|
||||
String uriStr = Strings.fromUTF8ByteArray(Arrays.copyOfRange(data, 4, data.length));
|
||||
String uriStr = Strings.fromUTF8ByteArray(data);
|
||||
URI uri = URI.create(uriStr);
|
||||
|
||||
LinkedResource res = LinkedResource.fromUri(uri);
|
||||
if (res == null) {
|
||||
return new RawLinkedIdentity(nonce, uri);
|
||||
return new RawLinkedIdentity(uri);
|
||||
}
|
||||
|
||||
return new LinkedIdentity(nonce, uri, res);
|
||||
return new LinkedIdentity(uri, res);
|
||||
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.e(Constants.TAG, "error parsing uri in (suspected) linked id packet");
|
||||
@ -72,8 +68,8 @@ public class LinkedIdentity extends RawLinkedIdentity {
|
||||
}
|
||||
}
|
||||
|
||||
public static RawLinkedIdentity fromResource (LinkedCookieResource res, int nonce) {
|
||||
return new RawLinkedIdentity(nonce, res.toUri());
|
||||
public static RawLinkedIdentity fromResource (LinkedCookieResource res) {
|
||||
return new RawLinkedIdentity(res.toUri());
|
||||
}
|
||||
|
||||
|
||||
|
@ -23,7 +23,7 @@ public abstract class LinkedResource {
|
||||
protected final HashMap<String,String> mParams;
|
||||
|
||||
static Pattern magicPattern =
|
||||
Pattern.compile("\\[Verifying my PGP key: openpgp4fpr:([a-zA-Z0-9]+)#([a-zA-Z0-9]+)\\]");
|
||||
Pattern.compile("\\[Verifying my PGP key: openpgp4fpr:([a-zA-Z0-9]+)]");
|
||||
|
||||
protected LinkedResource(Set<String> flags, HashMap<String, String> params, URI uri) {
|
||||
mFlags = flags;
|
||||
@ -31,8 +31,6 @@ public abstract class LinkedResource {
|
||||
mSubUri = uri;
|
||||
}
|
||||
|
||||
public abstract URI toUri();
|
||||
|
||||
public Set<String> getFlags () {
|
||||
return new HashSet<>(mFlags);
|
||||
}
|
||||
|
@ -5,48 +5,27 @@ import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute;
|
||||
|
||||
import java.net.URI;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.DrawableRes;
|
||||
|
||||
/** The RawLinkedIdentity contains raw parsed data from a Linked Identity subpacket. */
|
||||
public class RawLinkedIdentity {
|
||||
|
||||
public final int mNonce;
|
||||
public final URI mUri;
|
||||
|
||||
protected RawLinkedIdentity(int nonce, URI uri) {
|
||||
mNonce = nonce;
|
||||
protected RawLinkedIdentity(URI uri) {
|
||||
mUri = uri;
|
||||
}
|
||||
|
||||
public byte[] getEncoded() {
|
||||
byte[] uriData = Strings.toUTF8ByteArray(mUri.toASCIIString());
|
||||
|
||||
ByteBuffer buf = ByteBuffer.allocate(4 + uriData.length);
|
||||
|
||||
buf.putInt(mNonce);
|
||||
buf.put(uriData);
|
||||
|
||||
return buf.array();
|
||||
return Strings.toUTF8ByteArray(mUri.toASCIIString());
|
||||
}
|
||||
|
||||
public WrappedUserAttribute toUserAttribute () {
|
||||
return WrappedUserAttribute.fromSubpacket(WrappedUserAttribute.UAT_LINKED_ID, getEncoded());
|
||||
}
|
||||
|
||||
public static int generateNonce() {
|
||||
// TODO make this actually random
|
||||
// byte[] data = new byte[4];
|
||||
// new SecureRandom().nextBytes(data);
|
||||
// return Hex.toHexString(data);
|
||||
|
||||
// debug for now
|
||||
return 0x8a9bad32;
|
||||
}
|
||||
|
||||
public @DrawableRes int getDisplayIcon() {
|
||||
return R.drawable.ic_warning_grey_24dp;
|
||||
}
|
||||
|
@ -41,10 +41,10 @@ public class DnsResource extends LinkedCookieResource {
|
||||
mType = type;
|
||||
}
|
||||
|
||||
public static String generateText (Context context, byte[] fingerprint, int nonce) {
|
||||
public static String generateText (Context context, byte[] fingerprint) {
|
||||
|
||||
return String.format("pgpid+cookie=%s;%08x",
|
||||
KeyFormattingUtils.convertFingerprintToHex(fingerprint), nonce);
|
||||
return String.format("pgpid+cookie=%s",
|
||||
KeyFormattingUtils.convertFingerprintToHex(fingerprint));
|
||||
|
||||
}
|
||||
|
||||
|
@ -31,8 +31,8 @@ public class GenericHttpsResource extends LinkedCookieResource {
|
||||
super(flags, params, uri);
|
||||
}
|
||||
|
||||
public static String generateText (Context context, byte[] fingerprint, int nonce) {
|
||||
String cookie = LinkedCookieResource.generate(context, fingerprint, nonce);
|
||||
public static String generateText (Context context, byte[] fingerprint) {
|
||||
String cookie = LinkedCookieResource.generate(context, fingerprint);
|
||||
|
||||
return String.format(context.getResources().getString(R.string.linked_id_generic_text),
|
||||
cookie, "0x" + KeyFormattingUtils.convertFingerprintToHex(fingerprint).substring(24));
|
||||
|
@ -72,11 +72,6 @@ public class TwitterResource extends LinkedCookieResource {
|
||||
|
||||
}
|
||||
|
||||
public static String generateText (Context context, byte[] fingerprint, int nonce) {
|
||||
// nothing special here for now, might change this later
|
||||
return LinkedCookieResource.generate(context, fingerprint, nonce);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String fetchResource(OperationLog log, int indent) {
|
||||
|
||||
|
@ -31,6 +31,7 @@ import android.net.Uri;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import org.sufficientlysecure.keychain.Constants;
|
||||
import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiAccounts;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiAllowedKeys;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiApps;
|
||||
@ -508,7 +509,8 @@ public class KeychainProvider extends ContentProvider {
|
||||
+ ", " + Tables.USER_PACKETS + "." + UserPackets.RANK;
|
||||
|
||||
if (match == KEY_RING_LINKED_IDS) {
|
||||
qb.appendWhere(Tables.USER_PACKETS + "." + UserPackets.TYPE + " = 100");
|
||||
qb.appendWhere(Tables.USER_PACKETS + "." + UserPackets.TYPE + " = "
|
||||
+ WrappedUserAttribute.UAT_LINKED_ID);
|
||||
} else {
|
||||
qb.appendWhere(Tables.USER_PACKETS + "." + UserPackets.TYPE + " IS NULL");
|
||||
}
|
||||
|
@ -73,12 +73,11 @@ public class LinkedIdCreateDnsStep1Fragment extends Fragment {
|
||||
return;
|
||||
}
|
||||
|
||||
int proofNonce = RawLinkedIdentity.generateNonce();
|
||||
String proofText = DnsResource.generateText(getActivity(),
|
||||
mLinkedIdWizard.mFingerprint, proofNonce);
|
||||
mLinkedIdWizard.mFingerprint);
|
||||
|
||||
LinkedIdCreateDnsStep2Fragment frag =
|
||||
LinkedIdCreateDnsStep2Fragment.newInstance(uri, proofNonce, proofText);
|
||||
LinkedIdCreateDnsStep2Fragment.newInstance(uri, proofText);
|
||||
|
||||
mLinkedIdWizard.loadFragment(null, frag, LinkedIdWizard.FRAG_ACTION_TO_RIGHT);
|
||||
|
||||
|
@ -52,12 +52,11 @@ public class LinkedIdCreateDnsStep2Fragment extends LinkedIdCreateFinalFragment
|
||||
String mResourceString;
|
||||
|
||||
public static LinkedIdCreateDnsStep2Fragment newInstance
|
||||
(String uri, int proofNonce, String proofText) {
|
||||
(String uri, String proofText) {
|
||||
|
||||
LinkedIdCreateDnsStep2Fragment frag = new LinkedIdCreateDnsStep2Fragment();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(ARG_NONCE, proofNonce);
|
||||
args.putString(DOMAIN, uri);
|
||||
args.putString(TEXT, proofText);
|
||||
frag.setArguments(args);
|
||||
|
@ -30,7 +30,6 @@ import org.sufficientlysecure.keychain.ui.util.Notify;
|
||||
|
||||
public abstract class LinkedIdCreateFinalFragment extends Fragment {
|
||||
|
||||
public static final String ARG_NONCE = "nonce";
|
||||
protected static final int REQUEST_CODE_PASSPHRASE = 0x00007008;
|
||||
|
||||
protected LinkedIdWizard mLinkedIdWizard;
|
||||
@ -38,7 +37,6 @@ public abstract class LinkedIdCreateFinalFragment extends Fragment {
|
||||
private ImageView mVerifyImage;
|
||||
private View mVerifyProgress;
|
||||
private TextView mVerifyStatus;
|
||||
private int mResourceNonce;
|
||||
|
||||
// This is a resource, set AFTER it has been verified
|
||||
LinkedCookieResource mVerifiedResource = null;
|
||||
@ -48,8 +46,6 @@ public abstract class LinkedIdCreateFinalFragment extends Fragment {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
mLinkedIdWizard = (LinkedIdWizard) getActivity();
|
||||
|
||||
mResourceNonce = getArguments().getInt(ARG_NONCE);
|
||||
}
|
||||
|
||||
protected abstract View newView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
|
||||
@ -121,7 +117,7 @@ public abstract class LinkedIdCreateFinalFragment extends Fragment {
|
||||
@Override
|
||||
protected LinkedVerifyResult doInBackground(Void... params) {
|
||||
LinkedCookieResource resource = getResource();
|
||||
LinkedVerifyResult result = resource.verify(mLinkedIdWizard.mFingerprint, mResourceNonce);
|
||||
LinkedVerifyResult result = resource.verify(mLinkedIdWizard.mFingerprint);
|
||||
if (result.success()) {
|
||||
mVerifiedResource = resource;
|
||||
}
|
||||
@ -195,7 +191,7 @@ public abstract class LinkedIdCreateFinalFragment extends Fragment {
|
||||
new SaveKeyringParcel(mLinkedIdWizard.mMasterKeyId, mLinkedIdWizard.mFingerprint);
|
||||
|
||||
WrappedUserAttribute ua =
|
||||
LinkedIdentity.fromResource(mVerifiedResource, mResourceNonce).toUserAttribute();
|
||||
LinkedIdentity.fromResource(mVerifiedResource).toUserAttribute();
|
||||
|
||||
skp.mAddUserAttribute.add(ua);
|
||||
|
||||
|
@ -38,9 +38,6 @@ public class LinkedIdCreateHttpsStep1Fragment extends Fragment {
|
||||
|
||||
EditText mEditUri;
|
||||
|
||||
/**
|
||||
* Creates new instance of this fragment
|
||||
*/
|
||||
public static LinkedIdCreateHttpsStep1Fragment newInstance() {
|
||||
LinkedIdCreateHttpsStep1Fragment frag = new LinkedIdCreateHttpsStep1Fragment();
|
||||
|
||||
@ -72,12 +69,11 @@ public class LinkedIdCreateHttpsStep1Fragment extends Fragment {
|
||||
return;
|
||||
}
|
||||
|
||||
int proofNonce = RawLinkedIdentity.generateNonce();
|
||||
String proofText = GenericHttpsResource.generateText(getActivity(),
|
||||
mLinkedIdWizard.mFingerprint, proofNonce);
|
||||
mLinkedIdWizard.mFingerprint);
|
||||
|
||||
LinkedIdCreateHttpsStep2Fragment frag =
|
||||
LinkedIdCreateHttpsStep2Fragment.newInstance(uri, proofNonce, proofText);
|
||||
LinkedIdCreateHttpsStep2Fragment.newInstance(uri, proofText);
|
||||
|
||||
mLinkedIdWizard.loadFragment(null, frag, LinkedIdWizard.FRAG_ACTION_TO_RIGHT);
|
||||
|
||||
|
@ -53,12 +53,11 @@ public class LinkedIdCreateHttpsStep2Fragment extends LinkedIdCreateFinalFragmen
|
||||
String mResourceString;
|
||||
|
||||
public static LinkedIdCreateHttpsStep2Fragment newInstance
|
||||
(String uri, int proofNonce, String proofText) {
|
||||
(String uri, String proofText) {
|
||||
|
||||
LinkedIdCreateHttpsStep2Fragment frag = new LinkedIdCreateHttpsStep2Fragment();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(ARG_NONCE, proofNonce);
|
||||
args.putString(ARG_URI, uri);
|
||||
args.putString(ARG_TEXT, proofText);
|
||||
frag.setArguments(args);
|
||||
|
@ -29,8 +29,6 @@ import android.widget.EditText;
|
||||
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
import org.sufficientlysecure.keychain.pgp.linked.LinkedCookieResource;
|
||||
import org.sufficientlysecure.keychain.pgp.linked.LinkedIdentity;
|
||||
import org.sufficientlysecure.keychain.pgp.linked.RawLinkedIdentity;
|
||||
import org.sufficientlysecure.keychain.pgp.linked.resources.TwitterResource;
|
||||
import org.sufficientlysecure.keychain.ui.util.Notify;
|
||||
|
||||
@ -44,18 +42,14 @@ public class LinkedIdCreateTwitterStep2Fragment extends LinkedIdCreateFinalFragm
|
||||
|
||||
String mResourceHandle;
|
||||
String mResourceString;
|
||||
private int mNonce;
|
||||
|
||||
public static LinkedIdCreateTwitterStep2Fragment newInstance
|
||||
(String handle) {
|
||||
|
||||
LinkedIdCreateTwitterStep2Fragment frag = new LinkedIdCreateTwitterStep2Fragment();
|
||||
|
||||
int proofNonce = RawLinkedIdentity.generateNonce();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putString(ARG_HANDLE, handle);
|
||||
args.putInt(ARG_NONCE, proofNonce);
|
||||
frag.setArguments(args);
|
||||
|
||||
return frag;
|
||||
@ -65,9 +59,8 @@ public class LinkedIdCreateTwitterStep2Fragment extends LinkedIdCreateFinalFragm
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
mNonce = LinkedIdentity.generateNonce();
|
||||
mResourceString =
|
||||
TwitterResource.generate(getActivity(), mLinkedIdWizard.mFingerprint, mNonce);
|
||||
TwitterResource.generate(getActivity(), mLinkedIdWizard.mFingerprint);
|
||||
|
||||
mResourceHandle = getArguments().getString(ARG_HANDLE);
|
||||
|
||||
|
@ -4,7 +4,6 @@ import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
@ -24,7 +23,6 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.ViewAnimator;
|
||||
|
||||
@ -419,7 +417,7 @@ public class LinkedIdViewFragment extends Fragment implements
|
||||
@Override
|
||||
protected LinkedVerifyResult doInBackground(Void... params) {
|
||||
long timer = System.currentTimeMillis();
|
||||
LinkedVerifyResult result = mLinkedResource.verify(mFingerprint, mLinkedId.mNonce);
|
||||
LinkedVerifyResult result = mLinkedResource.verify(mFingerprint);
|
||||
|
||||
// ux flow: this operation should take at last a second
|
||||
timer = System.currentTimeMillis() -timer;
|
||||
|
@ -1168,8 +1168,6 @@
|
||||
<string name="msg_lv_match_error">"No cookie found in resource!"</string>
|
||||
<string name="msg_lv_fp_ok">"Fingerprint ok."</string>
|
||||
<string name="msg_lv_fp_error">"Fingerprint mismatch!"</string>
|
||||
<string name="msg_lv_nonce_ok">"Link verified!"</string>
|
||||
<string name="msg_lv_nonce_error">"Nonce mismatch!"</string>
|
||||
|
||||
<string name="msg_lv_fetch">"Fetching URI '%s'"</string>
|
||||
<string name="msg_lv_fetch_redir">"Following redirect to '%s'"</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user