aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/javacard/CachingBaseJavacardDevice.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/javacard/CachingBaseJavacardDevice.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/javacard/CachingBaseJavacardDevice.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/javacard/CachingBaseJavacardDevice.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/javacard/CachingBaseJavacardDevice.java
new file mode 100644
index 000000000..5ad157de1
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/javacard/CachingBaseJavacardDevice.java
@@ -0,0 +1,46 @@
+package org.sufficientlysecure.keychain.javacard;
+
+import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey;
+import org.sufficientlysecure.keychain.util.Passphrase;
+
+import java.io.IOException;
+
+public class CachingBaseJavacardDevice extends BaseJavacardDevice {
+ private byte[] mFingerprintsCache;
+ private String mUserIdCache;
+ private byte[] mAidCache;
+
+ public CachingBaseJavacardDevice(final Transport mTransport) {
+ super(mTransport);
+ }
+
+ @Override
+ public byte[] getFingerprints() throws IOException {
+ if (mFingerprintsCache == null) {
+ mFingerprintsCache = super.getFingerprints();
+ }
+ return mFingerprintsCache;
+ }
+
+ @Override
+ public String getUserId() throws IOException {
+ if (mUserIdCache == null) {
+ mUserIdCache = super.getUserId();
+ }
+ return mUserIdCache;
+ }
+
+ @Override
+ public byte[] getAid() throws IOException {
+ if (mAidCache == null) {
+ mAidCache = super.getAid();
+ }
+ return mAidCache;
+ }
+
+ @Override
+ public void changeKey(final CanonicalizedSecretKey secretKey, final Passphrase passphrase) throws IOException {
+ super.changeKey(secretKey, passphrase);
+ mFingerprintsCache = null;
+ }
+}