public class PassportService
extends net.sf.scuba.smartcards.CardService
open() ==><br /> sendSelectApplet() ==><br /> doBAC(...) ==><br /> doAA() ==><br /> getInputStream(...)<sup>*</sup> ==><br /> close()
Modifier and Type | Field and Description |
---|---|
protected static byte[] |
APPLET_AID
The applet we select when we start a session.
|
static byte |
CAN_PACE_KEY_REFERENCE
Shared secret type for PACE according to BSI TR-03110 v2.03 B.11.1.
|
static int |
DEFAULT_MAX_BLOCKSIZE
The default maximal blocksize used for unencrypted APDUs.
|
static short |
EF_CARD_ACCESS
Card Access.
|
static short |
EF_CARD_SECURITY
Card Security.
|
static short |
EF_COM
The data group presence list.
|
static short |
EF_CVCA
Contains EAC CVA references.
|
static short |
EF_DG1
File identifier for data group 1.
|
static short |
EF_DG10
File identifier for data group 10.
|
static short |
EF_DG11
File identifier for data group 11.
|
static short |
EF_DG12
File identifier for data group 12.
|
static short |
EF_DG13
File identifier for data group 13.
|
static short |
EF_DG14
File identifier for data group 14.
|
static short |
EF_DG15
File identifier for data group 15.
|
static short |
EF_DG16
File identifier for data group 16.
|
static short |
EF_DG2
File identifier for data group 2.
|
static short |
EF_DG3
File identifier for data group 3.
|
static short |
EF_DG4
File identifier for data group 4.
|
static short |
EF_DG5
File identifier for data group 5.
|
static short |
EF_DG6
File identifier for data group 6.
|
static short |
EF_DG7
File identifier for data group 7.
|
static short |
EF_DG8
File identifier for data group 8.
|
static short |
EF_DG9
File identifier for data group 9.
|
static short |
EF_SOD
The security document.
|
int |
maxBlockSize
Deprecated.
hack
|
static byte |
MRZ_PACE_KEY_REFERENCE
Shared secret type for PACE according to BSI TR-03110 v2.03 B.11.1.
|
static byte |
PIN_PACE_KEY_REFERENCE
Shared secret type for PACE according to BSI TR-03110 v2.03 B.11.1.
|
static byte |
PUK_PACE_KEY_REFERENCE
Shared secret type for PACE according to BSI TR-03110 v2.03 B.11.1.
|
static byte |
SF_COM
Short file identifier for file.
|
static byte |
SF_CVCA
Short file identifier for file.
|
static byte |
SF_DG1
Short file identifier for file.
|
static byte |
SF_DG10
Short file identifier for file.
|
static byte |
SF_DG11
Short file identifier for file.
|
static byte |
SF_DG12
Short file identifier for file.
|
static byte |
SF_DG13
Short file identifier for file.
|
static byte |
SF_DG14
Short file identifier for file.
|
static byte |
SF_DG15
Short file identifier for file.
|
static byte |
SF_DG16
Short file identifier for file.
|
static byte |
SF_DG2
Short file identifier for file.
|
static byte |
SF_DG3
Short file identifier for file.
|
static byte |
SF_DG4
Short file identifier for file.
|
static byte |
SF_DG5
Short file identifier for file.
|
static byte |
SF_DG6
Short file identifier for file.
|
static byte |
SF_DG7
Short file identifier for file.
|
static byte |
SF_DG8
Short file identifier for file.
|
static byte |
SF_DG9
Short file identifier for file.
|
static byte |
SF_SOD
Short file identifier for file.
|
Constructor and Description |
---|
PassportService(net.sf.scuba.smartcards.CardService service)
Creates a new passport service for accessing the passport.
|
PassportService(net.sf.scuba.smartcards.CardService service,
int maxBlockSize)
Creates a new passport service for accessing the passport.
|
Modifier and Type | Method and Description |
---|---|
void |
addAPDUListener(net.sf.scuba.smartcards.APDUListener l)
Adds a listener.
|
void |
addPlainTextAPDUListener(net.sf.scuba.smartcards.APDUListener l)
Adds a plain text listener.
|
void |
close()
Closes this service.
|
AAResult |
doAA(PublicKey publicKey,
String digestAlgorithm,
String signatureAlgorithm,
byte[] challenge)
Performs the Active Authentication protocol.
|
BACResult |
doBAC(BACKeySpec bacKey)
Performs the Basic Access Control protocol.
|
BACResult |
doBAC(SecretKey kEnc,
SecretKey kMac)
Performs the Basic Access Control protocol.
|
CAResult |
doCA(BigInteger keyId,
String oid,
String publicKeyOID,
PublicKey publicKey)
Perform CA (Chip Authentication) part of EAC (version 1).
|
PACEResult |
doPACE(KeySpec keySpec,
String oid,
AlgorithmParameterSpec params)
Performs the PACE 2.0 / SAC protocol.
|
TAResult |
doTA(CVCPrincipal caReference,
List<CardVerifiableCertificate> terminalCertificates,
PrivateKey terminalKey,
String taAlg,
CAResult chipAuthenticationResult,
PACEResult paceResult)
Performs Terminal Authentication (TA) part of EAC (version 1).
|
TAResult |
doTA(CVCPrincipal caReference,
List<CardVerifiableCertificate> terminalCertificates,
PrivateKey terminalKey,
String taAlg,
CAResult chipAuthenticationResult,
String documentNumber)
Performs Terminal Authentication (TA) part of EAC (version 1).
|
byte[] |
getATR()
Gets the answer to reset bytes.
|
net.sf.scuba.smartcards.CardFileInputStream |
getInputStream(short fid)
Gets the file as an input stream indicated by a file identifier.
|
net.sf.scuba.smartcards.APDUWrapper |
getWrapper()
Gets the wrapper.
|
boolean |
isOpen()
Gets whether this service is open.
|
protected void |
notifyExchangedPlainTextAPDU(int count,
net.sf.scuba.smartcards.CommandAPDU capdu,
net.sf.scuba.smartcards.ResponseAPDU rapdu)
Notifies listeners about APDU event.
|
void |
open()
Opens a session to the card.
|
void |
removeAPDUListener(net.sf.scuba.smartcards.APDUListener l)
Removes a listener.
|
void |
removePlainTextAPDUListener(net.sf.scuba.smartcards.APDUListener l)
Removes a plain text listener.
|
byte[] |
sendGeneralAuthenticate(net.sf.scuba.smartcards.APDUWrapper wrapper,
byte[] data,
boolean isLast)
Sends a General Authenticate command.
|
byte[] |
sendGetChallenge()
Sends a
GET CHALLENGE command to the passport. |
byte[] |
sendGetChallenge(net.sf.scuba.smartcards.APDUWrapper wrapper)
Sends a
GET CHALLENGE command to the passport. |
byte[] |
sendInternalAuthenticate(net.sf.scuba.smartcards.APDUWrapper wrapper,
byte[] rndIFD)
Sends an
INTERNAL AUTHENTICATE command to the passport. |
void |
sendMSEKAT(net.sf.scuba.smartcards.APDUWrapper wrapper,
byte[] keyData,
byte[] idData)
The MSE KAT APDU, see EAC 1.11 spec, Section B.1
|
void |
sendMSESetATExtAuth(net.sf.scuba.smartcards.APDUWrapper wrapper,
byte[] data)
The MSE Set AT APDU for TA, see EAC 1.11 spec, Section B.2.
|
void |
sendMSESetATIntAuth(net.sf.scuba.smartcards.APDUWrapper wrapper,
String oid,
BigInteger keyId)
The MSE Set AT for chip authentication.
|
void |
sendMSESetATMutualAuth(net.sf.scuba.smartcards.APDUWrapper wrapper,
String oid,
int refPublicKeyOrSecretKey,
byte[] refPrivateKeyOrForComputingSessionKey)
The MSE AT APDU for PACE, see ICAO TR-SAC-1.01, Section 3.2.1, BSI TR 03110 v2.03 B11.1.
|
void |
sendMSESetDST(net.sf.scuba.smartcards.APDUWrapper wrapper,
byte[] data)
The MSE DST APDU, see EAC 1.11 spec, Section B.2
|
byte[] |
sendMutualAuth(byte[] rndIFD,
byte[] rndICC,
byte[] kIFD,
SecretKey kEnc,
SecretKey kMac)
Sends an
EXTERNAL AUTHENTICATE command to the passport. |
void |
sendMutualAuthenticate(net.sf.scuba.smartcards.APDUWrapper wrapper,
byte[] signature)
Sends the EXTERNAL AUTHENTICATE command.
|
void |
sendPSOChainMode(net.sf.scuba.smartcards.APDUWrapper wrapper,
byte[] certBodyData,
byte[] certSignatureData)
Sends a perform security operation command in chain mode.
|
void |
sendPSOExtendedLengthMode(net.sf.scuba.smartcards.APDUWrapper wrapper,
byte[] certBodyData,
byte[] certSignatureData)
Sends a perform security operation command in extended length mode.
|
byte[] |
sendReadBinary(net.sf.scuba.smartcards.APDUWrapper wrapper,
int offset,
int le,
boolean isExtendedLength)
Sends a
READ BINARY command to the passport. |
byte[] |
sendReadBinary(int offset,
int le,
boolean isExtendedLength)
Sends a
READ BINARY command to the passport, use wrapper when secure channel set up. |
byte[] |
sendReadBinary(short offset,
int le,
boolean isExtendedLength)
Sends a
READ BINARY command to the passport. |
void |
sendSelectApplet(net.sf.scuba.smartcards.APDUWrapper wrapper,
byte[] aid)
Sends a
SELECT APPLET command to the card. |
void |
sendSelectApplet(boolean hasPACESucceeded)
Selects the MRTD card side applet.
|
void |
sendSelectFile(net.sf.scuba.smartcards.APDUWrapper wrapper,
short fid)
Sends a
SELECT FILE command to the passport. |
void |
sendSelectFile(short fid)
Selects a file within the MRTD application.
|
void |
setService(net.sf.scuba.smartcards.CardService service)
Sets the service.
|
void |
setWrapper(SecureMessagingWrapper wrapper)
Deprecated.
hack
|
net.sf.scuba.smartcards.ResponseAPDU |
transmit(net.sf.scuba.smartcards.CommandAPDU capdu)
Tranceives an APDU.
|
public static final short EF_CARD_ACCESS
public static final short EF_CARD_SECURITY
public static final short EF_DG1
public static final short EF_DG2
public static final short EF_DG3
public static final short EF_DG4
public static final short EF_DG5
public static final short EF_DG6
public static final short EF_DG7
public static final short EF_DG8
public static final short EF_DG9
public static final short EF_DG10
public static final short EF_DG11
public static final short EF_DG12
public static final short EF_DG13
public static final short EF_DG14
public static final short EF_DG15
public static final short EF_DG16
public static final short EF_SOD
public static final short EF_COM
public static final short EF_CVCA
public static final byte SF_DG1
public static final byte SF_DG2
public static final byte SF_DG3
public static final byte SF_DG4
public static final byte SF_DG5
public static final byte SF_DG6
public static final byte SF_DG7
public static final byte SF_DG8
public static final byte SF_DG9
public static final byte SF_DG10
public static final byte SF_DG11
public static final byte SF_DG12
public static final byte SF_DG13
public static final byte SF_DG14
public static final byte SF_DG15
public static final byte SF_DG16
public static final byte SF_COM
public static final byte SF_SOD
public static final byte SF_CVCA
public static final int DEFAULT_MAX_BLOCKSIZE
@Deprecated public int maxBlockSize
public static final byte MRZ_PACE_KEY_REFERENCE
public static final byte CAN_PACE_KEY_REFERENCE
public static final byte PIN_PACE_KEY_REFERENCE
public static final byte PUK_PACE_KEY_REFERENCE
protected static final byte[] APPLET_AID
public PassportService(net.sf.scuba.smartcards.CardService service) throws net.sf.scuba.smartcards.CardServiceException
service
- another service which will deal with sending the apdus to the cardnet.sf.scuba.smartcards.CardServiceException
- when the available JCE providers cannot provide the necessary
cryptographic primitives:
public PassportService(net.sf.scuba.smartcards.CardService service, int maxBlockSize) throws net.sf.scuba.smartcards.CardServiceException
service
- another service which will deal with sending the APDUs to the cardmaxBlockSize
- maximum size for plain text APDUsnet.sf.scuba.smartcards.CardServiceException
- when the available JCE providers cannot provide the necessary
cryptographic primitives:
public void open() throws net.sf.scuba.smartcards.CardServiceException
net.sf.scuba.smartcards.CardServiceException
- on errorpublic void sendSelectApplet(boolean hasPACESucceeded) throws net.sf.scuba.smartcards.CardServiceException
hasPACESucceeded
- indicates whether PACE has been executed successfully (in which case a secure messaging channel has been established)net.sf.scuba.smartcards.CardServiceException
- on errorpublic boolean isOpen()
public void sendSelectFile(short fid) throws net.sf.scuba.smartcards.CardServiceException
fid
- a file identifiernet.sf.scuba.smartcards.CardServiceException
- on errorpublic byte[] sendReadBinary(int offset, int le, boolean isExtendedLength) throws net.sf.scuba.smartcards.CardServiceException
READ BINARY
command to the passport, use wrapper when secure channel set up.offset
- offset into the filele
- the expected length of the file to readisExtendedLength
- whether to use extended length APDUsle
with (the specified part of) the contents of the currently selected filenet.sf.scuba.smartcards.CardServiceException
- on tranceive errorpublic BACResult doBAC(BACKeySpec bacKey) throws net.sf.scuba.smartcards.CardServiceException
bacKey
- the key based on the document number,
the card holder's birth date,
and the document's expiration datenet.sf.scuba.smartcards.CardServiceException
- if authentication failedpublic BACResult doBAC(SecretKey kEnc, SecretKey kMac) throws net.sf.scuba.smartcards.CardServiceException, GeneralSecurityException
kEnc
- static 3DES key required for BACkMac
- static 3DES key required for BACnet.sf.scuba.smartcards.CardServiceException
- if authentication failedGeneralSecurityException
- on security primitives related problemspublic PACEResult doPACE(KeySpec keySpec, String oid, AlgorithmParameterSpec params) throws PACEException
keySpec
- the MRZoid
- as specified in the PACEInfo, indicates GM or IM or CAM, DH or ECDH, cipher, digest, lengthparams
- explicit static domain parameters the domain params for DH or ECDHPACEException
- on errorpublic CAResult doCA(BigInteger keyId, String oid, String publicKeyOID, PublicKey publicKey) throws net.sf.scuba.smartcards.CardServiceException
keyId
- passport's public key id (stored in DG14), null
if noneoid
- the object identifier indicating the Chip Authentication protocolpublicKeyOID
- the object identifier indicating the public key algorithm usedpublicKey
- passport's public key (stored in DG14)net.sf.scuba.smartcards.CardServiceException
- if CA failed or some error occurredpublic TAResult doTA(CVCPrincipal caReference, List<CardVerifiableCertificate> terminalCertificates, PrivateKey terminalKey, String taAlg, CAResult chipAuthenticationResult, String documentNumber) throws net.sf.scuba.smartcards.CardServiceException
caReference
- reference issuerterminalCertificates
- terminal certificate chainterminalKey
- terminal private keytaAlg
- algorithmchipAuthenticationResult
- the chip authentication resultdocumentNumber
- the document numbernet.sf.scuba.smartcards.CardServiceException
- on errorpublic TAResult doTA(CVCPrincipal caReference, List<CardVerifiableCertificate> terminalCertificates, PrivateKey terminalKey, String taAlg, CAResult chipAuthenticationResult, PACEResult paceResult) throws net.sf.scuba.smartcards.CardServiceException
caReference
- reference issuerterminalCertificates
- terminal certificate chainterminalKey
- terminal private keytaAlg
- algorithmchipAuthenticationResult
- the chip authentication resultpaceResult
- the PACE resultnet.sf.scuba.smartcards.CardServiceException
- on errorpublic AAResult doAA(PublicKey publicKey, String digestAlgorithm, String signatureAlgorithm, byte[] challenge) throws net.sf.scuba.smartcards.CardServiceException
publicKey
- the public key to use (usually read from the card)digestAlgorithm
- the digest algorithm to use, or nullsignatureAlgorithm
- signature algorithmchallenge
- challengenet.sf.scuba.smartcards.CardServiceException
- on errorpublic void close()
public net.sf.scuba.smartcards.APDUWrapper getWrapper()
null
until access control has been performed.@Deprecated public void setWrapper(SecureMessagingWrapper wrapper)
wrapper
- wrapperpublic net.sf.scuba.smartcards.CardFileInputStream getInputStream(short fid) throws net.sf.scuba.smartcards.CardServiceException
fid
- ICAO file identifiernet.sf.scuba.smartcards.CardServiceException
- if the file cannot be readpublic net.sf.scuba.smartcards.ResponseAPDU transmit(net.sf.scuba.smartcards.CommandAPDU capdu) throws net.sf.scuba.smartcards.CardServiceException
0x9000
this method does
NOT throw a CardServiceException, but it returns this as error code
as result.transmit
in class net.sf.scuba.smartcards.CardService
capdu
- the command APDUnet.sf.scuba.smartcards.CardServiceException
- on errorpublic byte[] getATR()
getATR
in class net.sf.scuba.smartcards.CardService
public void setService(net.sf.scuba.smartcards.CardService service)
service
- the carrier service that is decorated by this serviceservice
- the carrier servicepublic void addAPDUListener(net.sf.scuba.smartcards.APDUListener l)
addAPDUListener
in class net.sf.scuba.smartcards.CardService
l
- a listenerpublic void removeAPDUListener(net.sf.scuba.smartcards.APDUListener l)
removeAPDUListener
in class net.sf.scuba.smartcards.CardService
l
- a listenerpublic void sendSelectApplet(net.sf.scuba.smartcards.APDUWrapper wrapper, byte[] aid) throws net.sf.scuba.smartcards.CardServiceException
SELECT APPLET
command to the card.wrapper
- the secure messaging wrapper to useaid
- the applet to selectnet.sf.scuba.smartcards.CardServiceException
- on tranceive errorpublic void sendSelectFile(net.sf.scuba.smartcards.APDUWrapper wrapper, short fid) throws net.sf.scuba.smartcards.CardServiceException
SELECT FILE
command to the passport. Secure
messaging will be applied to the command and response apdu.wrapper
- the secure messaging wrapper to usefid
- the file to selectnet.sf.scuba.smartcards.CardServiceException
- on tranceive errorpublic byte[] sendReadBinary(short offset, int le, boolean isExtendedLength) throws net.sf.scuba.smartcards.CardServiceException
READ BINARY
command to the passport.offset
- offset into the filele
- the expected length of the file to readisExtendedLength
- whether to use extended length APDUsle
with (the specified part of) the contents of the currently selected filenet.sf.scuba.smartcards.CardServiceException
- if the command was not successfulpublic byte[] sendReadBinary(net.sf.scuba.smartcards.APDUWrapper wrapper, int offset, int le, boolean isExtendedLength) throws net.sf.scuba.smartcards.CardServiceException
READ BINARY
command to the passport. Secure
messaging will be applied to the command and response apdu.wrapper
- the secure messaging wrapper to useoffset
- offset into the filele
- the expected length of the file to readisExtendedLength
- whether it should be a long (INS == 0xB1
) readle
with (the specified part of) the contents of the currently selected filenet.sf.scuba.smartcards.CardServiceException
- if the command was not successfulpublic byte[] sendGetChallenge() throws net.sf.scuba.smartcards.CardServiceException
GET CHALLENGE
command to the passport.net.sf.scuba.smartcards.CardServiceException
- on tranceive errorpublic byte[] sendGetChallenge(net.sf.scuba.smartcards.APDUWrapper wrapper) throws net.sf.scuba.smartcards.CardServiceException
GET CHALLENGE
command to the passport.wrapper
- secure messaging wrappernet.sf.scuba.smartcards.CardServiceException
- on tranceive errorpublic byte[] sendInternalAuthenticate(net.sf.scuba.smartcards.APDUWrapper wrapper, byte[] rndIFD) throws net.sf.scuba.smartcards.CardServiceException
INTERNAL AUTHENTICATE
command to the passport.
This is part of AA.wrapper
- secure messaging wrapperrndIFD
- the challenge to sendnet.sf.scuba.smartcards.CardServiceException
- on tranceive errorpublic byte[] sendMutualAuth(byte[] rndIFD, byte[] rndICC, byte[] kIFD, SecretKey kEnc, SecretKey kMac) throws net.sf.scuba.smartcards.CardServiceException
EXTERNAL AUTHENTICATE
command to the passport.
This is part of BAC.
The resulting byte array has length 32 and contains rndICC
(first 8 bytes), rndIFD
(next 8 bytes), their key material "
kICC
" (last 16 bytes).rndIFD
- our challengerndICC
- their challengekIFD
- our key materialkEnc
- the static encryption keykMac
- the static mac keykEnc
) and verified
(using kMac
)net.sf.scuba.smartcards.CardServiceException
- on tranceive errorpublic void sendMutualAuthenticate(net.sf.scuba.smartcards.APDUWrapper wrapper, byte[] signature) throws net.sf.scuba.smartcards.CardServiceException
wrapper
- secure messaging wrappersignature
- terminal signaturenet.sf.scuba.smartcards.CardServiceException
- if the resulting status word different from 9000public void sendMSEKAT(net.sf.scuba.smartcards.APDUWrapper wrapper, byte[] keyData, byte[] idData) throws net.sf.scuba.smartcards.CardServiceException
wrapper
- secure messaging wrapperkeyData
- key data object (tag 0x91)idData
- key id data object (tag 0x84), can be nullnet.sf.scuba.smartcards.CardServiceException
- on errorpublic void sendMSESetDST(net.sf.scuba.smartcards.APDUWrapper wrapper, byte[] data) throws net.sf.scuba.smartcards.CardServiceException
wrapper
- secure messaging wrapperdata
- public key reference data object (tag 0x83)net.sf.scuba.smartcards.CardServiceException
- on errorpublic void sendMSESetATExtAuth(net.sf.scuba.smartcards.APDUWrapper wrapper, byte[] data) throws net.sf.scuba.smartcards.CardServiceException
wrapper
- secure messaging wrapperdata
- public key reference data object (should already be prefixed with tag 0x83)net.sf.scuba.smartcards.CardServiceException
- on errorpublic void sendMSESetATIntAuth(net.sf.scuba.smartcards.APDUWrapper wrapper, String oid, BigInteger keyId) throws net.sf.scuba.smartcards.CardServiceException
wrapper
- secure messaging wrapperoid
- the OIDkeyId
- the keyId or null
net.sf.scuba.smartcards.CardServiceException
- on errorpublic void sendMSESetATMutualAuth(net.sf.scuba.smartcards.APDUWrapper wrapper, String oid, int refPublicKeyOrSecretKey, byte[] refPrivateKeyOrForComputingSessionKey) throws net.sf.scuba.smartcards.CardServiceException
wrapper
- secure messaging wrapperoid
- OID of the protocol to select (this method will prefix 0x80
)refPublicKeyOrSecretKey
- value specifying whether to use MRZ (0x01
) or CAN (0x02
) (this method will prefix 0x83
)refPrivateKeyOrForComputingSessionKey
- indicates a private key or reference for computing a session key (this method will prefix 0x84
)net.sf.scuba.smartcards.CardServiceException
- on errorpublic byte[] sendGeneralAuthenticate(net.sf.scuba.smartcards.APDUWrapper wrapper, byte[] data, boolean isLast) throws net.sf.scuba.smartcards.CardServiceException
wrapper
- secure messaging wrapperdata
- data to be sent, without the 0x7C
prefix (this method will add it)isLast
- indicates whether this is the last command in the chain0x7C
prefix (this method will remove it)net.sf.scuba.smartcards.CardServiceException
- on errorpublic void sendPSOExtendedLengthMode(net.sf.scuba.smartcards.APDUWrapper wrapper, byte[] certBodyData, byte[] certSignatureData) throws net.sf.scuba.smartcards.CardServiceException
wrapper
- secure messaging wrappercertBodyData
- the certificate bodycertSignatureData
- signature datanet.sf.scuba.smartcards.CardServiceException
- on error communicating over the servicepublic void sendPSOChainMode(net.sf.scuba.smartcards.APDUWrapper wrapper, byte[] certBodyData, byte[] certSignatureData) throws net.sf.scuba.smartcards.CardServiceException
wrapper
- secure messaging wrappercertBodyData
- the certificate bodycertSignatureData
- signature datanet.sf.scuba.smartcards.CardServiceException
- on error communicating over the servicepublic void addPlainTextAPDUListener(net.sf.scuba.smartcards.APDUListener l)
l
- a listenerpublic void removePlainTextAPDUListener(net.sf.scuba.smartcards.APDUListener l)
l
- a listenerprotected void notifyExchangedPlainTextAPDU(int count, net.sf.scuba.smartcards.CommandAPDU capdu, net.sf.scuba.smartcards.ResponseAPDU rapdu)
count
- countcapdu
- command APDUrapdu
- response APDUCopyright © 2017. All rights reserved.