aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/SmartcardDevice.java
diff options
context:
space:
mode:
authorNikita Mikhailov <nikita.s.mikhailov@gmail.com>2016-04-08 00:41:53 +0600
committerNikita Mikhailov <nikita.s.mikhailov@gmail.com>2016-04-14 22:48:01 +0600
commitb5eb6468fecfc16ea041eb0f4bf48c37ec2e81f2 (patch)
treed9ee439e49649dfdbc81d61431bca22e48d85c34 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/SmartcardDevice.java
parent3798249570e97861793f5d0ebc695d94e8d5ddcd (diff)
downloadopen-keychain-b5eb6468fecfc16ea041eb0f4bf48c37ec2e81f2.tar.gz
open-keychain-b5eb6468fecfc16ea041eb0f4bf48c37ec2e81f2.tar.bz2
open-keychain-b5eb6468fecfc16ea041eb0f4bf48c37ec2e81f2.zip
OTG: Add support for persistent usb connection
No need to reinsert token on each operation
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/SmartcardDevice.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/SmartcardDevice.java49
1 files changed, 37 insertions, 12 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/SmartcardDevice.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/SmartcardDevice.java
index b86c3cf4c..4420c0c88 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/SmartcardDevice.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/smartcard/SmartcardDevice.java
@@ -32,7 +32,32 @@ public class SmartcardDevice {
private boolean mPw3Validated;
private boolean mTagHandlingEnabled;
- public SmartcardDevice() {
+ protected SmartcardDevice() {
+ }
+
+ public static SmartcardDevice getInstance() {
+ return LazyHolder.mSmartcardDevice;
+ }
+
+ // METHOD UPDATED [OK]
+ private String getHolderName(String name) {
+ try {
+ String slength;
+ int ilength;
+ name = name.substring(6);
+ slength = name.substring(0, 2);
+ ilength = Integer.parseInt(slength, 16) * 2;
+ name = name.substring(2, ilength + 2);
+ name = (new String(Hex.decode(name))).replace('<', ' ');
+ return name;
+ } catch (IndexOutOfBoundsException e) {
+ // try-catch for https://github.com/FluffyKaon/OpenPGP-Card
+ // Note: This should not happen, but happens with
+ // https://github.com/FluffyKaon/OpenPGP-Card, thus return an empty string for now!
+
+ Log.e(Constants.TAG, "Couldn't get holder name, returning empty string!", e);
+ return "";
+ }
}
private static String getHex(byte[] raw) {
@@ -541,15 +566,8 @@ public class SmartcardDevice {
return Hex.decode(signature);
}
- private String getHolderName(String name) {
- String slength;
- int ilength;
- name = name.substring(6);
- slength = name.substring(0, 2);
- ilength = Integer.parseInt(slength, 16) * 2;
- name = name.substring(2, ilength + 2);
- name = (new String(Hex.decode(name))).replace('<', ' ');
- return (name);
+ public boolean isConnected() {
+ return mTransport != null && mTransport.isConnected();
}
/**
@@ -560,8 +578,8 @@ public class SmartcardDevice {
return getHex(mTransport.sendAndReceive(Hex.decode(apdu)));
}
- public boolean isConnected() {
- return mTransport.isConnected();
+ public Transport getTransport() {
+ return mTransport;
}
// NEW METHOD [OK]
@@ -702,6 +720,13 @@ public class SmartcardDevice {
public void setTransport(Transport mTransport) {
this.mTransport = mTransport;
+ }
+
+ public boolean allowPersistentConnection() {
+ return mTransport != null && mTransport.allowPersistentConnection();
+ }
+ private static class LazyHolder {
+ private static final SmartcardDevice mSmartcardDevice = new SmartcardDevice();
}
}