summaryrefslogtreecommitdiff
path: root/smcc/src/main/java/at/gv/egiz/smcc/DNIeCIOCertificateDirectory.java
diff options
context:
space:
mode:
authortzefferer <tzefferer@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4>2010-11-16 17:28:33 +0000
committertzefferer <tzefferer@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4>2010-11-16 17:28:33 +0000
commit970aa9060a3c1c022dfe04cfeb199a6b790b7635 (patch)
tree1404d8da638e839be3d7fed38b9229aba8a76e05 /smcc/src/main/java/at/gv/egiz/smcc/DNIeCIOCertificateDirectory.java
parentdc1fbf4259cd7f997f782b3fdac37015564ab96f (diff)
downloadmocca-970aa9060a3c1c022dfe04cfeb199a6b790b7635.tar.gz
mocca-970aa9060a3c1c022dfe04cfeb199a6b790b7635.tar.bz2
mocca-970aa9060a3c1c022dfe04cfeb199a6b790b7635.zip
git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@837 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
Diffstat (limited to 'smcc/src/main/java/at/gv/egiz/smcc/DNIeCIOCertificateDirectory.java')
-rw-r--r--smcc/src/main/java/at/gv/egiz/smcc/DNIeCIOCertificateDirectory.java58
1 files changed, 58 insertions, 0 deletions
diff --git a/smcc/src/main/java/at/gv/egiz/smcc/DNIeCIOCertificateDirectory.java b/smcc/src/main/java/at/gv/egiz/smcc/DNIeCIOCertificateDirectory.java
new file mode 100644
index 00000000..1c16797f
--- /dev/null
+++ b/smcc/src/main/java/at/gv/egiz/smcc/DNIeCIOCertificateDirectory.java
@@ -0,0 +1,58 @@
+package at.gv.egiz.smcc;
+
+import java.io.IOException;
+
+import javax.smartcardio.CardChannel;
+import javax.smartcardio.CardException;
+import javax.smartcardio.CommandAPDU;
+import javax.smartcardio.ResponseAPDU;
+
+import at.gv.egiz.smcc.util.ISO7816Utils;
+import at.gv.egiz.smcc.util.SMCCHelper;
+import at.gv.egiz.smcc.util.TLVSequence;
+
+public class DNIeCIOCertificateDirectory extends CIOCertificateDirectory {
+
+ protected static final boolean RETRIEVE_AUTH_ID_FROM_ASN1 = Boolean.FALSE;
+
+ public DNIeCIOCertificateDirectory(byte[] fid) {
+
+ super(fid);
+ }
+
+ @Override
+ public void selectAndRead(CardChannel channel) throws CardException, SignatureCardException, IOException {
+
+ CommandAPDU cmd = new CommandAPDU(0x00, 0xA4, 0x00, 0x00, fid, 256);
+ ResponseAPDU resp = channel.transmit(cmd);
+
+ if(resp.getSW() != 0x9000) {
+
+ throw new CardException("Error selecting DNIeCIOCertificateDeirectory: " + Integer.toHexString(resp.getSW()));
+ }
+
+ byte[] fcx = new TLVSequence(resp.getBytes()).getValue(ISO7816Utils.TAG_FCI);
+ byte[] fd = new TLVSequence(fcx).getValue(0x85); // proprietary
+
+ if(fd.length < 5 ||
+ fd[0] != (byte)0x01 ||
+ fd[1] != fid[0] ||
+ fd[2] != fid[1]) {
+
+ throw new CardException("Error reading CDF - invalid FCI: " + SMCCHelper.toString(resp.getData()));
+ }
+
+ readCIOCertificatesFromTransparentFile(channel);
+ }
+
+ protected byte[] doReadTransparentFile(CardChannel channel) throws CardException, SignatureCardException {
+
+ return ISO7816Utils.readTransparentFile(channel, -1, 0xef);
+ }
+
+ protected boolean retrieveAuthIdFromASN1() {
+
+ return RETRIEVE_AUTH_ID_FROM_ASN1;
+ }
+
+}