JCOP tools??
hi,
i�m trying to develop with the JCOP tools but i would like to have more information about APIs (java) and the diferences between packages included in the CD (JCOP 30,10,21id,21sim...).I�ve used the documentation in the CD,JCOP xx technical briefs, but i still have some questions about it.
My application is a simulation relying on cryptographic services,public key, digital signature and security certificates.Wich JCOP can i use in my implementation?
Where can i find the visa openplatform api to use it?
thank a lot,
waiting for your response,Javier.
I find it hard to believe you read the JCOPOverview.pdf that came with the kit and you don't know which cards to use. J-10 only has DES, j-20/30 contain DES and RSA. How can you not see that ?
Go to GlobalPlatform.org and download the older version, 2.0.1. You can also download the 2.1 version to see the visa op APIs but they are deprecated.
Similar Messages
-
Instructions for Downloading and Activating the JCOP Tools
In response to my question:
I refer to JCOP Tools available on Eclipse.
If the plug-in free for download?
If it is not, kindly provide a proper hyperlink from which those interested can place their order.Listed below is the reply from IBM. Can anyone who has successfully obtained the activation code this way confirm whether you need to foot the postage?
Cheers!!!!
There is no charge for the JCOP Tools. The tools are provided as-is with no warranty or support. Instructions for downloading and activating the tools follow.
Please note that because our Java Card operating system is now available for more than one silicon vendor, IBM will no longer act as a distributor for sample cards. If you require a sample card, you must now approach the silicon vendors directly . Our current silicon partners are Philips Semiconductor, Samsung and Sharp. In addition you may be able to obtain JCOP sample cards from suppliers on this list http://www.zurich.ibm.com/jcop/order/cards.html
JCOP Tools are subject to US Government Export Controls, and therefore each install has to be activated individually to ensure compliance. Please follow the instructions below for each copy of the tools that need to be activated.
Prerequisites:
1. If you do not already have a Java Runtime Environment (JRE) installed, download and install a JRE or JDK. You can do so from this website (http://java.sun.com/j2se/1.4.2/download.html). Please note that we recommend the use of JRE version 1.4.2.
2. If you do not already have the open source software development environment Eclipse installed, download and install Eclipse (http://www.eclipse.org/), You can do so from this website(http://www.eclipse.org/downloads/index.php). JCOP Tools require Eclipse 3.1
To download the tools and start install:
1. Download the current Update Site image from here (http://www.zurich.ibm.com/jcop/download/eclipse/image/tools.zip)
2. Unzip the downloaded file to a location of your choice
3. Start the Eclipse IDE
4. From the menu bar click on Help > Software Updates > Find and Install
5. In the Install/Update Dialog select Search for new features to install
6. Click Next
7. Click on New Archived Site . . . and browse to the location chosen in step 2
8. Select the file tools.zip
9. Click Open then OK then Finish
10. Eclipse Update Manager will start to install the plug-in, continue with the install as needed.
For an activation code please send me ([email protected]) the following information:
1. Your full postal address - the serial number will be sent via International Courier for US Export control reasons.
2. Your contact telephone number
3. The serial number of your JCOP tools install
4. Your planned usage/reason for needing the JCOP tools
5. If a student, a copy (fax or digital photo) of your student ID
For the serial number (item 3 above):
1. Ensure you have downloaded and installed the JCOP Tools
2. Start the Eclipse IDE
3. From the menu bar click on File > New > Project
4. In the New Project Dialog expand the Java Card folder
5. Select Java Card Project
6. Click Next
7. You should now see the JCOP Licensing Wizard
8. Click Next
9. Select Verify an Activation Code
10. Click Next
11. The Serial Number should appear on the next page, above the Activation Code entry fields.
12. Once you have that number click on Cancel then Abort (Note: the Java Card project choice will be disabled until the next time you restart Eclipse)For those who are interested to use the JCOP simulator for a start, I have checked that the plug-in and feature files (in tools.zip) for Eclipse are still available at IBM site, please download and install yourself.
I still keep a copy of user guide for JCOP tools (version 3.1.1a) and the contents are still relevant to Version 3.1.1b simulator in tools.zip.
If you are interested to have a copy of such document, kindly drop me an email to [email protected] -
Simulation using Eclipse plugin for JCOP tools
Dear All,
In search for a simulation environment for java card applet development I tried to use Eclipse plugin for JCOP tools.
The samples which comes with the JCOP tools works fine but when try to debug my applet I receive the error: Wrong Data 6A 80.
Generic JCOP v2.4.1 is selected for Java Card Simulation.
Following is the JCOP Shell screen:
cm- /term "Remote|localhost:8050"
--Opening terminal
/card -a a000000003000000 -c com.ibm.jc.CardManagerresetCard with timeout: 0 (ms)
--Waiting for card...
ATR=3B F8 13 00 00 81 31 FE 45 4A 43 4F 50 76 32 34 ;.....1.EJCOPv24
31 B7 1.
IOCTL().
ATR: T=1, FI=1/DI=3 (93clk/etu), N=0, IFSC=254, BWI=4/CWI=5, Hist="JCOPv241"
=> 00 A4 04 00 08 A0 00 00 00 03 00 00 00 00 ..............
(908058 nsec)
<= 6F 65 84 08 A0 00 00 00 03 00 00 00 A5 59 9F 65 oe...........Y.e
01 FF 9F 6E 06 47 91 92 18 00 00 73 4A 06 07 2A ...n.G.....sJ..*
86 48 86 FC 6B 01 60 0C 06 0A 2A 86 48 86 FC 6B .H..k.`...*.H..k
02 02 01 01 63 09 06 07 2A 86 48 86 FC 6B 03 64 ....c...*.H..k.d
0B 06 09 2A 86 48 86 FC 6B 04 02 15 65 0B 06 09 ...*.H..k...e...
2B 85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 +...Hd...f...+..
04 01 2A 02 6E 01 02 90 00 ..*.n....
Status: No Error
cm> set-key 255/1/DES-ECB/404142434445464748494a4b4c4d4e4f 255/2/DES-ECB/404142434445464748494a4b4c4d4e4f 255/3/DES-ECB/404142434445464748494a4b4c4d4e4f
cm> init-update 255
=> 80 50 00 00 08 B1 04 15 2B 41 3F 62 AB 00 .P......+A?b..
(2668 usec)
<= 00 00 F9 02 71 E3 BB AD BD CD FF 02 00 00 3D 02 ....q.........=.
9C 31 C7 89 AD 44 8E 13 17 15 2E 5A 90 00 .1...D.....Z..
Status: No Error
cm> ext-auth plain
=> 84 82 00 00 10 CE 6C DC D2 8C BE 5E 33 EC 58 D0 ......l....^3.X.
57 3A 52 D2 24 W:R.$
(2288 usec)
<= 90 00 ..
Status: No Error
cm> delete -r a00000006203010c04
=> 80 E4 00 80 0B 4F 09 A0 00 00 00 62 03 01 0C 04 .....O.....b....
00 .
(1084 usec)
<= 6A 88 j.
Status: Reference data not found
jcshell: Error code: 6a88 (Reference data not found)
jcshell: Wrong response APDU: 6A88
Ignoring expected error
cm> upload -d -b 250 "D:\JCOP\eclipse\projects\DigitalTachograph\bin\digitaltachograph\javacard\digitaltachograph.cap"
=> 80 E6 02 00 16 09 A0 00 00 00 62 03 01 0C 04 08 ..........b.....
A0 00 00 00 03 00 00 00 00 00 00 00 ............
(2100 usec)
<= 00 90 00 ...
Status: No Error
=> 80 E8 00 00 FA C4 82 84 42 01 00 25 DE CA FF ED ........B..%....
02 02 04 00 01 09 A0 00 00 00 62 03 01 0C 04 11 ..........b.....
64 69 67 69 74 61 6C 74 61 63 68 6F 67 72 61 70 digitaltachograp
68 02 00 21 00 25 00 21 00 0E 00 29 03 3E 00 CD h..!.%.!...).>..
23 D2 01 BB 04 44 00 00 09 E3 4B E5 00 11 00 05 #....D....K.....
01 A2 04 01 00 04 00 29 04 00 01 07 A0 00 00 00 .......)........
62 00 01 02 01 07 A0 00 00 00 62 01 01 02 01 07 b.........b.....
A0 00 00 00 62 01 02 02 01 07 A0 00 00 00 62 02 ....b.........b.
01 03 00 0E 01 0A A0 00 00 00 62 03 01 0C 04 01 ..........b.....
01 DF 06 00 CD 00 00 00 80 00 00 FF 00 01 00 00 ................
00 01 81 03 13 00 12 07 03 00 00 02 01 03 06 0B ................
8C 81 00 00 00 80 00 0B 00 0B 01 01 00 00 0B F9 ................
00 80 00 11 00 0F 01 01 00 10 0E A9 0D D4 0D F7 ................
0E 07 0E 18 0E 26 0E 35 0E 44 0E 50 0E 72 0E 81 .....&.5.D.P.r..
0E 90 0E 9B 0E F5 11 05 11 1A 11 50 00 80 00 05 ...........P....
00 04 01 04 00 01 13 AF 13 B5 13 BA 14 0C 13 00 ................
(6775 usec)
<= 6A 80 j.
Status: Wrong data
jcshell: Error code: 6a80 (Wrong data)
jcshell: Wrong response APDU: 6A80
Unexpected error; aborting execution
I will be very happy if you can help me. I am desperately in need of a working debugging environment.
Thanks in advance!
Kind regards,
Mehmet* Processes incoming READ_BINARY APDUs. Returns data of the currently
* selected file.
* @param apdu where the offset is carried in header bytes p1 and p2.
* @param le expected length by terminal
* @return length of the response APDU
private short processReadBinary(APDU apdu, boolean protectedApdu, short leUnprotected) {
if (!hasFileSelected()) {
ISOException.throwIt(SW_CONDITIONS_NOT_SATISFIED);
byte[] buffer = apdu.getBuffer();
// retrieve p1p2 from apdu buffer
byte p1 = buffer[OFFSET_P1];
byte p2 = buffer[OFFSET_P2];
short offset = Util.makeShort(p1, p2); // offset encoded in P1/P2, 15 lowest bit
// offset encoded in P1/P2, 15 lowest bit
// check if le != 0 <-- no response expected
if (leUnprotected == 0) {
ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
if (selectedFile == null) {
ISOException.throwIt(ISO7816.SW_FILE_NOT_FOUND);
if ((selectedFile.getAccessConditions() & READ_REQUIRES_SM) == READ_REQUIRES_SM) {
if(!protectedApdu)
ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);
short fileSize = (short) selectedFile.getFileLength();
// check offset
if (offset >= fileSize) {
ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);
// check expected length
if ((short) (offset + leUnprotected) > fileSize) {
ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
//ISOException.throwIt(SW_TAMAM);
short bufferOffset = 0;
crypto.setEncryptionStatus(isSelectedFileEncrypted());
if (protectedApdu) {
bufferOffset = crypto.getApduBufferOffsetDT(leUnprotected);
if(isSelectedFileEncrypted())
bufferOffset = crypto.getApduBufferOffset(leUnprotected);
apdu.setOutgoing();
Util.arrayCopyNonAtomic(selectedFile.getData(), offset, buffer, bufferOffset, leUnprotected);
return leUnprotected;
* Processes and UPDATE_BINARY apdu. Writes data in the currently selected
* file.
* @param apdu
* carries the offset where to write date in header bytes p1 and
* p2.
private void processUpdateBinary(APDU apdu, boolean protectedApdu) {
if (!hasFileSelected() || isLocked()) {
ISOException.throwIt(ISO7816.SW_COMMAND_NOT_ALLOWED);
if ((selectedFile.getAccessConditions() & DigitalTachograph.UPDATE_ALW) != DigitalTachograph.UPDATE_ALW) {
if ((selectedFile.getAccessConditions() & DigitalTachograph.UPDATE_REQUIRES_SM) != DigitalTachograph.UPDATE_REQUIRES_SM) {
ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);
return;
}else if(!protectedApdu){
ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);
byte[] buffer = apdu.getBuffer();
byte p1 = buffer[OFFSET_P1];
byte p2 = buffer[OFFSET_P2];
short offset = Util.makeShort(p1, p2);
short readCount = (short) (buffer[ISO7816.OFFSET_LC] & 0xff);
//if (!protectedApdu){
readCount = apdu.setIncomingAndReceive();
while (readCount > 0) {
selectedFile.writeData(offset, buffer, OFFSET_CDATA, readCount);
offset += readCount;
readCount = apdu.receiveBytes(ISO7816.OFFSET_CDATA);
private short processInternalAuthenticate(APDU apdu , boolean protectedApdu) throws CryptoException {
byte[] buffer = apdu.getBuffer();
short lc = (short) (buffer[OFFSET_LC] & 0xFF);
if (lc != (short) (KID_LENGTH * 2)) {
ISOException.throwIt(SW_WRONG_LENGTH);
if (apdu.setIncomingAndReceive() != lc) {
ISOException.throwIt(ISO7816.SW_WRONG_DATA);
// Check if VU.CHR maches the one of the selected certificate on the card
if (Util.arrayCompare(buffer, (short) (OFFSET_CDATA + KID_LENGTH), keyStore.selected_KID, (short) 0, KID_LENGTH) != 0) {
ISOException.throwIt(SW_REFERENCE_DATA_NOT_FOUND);
if (Util.arrayCopyNonAtomic(buffer, OFFSET_CDATA, Rnd1, (short) 0, (short) 8) != (short) 8) { // Receive Rnd1
ISOException.throwIt(ISO7816.SW_WRONG_DATA);
// Hash(PRnd2||K1||Rnd1||VU.CHR)
random.generateData(PRnd2, (short) 0, (short) 90);
random.generateData(K1, (short) 0, (short) 16);
crypto.shaDigest.update(PRnd2, (short) 0, (short) 90); // PRnd2
crypto.shaDigest.update(K1, (short) 0, (short) 16); // PRnd2||K1
crypto.shaDigest.doFinal(buffer, OFFSET_CDATA, lc, digest, (short) 0); //Rnd1||VU.CHR
BigNumber mod = new BigNumber((short) 128);
mod.init(keyStore.Card_PubMod, (short) 0, (short) keyStore.Card_PubMod.length, BigNumber.FORMAT_HEX);
mod.subtract(signed, (short) 0, (short) 128, BigNumber.FORMAT_HEX);
if (mod.compareTo(signed, (short) 0, (short) 128, BigNumber.FORMAT_HEX) == -1) {
mod.toBytes(signed, (short) 0, (short) 128, BigNumber.FORMAT_HEX);
// To be added: if the selected private key is considered corrupted, the processing state returned is '6400' or '6581'.
signed[0] = (byte) 0x6A;
Util.arrayCopyNonAtomic(PRnd2, (short) 0, signed, (short) 1, (short) 90);
Util.arrayCopyNonAtomic(K1, (short) 0, signed, (short) 91, (short) 16);
Util.arrayCopyNonAtomic(digest, (short) 0, signed, (short) 107, (short) 20);
signed[127] = (byte) 0xBC;
if (!keyStore.cardPrivateKey.isInitialized()) {
CryptoException.throwIt(CryptoException.ILLEGAL_VALUE);
try {
crypto.rsaSigner.init(keyStore.cardPrivateKey, Signature.MODE_SIGN);
crypto.rsaSigner.doFinal(signed, (short) 0, (short) 128, signed, (short) 0);
} catch (Exception e) {
ISOException.throwIt(SW_REFERENCE_DATA_NOT_FOUND);
if (!keyStore.selectedPublicKey.isInitialized()) {
CryptoException.throwIt(CryptoException.ILLEGAL_VALUE);
try {
crypto.rsaCipher.init(keyStore.selectedPublicKey, Cipher.MODE_ENCRYPT);
crypto.rsaCipher.doFinal(signed, (short) 0, (short) 128, signed, (short) 0);
} catch (Exception e) {
ISOException.throwIt(SW_REFERENCE_DATA_NOT_FOUND);
apdu.setOutgoing();
Util.arrayCopyNonAtomic(signed, (short) 0, buffer, (short) 0, (short) 128);
return (short) signed.length;
private void processExternalAuthenticate(APDU apdu) {
short equipmentType = 0;
if (keyStore.Selected_Cert != null) {
equipmentType = (short) keyStore.Selected_Cert.CHA[6]; // check equipment type
if (equipmentType != (short) 1 && equipmentType != (short) 2 && equipmentType != (short) 3 && equipmentType != (short) 4 && equipmentType != (short) 6) {
ISOException.throwIt(ISO7816.SW_FUNC_NOT_SUPPORTED); // Instead of 6F00 throw a more meaningfull SW in case CHA is not valid.
if (Util.arrayCompare(keyStore.Selected_Cert.CHA, (short) 0, TACHOGRAPH_AID, (short) 0, (short) 6) != 0) {
ISOException.throwIt(ISO7816.SW_FUNC_NOT_SUPPORTED);
byte[] buffer = apdu.getBuffer();
byte p1 = (byte) (buffer[OFFSET_P1] & 0xff);
byte p2 = (byte) (buffer[OFFSET_P2] & 0xff);
if (p1 != 0 || p2 != 0) {
ISOException.throwIt(SW_WRONG_P1P2);
short lc = (short) (buffer[OFFSET_LC] & 0xFF);
if (lc != (short) (128)) {
ISOException.throwIt(SW_WRONG_LENGTH);
if (apdu.setIncomingAndReceive() != lc) {
ISOException.throwIt(ISO7816.SW_WRONG_DATA);
Util.arrayCopyNonAtomic(buffer, OFFSET_CDATA, signed, (short) 0, (short) 128); // receive the cryptogram from the VU
// decrypt the encrypted message with the card private key
try {
crypto.rsaCipher.init(keyStore.cardPrivateKey, Cipher.MODE_DECRYPT);
crypto.rsaCipher.doFinal(signed, (short) 0, (short) 128, signed, (short) 0);
} catch (Exception e) {
ISOException.throwIt(SW_REFERENCE_DATA_NOT_FOUND);
// verify the signature with the VU public key
try {
crypto.rsaCipher.init(keyStore.selectedPublicKey, Signature.MODE_VERIFY); // Cipher.MODE_ENCRYPT
crypto.rsaCipher.doFinal(signed, (short) 0, (short) 128, signed, (short) 0);
} catch (Exception e) {
ISOException.throwIt(SW_REFERENCE_DATA_NOT_FOUND);
if (signed[0] != (byte) 0x6A || signed[127] != (byte) 0xBC) {
ISOException.throwIt(Util.makeShort(signed[0], signed[127]));
try {
verifyCardCertificates();
Util.arrayCopyNonAtomic(signed, (short) 1, preDigest, (short) 0, (short) 106); // accumulate preDigest
Util.arrayCopyNonAtomic(Rnd3, (short) 0, preDigest, (short) 106, (short) 8); // accumulate preDigest
Util.arrayCopyNonAtomic(keyStore.Card_Cert.CHR, (short) 0, preDigest, (short) 114, (short) 8); // accumulate preDigest
Util.arrayCopyNonAtomic(signed, (short) 91, K2, (short) 0, (short) 16); // receive K2 value
crypto.shaDigest.update(signed, (short) 1, (short) 106); // PRnd4||K2
crypto.shaDigest.update(Rnd3, (short) 0, (short) 8); // Rnd3
crypto.shaDigest.doFinal(keyStore.Card_Cert.CHR, (short) 0, (short) 8, digest, (short) 0); //||Card.CHR
} catch (Exception e) {
ISOException.throwIt(SW_TAMAM);
if (Util.arrayCompare(signed, (short) 107, digest, (short) 0, (short) 20) != 0) {
ISOException.throwIt(SW_TAMAM);
volatileState[0] |= MUTUAL_AUTHENTICATED;
try {
DTUtil.xor(K1, (short) 0, K2, (short) 0, KaKb, (short) 0, (short) 16);
Util.arrayCopyNonAtomic(Rnd3, (short) 4, SSC, (short) 0, (short) 4); // tail of Rnd3
Util.arrayCopyNonAtomic(Rnd1, (short) 4, SSC, (short) 4, (short) 4); // tail of Rnd1
} catch (Exception e) {
ISOException.throwIt(SW_TAMAM);
try {
keyStore.setKey_Ka(KaKb, (short) 0);
keyStore.setKey_Kb(KaKb, (short) 8);
keyStore.setSecureMessagingKeys(KaKb, (short) 0, KaKb, (short) 0);
} catch (Exception e) {
ISOException.throwIt(SW_TAMAM_DEGIL);
return;
private short returnPreDigest(APDU apdu) {
byte[] buffer = apdu.getBuffer();
apdu.setOutgoing();
Util.arrayCopyNonAtomic(preDigest, (short) 0, buffer, (short) 0, (short) 122);
return (short)preDigest.length;
private short returnDigest(APDU apdu) {
byte[] buffer = apdu.getBuffer();
apdu.setOutgoing();
Util.arrayCopyNonAtomic(digest, (short) 0, buffer, (short) 0, (short) 20);
return (short)digest.length;
private short returnOriginalText(APDU apdu) {
byte[] buffer = apdu.getBuffer();
apdu.setOutgoing();
Util.arrayCopyNonAtomic(signed, (short) 0, buffer, (short) 0, (short) 128);
return (short)signed.length;
private void processVerify(APDU apdu) { // Verify_CHV(Pin_Ws)
byte[] buffer = apdu.getBuffer();
// retrieve the PIN data for validation.
byte byteRead = (byte) (apdu.setIncomingAndReceive());
// the PIN data is read into the APDU buffer
// at the offset ISO7816.OFFSET_CDATA the PIN data length = byteRead
if (pin.check(buffer, ISO7816.OFFSET_CDATA, byteRead) == false) {
ISOException.throwIt(SW_VERIFICATION_FAILED);
return;
private void processPSO(APDU apdu) { // verify certificate
byte[] buffer = apdu.getBuffer();
byte p1 = (byte) (buffer[OFFSET_P1] & 0xff);
byte p2 = (byte) (buffer[OFFSET_P2] & 0xff);
short lc = (short) (buffer[ISO7816.OFFSET_LC] & 0xFF);
if (p1 == (byte) 0x00 && p2 == P2_VERIFYCERT) {
if (lc != TACHO_CERT_LENGTH) {
ISOException.throwIt(SW_WRONG_LENGTH);
if (apdu.setIncomingAndReceive() != lc) {
ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
try { // copy the certificate to be verified from APDU buffer to cert object
Util.arrayCopyNonAtomic(buffer, OFFSET_CDATA, cert, (short) 0, lc);
} catch (Exception e) {
ISOException.throwIt(SW_TAMAM);
if (Util.arrayCompare(keyStore.selected_KID, (short) 0, keyStore.ERCA_KID, (short) 0, KID_LENGTH) == 0) {
keyStore.VUCA_Cert.verifyCert(cert, keyStore.selectedPublicKey, keyStore.selected_KID);
} else if (Util.arrayCompare(keyStore.selected_KID, (short) 0, keyStore.VUCA_Cert.CHR, (short) 0, KID_LENGTH) == 0) {
keyStore.VU_Cert.verifyCert(cert, keyStore.selectedPublicKey, keyStore.selected_KID);
} else {
ISOException.throwIt(SW_CERT_VERIFICATION_FAILED); // Selected keyId, with MSE, is neither ERCA_KID nor VUCA_KID
} else {
ISOException.throwIt(SW_CERT_VERIFICATION_FAILED);
return;
private short processGetChallenge(APDU apdu, boolean protectedApdu) {
byte[] buffer = apdu.getBuffer();
byte p1 = (byte) (buffer[OFFSET_P1] & 0xff);
byte p2 = (byte) (buffer[OFFSET_P2] & 0xff);
if (p1 != 0 || p2 != 0) {
ISOException.throwIt(SW_WRONG_P1P2);
random.generateData(Rnd3, (short) 0, (short) 8);
short Le = apdu.setOutgoing();
if (Le != (short) 8) {
ISOException.throwIt(SW_WRONG_LENGTH);
Util.arrayCopyNonAtomic(Rnd3, (short) 0, buffer, (short) 0, (short) 8);
return Le;
private void processMSE(APDU apdu) {
byte[] buffer = apdu.getBuffer();
if (buffer[OFFSET_P1] == (byte) 0xC1 && buffer[OFFSET_P2] == P2_DST) {
short lc = (short) (buffer[OFFSET_LC] & 0xFF);
if (lc != (short) (KID_LENGTH + 2)) {
ISOException.throwIt(SW_WRONG_LENGTH);
if (apdu.setIncomingAndReceive() != lc) {
ISOException.throwIt(ISO7816.SW_WRONG_DATA);
if (buffer[OFFSET_CDATA] != (byte) 0x83) {//check the tag of the data
ISOException.throwIt(SW_SECURE_MESSAGING_DATA_OBJECTS_MISSING);
} else if (buffer[OFFSET_CDATA + 1] != (byte) 0x08) {
ISOException.throwIt(SW_INCORRECT_DATA_OBJECT); // check if the key is already selected one
} else if (Util.arrayCompare(buffer, (short) (OFFSET_CDATA + 2), keyStore.selected_KID, (short) 0, KID_LENGTH) != 0) {
if (Util.arrayCompare(buffer, (short) (OFFSET_CDATA + 2), keyStore.ERCA_KID, (short) 0, KID_LENGTH) == 0) {// KID is EUR_KID
keyStore.selected_KID = keyStore.ERCA_KID;
keyStore.selectedPublicKey = keyStore.eurPublicKey;
keyStore.Selected_Cert = null; // ERCA public key is selected
return;
} else if (Util.arrayCompare(buffer, (short) (OFFSET_CDATA + 2), keyStore.VUCA_Cert.CHR, (short) 0, KID_LENGTH) == 0) {// KID is MSCA_KID
keyStore.Selected_Cert = keyStore.VUCA_Cert;
} else if (Util.arrayCompare(buffer, (short) (OFFSET_CDATA + 2), keyStore.VU_Cert.CHR, (short) 0, KID_LENGTH) == 0) { // KID is VU_KID
keyStore.Selected_Cert = keyStore.VU_Cert;
} else {
ISOException.throwIt(SW_REFERENCE_DATA_NOT_FOUND);
}// KID not found
keyStore.selectedPublicKey = keyStore.Selected_Cert.publicKey;
keyStore.selected_KID = keyStore.Selected_Cert.CHR;
} else { // if the KID is already set, just return
return;
} else {
ISOException.throwIt(ISO7816.SW_WRONG_P1P2);
private void processSelectFile(APDU apdu) {
byte[] buffer = apdu.getBuffer();
short lc = (short) (buffer[OFFSET_LC] & 0x00FF);
// retrieve p1p2 from apdu buffer
byte p1 = buffer[OFFSET_P1];
byte p2 = buffer[OFFSET_P2];
short p1p2 = Util.makeShort(p1, p2);
apdu.setIncomingAndReceive();
if (p1 == 4) {
if (lc == (short) TACHO_AID_LENGTH) {
if (Util.arrayCompare(buffer, (short) OFFSET_CDATA, TACHOGRAPH_AID, (short) 0, (short) TACHO_AID_LENGTH) == 0) {
selectedFile = fileSystem.getDT();
fileSystem.selectDT();
volatileState[0] |= FILE_SELECTED;
return;
} else {
ISOException.throwIt(ISO7816.SW_WRONG_DATA);
} else if (lc != 2) {
ISOException.throwIt(SW_WRONG_LENGTH);
short fid = Util.getShort(buffer, OFFSET_CDATA);
if (fileSystem.getFile(fid) != null) {
selectedFile = fileSystem.getDT();
fileSystem.selectDT();
volatileState[0] |= FILE_SELECTED;
return;
} else if (p1 == 2) {
if (lc != 2) {
ISOException.throwIt(SW_WRONG_LENGTH);
short fid = Util.getShort(buffer, OFFSET_CDATA);
if (fileSystem.getFile(fid) != null) {
selectedFile = fileSystem.getFile(fid);
volatileState[0] |= FILE_SELECTED;
return;
} else {
ISOException.throwIt(ISO7816.SW_WRONG_P1P2);
setNoFileSelected();
ISOException.throwIt(ISO7816.SW_FILE_NOT_FOUND);
public static void setNoFileSelected() {
if (hasFileSelected()) {
volatileState[0] ^= FILE_SELECTED;
public static boolean hasFileSelected() {
return (volatileState[0] & FILE_SELECTED) == FILE_SELECTED;
public static boolean hasMutuallyAuthenticated() {
return (volatileState[0] & MUTUAL_AUTHENTICATED) == MUTUAL_AUTHENTICATED;
static boolean isLocked() {
return (persistentState & LOCKED) == LOCKED;
public boolean isSelectedFileEncrypted() {
return ((selectedFile.getAccessConditions() & DigitalTachograph.ENCRYPTED) == DigitalTachograph.ENCRYPTED);
} -
Getting started with JCOP Tools
I have a working Eclipse + JCOP Tools installation, activated. I now also have a Cardman reader (drivers loaded) and some blank JCOP30 cards. I read through the Eclipse embedded JCOP help page, but couldn't find the answers to some simple questions:
1. How can I see a list of connected readers to ensure my reader hardware is recognized? I read earlier on the forums about a "Launch Configuration page". How do I access this page?
2. The JCOP Shell seems to be working... my cards are blank and /terminal does show "Slot empty" or "Card present" so I presume the interface is running fine. My cards are totally blank. Can I still read any useful info from them such as vendor strings, version#, etc?
3. Do the JCOP Tools 3.1.2 come with a sample project? Since I've never used this environment, I would love to see an example of working code that can be simulated or loaded onto a physical card. It would help me "learn by example"
If there is sample code, where can I find it? I tried to use Eclipse's import from archive but didn't find anything resembling samples within jcop tools. Any example you know of would be great.Here is the ATR and cplc output for my card. So far I know with certainty it's JCOP30-something and it supports T=CL.
But I'm not even sure which Java Card and Global Platform it supports! The "JCOP version map" from the 2003 specs document says JC 2.1.1 and GP 2.0.1, but http://www-306.ibm.com/software/wireless/wecos/jcop30.html says these cards are JC 2.2.1 and GP 2.1.1. Yikes! Which do I have?
cm> /atr
resetCard with timeout: 0 (ms)
--Waiting for card...
ATR=3B 86 80 01 4A 43 4F 50 33 30 12 ;...JCOP30.
ATR: T=0, T=1, Hist="JCOP30"
cm> get-cplc
=> 80 CA 9F 7F 00 .....
(11274 usec)
<= 9F 7F 2A 40 70 95 16 40 51 30 84 30 1A 61 12 00 ..*@[email protected]..
69 00 90 95 59 40 70 61 19 00 00 00 00 06 31 13 [email protected].
30 36 39 30 30 00 00 00 00 00 00 00 00 90 00 06900..........
Status: No Error
IC Fabricator : 4070
IC Type : 9516
Operating System ID : 4051
Operating System release date : 3084 (25.3.2003)
Operating System release level : 301A
IC Fabrication Date : 6112 (22.4.2006)
IC Serial Number : 00690090
IC Batch Identifier : 9559
IC Module Fabricator : 4070
IC Module Packaging Date : 6119 (29.4.2006)
ICC Manufacturer : 0000
IC Embedding Date : 0000
IC Pre-Personalizer : 0631
IC Pre-Perso. Equipment Date : 1330 (26.11.2001)
IC Pre-Perso. Equipment ID : 36393030
IC Personalizer : 0000
IC Personalization Date : 0000
IC Perso. Equipment ID : 00000000 -
Howto generata a openplatform.exp within JCOP Tools?
Hi Guys,
I am trying to compile and load the coolkey applet (http://directory.fedoraproject.org/wiki/BuildCoolKeyApplet) into a Cyberflex 64k card.
The cap files need to be transformed with a byte code verifier before the card can load them.
The byte code verfifier needs all .exp files from all incuded libraries. Thus I need the openplatform.exp file.
I tried the one from http://www.globalplatform.org/specifications/archived/card-tech-201.zip but i am ending up with an error on install_for_install.
I think maybee the JCOP tools have a slightly different version and I would like to have an openplatform.ext out of my build environment which is used for the applet.
Can anybody tell me how I can generate such an exp file from the global platorm stuff included in the JCOP tools?
Regards,
FabianHi,
I am using the one from http://www.trusted-logic.com/down.php
If I call without arguments it looks like this:
java -jar captransf.jar -s -noint coolkey.cap
Cannot find export file for imported package a0:0:0:0:62:0:1
Please provide the correct export file on the command lineTo get the muscle applet working (which does not use openplatform) I've used this line with success:
java -jar captransf.jar -s -noint "api21\javacard\framework\javacard\framework.exp" "api21\javacard\security\javacard\security.exp" "api21\java\lang\javacard\lang.exp" "api21\javacardx\crypto\javacard\crypto.exp" musclecard.exp musclecard.cap??? -
Hello,
i would like to know, what scripts is JCOP tools exactly running while building Java files (generating class files) and converting them to CAP files. I.e. what does "Build autoimatically" exactly do in ECLIPSE IDE with JCOP plug-in? What .jar files are also used?
I.e. i want to be able to rebuild my Java Card projects for different version os java cards without opening the Eclipse IDE, openning projects and building them in IDE.
I would appreciate nay information.
Thanks a lot,
best regards,
newbie.Hello.
Thanks a lot lexdabear for your reply.
The post you've noticed above was very useful for me. I have solved the problem with tric.jar and also would like to add my 50 cents regarding some solutions proposed by Lillesand.
The error listed below can be simply avoided by explicitly declaring the whole name of the applet, i.e. -a 0xF3:0xF3:0xF3:0xF3:0xF3:0xA1:0xA1:0xA1:0xA1:0xA1 no.qfree.keyexport.KeyDiversification.
E:\tools\captest2>java -cp e:\eclipse\plugins\com.ibm.bluez.jcop.eclipse_3.1.2\tric.jar com.ibm.jc.apps.tric.jc.Converter
-dd e:\tools\captest2\
-cp e:\workspace\KeyExport\bin\;e:\tools\java_card_kit-2_2_2\lib\api.jar
-ep E:\tools\java_card_kit-2_2_2\api_export_files
-a 0xF3:0xF3:0xF3:0xF3:0xF3:0xA1:0xA1:0xA1:0xA1:0xA1 KeyDiversification 0xF3:0xF3:0xF3:0xF3:0xF3:0xA2:0xA2:0xA2:0xA2:0xA2 StringStorage
no.qfree.keyexport 0xF3:0xF3:0xF3:0xF3:0xF3 1 0
Error: class java.lang.RuntimeException, no such applet class LKeyDiversification; found in package no/qfree/keyexportAlso my there are some facts that i have figured out during the usage of tric.jar through command line:
1. Eclipse IDE produces slightly different .class files than i do by using
javac -source 1.3 -target 1.2 -g options during the compilation. May be it uses additional options?
2. Perhaps, as a result, a bit different CAP files are produced that the ones built automatically using Eclipse IDE GUI. Those CAP files also slightly differ in size (usually smaller tha mines). The only components that differ in size are:
Method.cap
Debug.cap.
The files produced through command line work just fine. I guess, that JCOP tools may additionally optimize the .class files to produce a bit smaller .CAP files.
3. Regarding the version information JCOP tools tric.jar produces
CAP files with version M=2, m=1 when using JC211 API, and
CAP files with version M=2, M=2 when using JC221.
I also converted the same files uding JCDKv2.2.1. It produces CAP files of version M=2, M=1.
In my opinion, all the problems that occured in the aforementioned post by Lillesand were caused by wrong usage of the JC2.2.2 export files.
I totally agree with you, lexdabear regarding choosing only one solution. In case you are using JCOP tools (through GUI or command line) you must use JCOP JC API .jar files and tric.jar converter.
If you are using JCDK, you must use its api.jar library with export files and converter from JCDK (coverter.bat).
I hope this info might be useful.
Best regards,
Eve
Edited by: Ieva on Nov 5, 2007 4:11 AM -
Hello.
Is there any way to find jct.dll, jcpcsc.dll (those are in the jcop plug-in os/ directory) analogues for 64-bit platform?
As i know, jcop tools provides only dll's and so libraries for 32-bit platforms to communicate with the card? Are there any 64-bit compatible?
I want to use Offcard API from JCOP tools on 64-bit platform (it uses mentioned above dlls or shared objects on Linux).
Best regards,
eveline-zeveline-z wrote:
Thanks for your reply.
So, Eclipse IDE with JCOP plug-in work fine on 64-bit platform without any emulation?Yes
I mean, you had no problems with connecting to a real card through the JCShell or even using JCOP Offcard API (because those are using native dll's for 32-bit platform which reside in com.ibm.bluez.jcop.eclipse_3.1.2\os\win32\x86\ directory)?I tested only on the simulator
The "com.ibm.bluez.jcop.eclipse_3.1.2\os\win32\x86\" directory is in the folder plugins in your eclipse path.
example : c:\eclipse\plugins\com.ibm.bluez.jcop.eclipse_3.1.2\os\win32\x86\
>
>
Thanks.
Best regards,
eveline-zMaDmEd -
JCOP tools ANT script generation
Hello,
does JCOP tools plug-in within Eclipse IDE provide facilities for automatic Ant .xml script generation for building the project (i.e. compilation and convertion) like it provides for javadoc generation?
I can write compilation .xml script for Ant on my own. But what about the convertion to CAP files?
Best regards,
EveI do not know of any possibility/task/facility that generates you an ant script. Ant itself is a way to automatize tasks. So I am afraid you need to dive into ant. It's worth it.
-
Since JCOP tools was moved to NXP by IBM, I can't get activation code from NXP. It is said that JCOP sample card can be used to activate JCOP tools.
Can all of JCOP family cards(10,20,30 or else) be useful for JCOP activation?
How is the activation process ?
Where can I buy JCOP sample card?
By the way,I have a contacless card reader from Gemplus and Gemcombi XR4 card.
Thanks!Bobby_SH wrote:
Since JCOP tools was moved to NXP by IBM, I can't get activation code from NXP. It is said that JCOP sample card can be used to activate JCOP tools. Yes.
Can all of JCOP family cards(10,20,30 or else) be useful for JCOP activation? Check out the nice post from sonnyyu at http://forum.java.sun.com/thread.jspa?threadID=5180928 .
How is the activation process ? As soon as you want to create a Java Card project you have the choice to unlock the tools with a JCOP engineering sample.
Where can I buy JCOP sample card?
http://www.usasmartcard.com/ for example
By the way,I have a contacless card reader from Gemplus and Gemcombi XR4 card. Should work as long they are PCSC compliant.
>
Thanks! -
JCOP Tools don't detect Omnikey Cardman 3121 reader in activation
Hello,
I am trying to activate the JCOP Tools in my MacOS X, but my reader isn't detected by Eclipse / JCOP Tools.
I have installed pcsc lite 1.4.4, and used pcsctest to check if the reader is working, and it seems to be ok:
xxx:~ tuxed$ pcsctest
MUSCLE PC/SC Lite Test Program
Testing SCardEstablishContext : Command successful.
Testing SCardGetStatusChange
Please insert a working reader : Command successful.
Testing SCardListReaders : Command successful.
Reader 01: OMNIKEY CardMan 3x21 0 0
Enter the reader number : 01
Waiting for card insertion
: Command successful.
Testing SCardConnect : Command successful.
Testing SCardStatus : Command successful.
Current Reader Name : OMNIKEY CardMan 3x21 0 0
Current Reader State : 34
Current Reader Protocol : 0
Current Reader ATR Size : b
Current Reader ATR Value : 3B 67 00 00 29 20 00 6F 78 90 00
Testing SCardDisconnect : Command successful.
Testing SCardReleaseContext : Command successful.
PC/SC Test Completed Successfully !Can anyone give me any clue to solve the problem?
Thanks in advance :)I don't know about MacOS, but you can check the info about Linux:
http://forum.java.sun.com/thread.jspa?forumID=23&threadID=5221167
PC/SC Support (Linux)
JCOP Tools only works with pcsc-lite 1.2.0. -
FYI: IBM has quit the JCOP Tools!
Hi,
I just checked the JCOP-Tools news site for new versions and found the following notice:
The JCOP project comes to a close in our lab.The whole team working on JCOP in Zurich says goodbye and thanks all the users of our tools and on-card software.
Please note that no orders for JCOP cards and activation codes can be placed on this website after January 31, 2006.
See it yourself: http://www.zurich.ibm.com/jcop/news/news.html
My suggestion for all developer who are using the JCOP-tools:
Make yourself a backup of the JCOP plugin so you will be able to install it even if the online installation repository isn't available anymore.
At least download the current plugin-file:
http://www.zurich.ibm.com/jcop/download/eclipse/plugins/com.ibm.bluez.jcop.eclipse_3.1.1.b.jar
Additionally you can download the site and feature file, too:
http://www.zurich.ibm.com/jcop/download/eclipse/site.xml
http://www.zurich.ibm.com/jcop/download/eclipse/features/com.ibm.bluez.jcop.eclipse_3.1.1.b.jar
This allows you do perform an offline installation of the JCOP tools in case you have to clean up your eclipse.
For installation you can extract this jar into a new subdirectory (named "com.ibm.bluez.jcop.eclipse_3.1.1.b") of the eclipse "plugin" directory.
BTW: They are explicitly referring to this forum for "questions and answers for using JCOP".
Perhaps that means some of the formerly JCOP members will participate in this forum? - We will see...
JanCan anybody provide details of how JCOP tools can now
be aquired?Obvious answer: contact IBM. There is a link on the old Zurich pages. I know that they still work on JCOP, but I presume they have changed the conditions on acquiring the JCOP tools, since they have matured and have left Zurich. IBM is used to doing this; see Aphaworks. If their products get to a certain stage, they become (part of) a commercial product. I don't think they still provide sample cards etc. Read their page to be sure. -
Java card cap file install error in jcop tools
When i try to run java card applet in real java card it gives this error.i used jcop tools and java version 1.5 and eclipse 3.2.when i run the applet in simulater it works fine.i saw some document it says allocate memory for the installation process.i don't know how to do that.
/term "winscard:4|SCM Microsystems Inc. SCL010 Contactless Reader 0"
--Opening terminal
> /card -a a000000003000000 -c com.ibm.jc.CardManager
resetCard with timeout: 0 (ms)
--Waiting for card...
ATR=3B 8A 80 01 4A 43 4F 50 33 31 56 32 33 32 7A ;...JCOP31V232z
ATR: T=0, T=1, Hist="JCOP31V232"
=> 00 A4 04 00 08 A0 00 00 00 03 00 00 00 00 ..............
(23807 usec)
<= 6F 65 84 08 A0 00 00 00 03 00 00 00 A5 59 9F 65 oe...........Y.e
01 FF 9F 6E 06 47 91 73 51 2E 00 73 4A 06 07 2A ...n.G.sQ..sJ..*
86 48 86 FC 6B 01 60 0C 06 0A 2A 86 48 86 FC 6B .H..k.`...*.H..k
02 02 01 01 63 09 06 07 2A 86 48 86 FC 6B 03 64 ....c...*.H..k.d
0B 06 09 2A 86 48 86 FC 6B 04 02 15 65 0B 06 09 ...*.H..k...e...
2B 85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 +...Hd...f...+..
04 01 2A 02 6E 01 02 90 00 ..*.n....
Status: No Error
cm> set-key 255/1/DES-ECB/404142434445464748494a4b4c4d4e4f 255/2/DES-ECB/404142434445464748494a4b4c4d4e4f 255/3/DES-ECB/404142434445464748494a4b4c4d4e4f
cm> init-update 255
=> 80 50 00 00 08 AC B1 90 01 BF 2D 24 A0 00 .P........-$..
(49906 usec)
<= 00 00 91 18 01 39 93 95 05 59 FF 02 00 2C BE 39 .....9...Y...,.9
5E A5 07 55 87 B8 C3 A8 A6 93 66 2B 90 00 ^..U......f+..
Status: No Error
cm> ext-auth plain
=> 84 82 00 00 10 0C AE 50 3E C8 7E 1D 92 29 E2 59 .......P>.~..).Y
08 D9 DA 02 16 .....
(57276 usec)
<= 90 00 ..
Status: No Error
cm> delete 060504030201
=> 80 E4 00 00 08 4F 06 06 05 04 03 02 01 00 .....O........
(40041 usec)
<= 6A 88 j.
Status: Reference data not found
jcshell: Error code: 6a88 (Reference data not found)
jcshell: Wrong response APDU: 6A88
Ignoring expected error
cm> delete 010203040506
=> 80 E4 00 00 08 4F 06 01 02 03 04 05 06 00 .....O........
(17392 usec)
<= 6A 88 j.
Status: Reference data not found
jcshell: Error code: 6a88 (Reference data not found)
jcshell: Wrong response APDU: 6A88
Ignoring expected error
cm> upload -d -b 250 "Cap File location"
=> 80 E6 02 00 13 06 01 02 03 04 05 06 08 A0 00 00 ................
00 03 00 00 00 00 00 00 00 .........
(32303 usec)
<= 00 90 00 ...
Status: No Error
=> 80 E8 00 00 FA C4 81 F2 01 00 23 DE CA FF ED 02 ..........#.....
02 04 00 01 06 01 02 03 04 05 06 12 68 6D 73 2F ............hms/
6A 61 76 61 63 61 72 64 2F 68 65 6C 6C 6F 02 00 javacard/hello..
21 00 23 00 21 00 0A 00 0B 00 1E 00 0E 00 3D 00 !.#.!.........=.
0A 00 0B 00 00 00 4D 01 BE 00 00 00 00 00 00 01 ......M.........
01 00 04 00 0B 01 02 01 07 A0 00 00 00 62 01 01 .............b..
03 00 0A 01 06 06 05 04 03 02 01 00 08 06 00 0E ................
00 00 00 80 03 00 FF 00 07 01 00 00 00 1C 07 00 ................
3D 00 01 10 18 8C 00 05 7A 05 30 8F 00 00 3D 8C =.......z.0...=.
00 01 18 1D 04 41 18 1D 25 8B 00 02 7A 02 21 18 .....A..%...z.!.
8B 00 03 60 03 7A 19 8B 00 04 2D 1A 04 25 73 00 ...`.z....-..%s.
09 00 00 00 00 00 0F 11 6D 00 8D 00 06 7A 08 00 ........m....z..
0A 00 00 00 00 00 00 00 00 00 00 05 00 1E 00 07 ................
01 00 02 00 06 00 00 01 03 80 03 02 03 80 03 03 ................
03 80 0A 01 06 80 03 00 06 80 07 01 09 00 0B 00 ................
00 00 07 05 06 04 0A 07 07 13 0B 00 4D 01 00 00 ............M...
(764519 usec)
<= 6A 80 j.
Status: Wrong data
jcshell: Error code: 6a80 (Wrong data)
jcshell: Wrong response APDU: 6A80
Unexpected error; aborting executionThanks ReNa
i am using nxp jcop 31 contact-less card.and it will support for java card 2.2.1 and global-platform card specification 2.1.1 .so i am using nxp jcop training 2007 tools and it has java card 2.2.1 and global-platform card specification 2.1.1.Inside my project there are three jar files these are jc221.jar and gp211.jar and bio10.jar
i will appreciate your help
Thanks -
Hello.
I looked through the older web sites of IBM regarding the usage of JCOP tools under Linux.
I am interested in following questions:
1. Is there any separate distributon version of JCOP tools for Linux?
2. Can sample JCOP tools 3.1.2 plugin (for Windows) be used under Linux. What has to be modified? Also what additional tools have to be installed an used for communication with real cards through PC/SC readers.
3. Is JCOP simulation option available under Linux?
I'll appreciate any help.
Best regards,
newbienewbie2007 wrote:Hello.
I looked through the older web sites of IBM regarding the usage of JCOP tools under Linux.
I am interested in following questions:
1. Is there any separate distributon version of JCOP tools for Linux?
2. Can sample JCOP tools 3.1.2 plugin (for Windows) be used under Linux. What has to be modified? Also what additional tools have to be installed an used for communication with real cards through PC/SC readers.
3. Is JCOP simulation option available under Linux?
I'll appreciate any help.
Best regards,
newbieEverything should work, except for the target pack and the non-existent Linux Pegoda driver.1. The is no seperate Linux distribution. You just need a Linux distribution for Eclipse.JCOP Tools plugin should work under Linux, except for the target pack and the non-existent Pegoda driver for Linux.1. There is no seperate Linux distribution. You just need the Linux distribution for Eclipse.
2. Prior to JCOP Tools 3.1.2 the last time something was mentioned about Linux was in the release notes of 3.1.1b . In version 3.2.0 IBM added a linux_support page to the JCOP Tools user guide (see release notes and linux_support page below).
3. There shouldn't be any problems with the generic simulation. The target pack runs only with Windows though.
h1. Release Notes
h2. Version
JCOP Tools 3.1.1.b (Bärlach)
h2. What's new?
h3. 3.1.1.b
<ul><li>New simulation (fixed static obj/arr bug, fixed instance field token bug).</li>
<li>Applet privileges can now be specified in the launch configuration dialog.</li>
<li>The "exportmap" feature is now available.</li>
<li>The JCOP Performance Test Demo ("JCOP Factor") is now included.</li>
<li>Minor bug fixes.</li>
</ul>
h2. Known problems
<ul><li>Simulations do not run (Linux, MacOS X)
The Eclipse update manager does not set the execute permission bits for the simulations. You need to manually <code>chmod 755</code> those files in ECLIPSE/plugins/com.ibm.bluez.jcop.eclipse_3.1.1.x/simuls/
</li>
<li>PC/SC Support (Linux)
JCOP Tools only works with pcsc-lite 1.2.0.
</li>
</ul>
h2. Frequently Asked Questions
Please refer to the online FAQ at http://www.zurich.ibm.com/jcop/download/eclipse/faq/.
h2. Bug Reports
Please send bug reports to [email protected]. Make sure you include the following:
<ul><li>Problem description</li>
<li>Steps to reproduce</li>
<li>Eclipse version and build number (Help > About)</li>
<li>JCOP Tools version (Help > About; click on BlueZ icon)</li>
</ul>
h2. Using JCOP Tools with Linux (>= 3.2.0)
h3. ___
Overview
The current JCOP Tools release now also offer a version for the popular Linux
operating system. Both the Windows and Linux verson provide more or less the same
functionality, and JCOP application development can thus fully succeed on Linux systems.
Nevertheless, installation of the JCOP Tools differ between Windows and Linux
where the Linux version does not provide a simple installer as in case of Windows.
Additionally, the Linux version expects a properly setup Muscle PCSC installation
as soon as you want to use them together with physical, real cards. As Muscle
PCSC is still not shipped with most Linux distributions, you must download and
install them separately from the JCOP Tools.
h3. ___
Contents
h3. ___
Software Requirements
Linux distribution
The JCOP Tools simulation has been developed on a Fedora Core 6 system, but should also work in case of
many other recent Linux distributions.
Java Development Kit
The JCOP Tools have been developed and tested with the Sun JDK 1.4.2_13-b06
for Linux. Your success with other Development Kits may vary as there are
partly subtle differences across the different devlopment kits.
PCSC
The JCOP Tools use PCSC to talk with real cards on Linux. Most distributions
do not ship with Linux PCSC by default (Fedora Core 6 does), you must thus download it fromhttp://www.linuxnet.com
and install it by yourself. If you are used to software installation under Linux,
and are not afraid of compiling and installing software packages, this should
not be a hard problem. You have to download both the base PCSC package
(including PCSC daemon and client libraries) and separately the driver
for the reader you want to use. The PCSC package contains a test program
which should tell you whether your installation is set up correctly and
communicating with a card works. The JCOP Tools have been reported to
work together with Muscle PCSC version 1.3.1-7.
JPCSC
The JCOP Tools are shipped with JPCSC which you can also download athttp://www.linuxnet.com. JPCSC
is a JNI library which offers Java applications the access to PC/SC functions
by mapping their requests to an underlying native PC/SC implementation. The JCOP
Tools - mostly written in Java - thus depend on JPCSC to communicate with real cards
on Linux. JPCSC depends on a properly installed and setup PC/SC environment.
Especially, the JAVA_LIBRARY_PATH should list the directories where the
PC/SC client libraries and the native JPCSC library libjpcsc.so ( downloadable as binary from
Windows Binary Download Here )
are installed, the CLASSPATH variable should list th___
Miscellaneous
What should work
As soon as you setup your system correctly, there should only be minor differences
between using JCOP Tools on Windows or on Linux. Emulating a real JCOP,
debugging, shell, cap-file conersion should all be possible as in case of Windows.
What is missing
No drivers or tools are currently available for using JCOP30's in contactless
mode. If you need such support, please contact directly NXP
at for further assistance.
Copyright 2001,2007 IBM Corp. All rights reserved.
Edited by: lexdabear on Sep 28, 2007 4:13 PM (I hate the new edit) -
Any senior having jcop tools 2.2 or microsoft smart card api?
Hi, i am searching for jcop tools 2.2 and microsoft smart card api. Both are not found on internet anymore. Web Search shows that both tools were very good. These tools were freely availble till 2001/2002. Can anyone help.
thanks,Well these tools have better support for sim toolkit applets. For some reason both have now removed this feature from their products.
http://www.zurich.ibm.com/csc/infosec/jcop_tools/quickstart.html -
Where can I download JCOP tools and activate it
as I have learned that :As of July 1st 2007, all support activities for the JCOP operating system on NXP/Philips silicon will be serviced by NXP Semiconductors.
Please email requests for the JCOP Tools to: [email protected]
It means that I have to request the JCOP Tools from the above mail and have no any other means?
can you tell me other way to get the JCOP Tools, thank you very much!A guy from NXP explained to me that they need to follow export control regulations strictly as it is basically an U.S. product. The second thing is that most JCOP products are Common Criteria certified and this requires that also the simulation included in JCOP is handled under NDA. To remove JCOP Tools from all this constraints would mean that all crypto functionality is minimized to the same level as in Sun's Java Card development kit (tools + simulation).
Maybe IBM had a smarter way of deailing with this or had a special deal with the U.S. customs, don't know.
Maybe you are looking for
-
Laserjet 100 color mfp m175nw - no connection scanner, reinstall driver time after time
I regularly get an error when trying to scan (wireless). Solution is to reinstall the driver. I think the problem arises after a windows update. I need to reinstall every few weeks. Anyone got a solution?
-
IBook G3 (USB): Unable to connect to the internet
Good Morning; I am having a problem with my iBook G3 Model M7701ll, 600 mhz which I just bought. The iBook is running OS 10.4.7 I live remote and my only connection to the web is dial up with a 24.4K connection on my G4 using a external USB Modem. I
-
Question?? - passing 2D array as a parameter of a stored procedure
Hi, I have been having a lot of trouble with executing a stored procedure. I'm hoping someone can help me with this: THe stored proc. has 10 parameters, 5 IN and 5 OUT. One of these parameters coming out is a 2D array, however I"m not sure how I woul
-
How to sync Safari bookmarks from snow leopard to a iPad Air?
How does one transfer, or sync Safari bookmarks from snow leopard to a iPad Air without involving iCloud?
-
Dataporting from SQL to Oracle
I m facing problem to port data from MSSQL to Oracle through Export wizard of MSSQL. The wizard is doin porting in Oracle, but when I am selectin any ported object in Oracle, its givin error:'object or view doesn t exist'. Any one have solution?