JCOP tools under linux - no readers detected for activation
[eclipse 3.1.2, pcsc-lite 1.4, redhat el3]
I just downloaded the JCOP tools as described in the following post:
http://forum.java.sun.com/thread.jspa?forumID=23&threadID=722788
I found that it would not install under linux, because win32 has been specified in the site and feature manifest files. When I removed these entries, it installed OK.
Now, when I attempt to activate using my "engineering sample" card, the activation wizard notifies me that no PC/SC readers were detected. I'm puzzled by this, since pcsc-lite (1.4) is working well on my system, and I can see the reader & card being detected in pcscd's log. I have also been careful to ensure that eclipse knows about the shared library paths and I've even included jpcsc.jar as an extra library.
If anyone else has JCOP tools working under linux, I'd appreciate any insights that might help. My issue may be simply that I have downloaded a custom windows distribution (tools.zip) - hence the manifest hack - perhaps there is a linux one?
Could be the pcsc-lite 1.4 version the problem?
http://forum.java.sun.com/thread.jspa?forumID=23&threadID=688560PC/SC Support (Linux)
JCOP Tools only works with pcsc-lite 1.2.0.
Similar Messages
-
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) -
Video/Audio tools under Linux???
Hi,
I'm very green in this but is assigned the task of
setting up IP/TV clients on a Linux box. We used
IP/TV 3417 and it worked fine with WinXP + Cisco
IP/TV Viewer.
I'm trying vic and vat. The former doesn't seem to
recognize MPEG streams and the later has always
complained "vat: Sorry, cannot decode this type of
audio" where the audio formats on our network are
L8 and MPEG3 (whatever these mean).
My question is, can someone point me to a video/audio
tool under Linux that understands more video/audio
formats?
Thank you.
WeiI think, the IP/TV clients do not run on Linux boxes. It does on Windows alone. Check out the following document for more details.
Chapter 2: Requirements
http://www.cisco.com/en/US/products/sw/conntsw/ps1869/products_user_guide_chapter09186a00800eaccb.html -
Using the Oracle Repository Command Line Tool under Linux
I have to use the command lines of Linux for SCM commands(like repcmd,
set workarea, checkin etc...)
should I have to install something?
I have documentation for using the oracle repository command line Toll
for Windows and Unix, but I didn't found anything about using the oracle
repository command line Tool for Linux.JDeveloper runs excellent on Linux and is supposed to be able to use the repository, but that's a GUI...
-
JCOP Tools init-update problem
Hello, everybody!!!
I wanna simulate CardManager authentication behaviour and have some problems... Below i show you excerpts from my applet and the process of sending INITIALIZE UPDATE command to it using JCOP Shell.
If somebody has an idea to deal with this issue, please help.
Here's the definition of key i've used:
byte[] secKey = new byte[] {
(byte)0x40, (byte)0x41, (byte)0x42, (byte)0x43,
(byte)0x44, (byte)0x45, (byte)0x46, (byte)0x47
};This is done inside the constructor (secKey declared as a class field).
Next, i've added method to process INITIALIZE UPDATE command:
private boolean processInitUpdate(APDU apdu) {
byte[] buffer = apdu.getBuffer();
if((buffer[ISO7816.OFFSET_CLA] != 0x80) &&
(buffer[ISO7816.OFFSET_INS] != 0x50))
return false;
byte challengeLen = buffer[ISO7816.OFFSET_LC];
byte dataRead = (byte)apdu.setIncomingAndReceive();
if((challengeLen != 0x08) || (dataRead != 0x08)) {
ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
// Encrypted cryptogram buffer
byte[] cryptogram = new byte[8];
DESKey des_key = (DESKey)KeyBuilder.buildKey(
KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES, false);
des_key.setKey(secKey, (short)0);
Cipher cipher = Cipher.getInstance(Cipher.ALG_DES_ECB_NOPAD, false);
cipher.init(des_key, Cipher.MODE_ENCRYPT);
// Encrypt the incoming challenge
cipher.doFinal(buffer, ISO7816.OFFSET_CDATA, (byte)8, cryptogram, (byte)0);
// Output data
byte[] keyDeriviation = new byte[] {
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00
byte[] keyInfo = new byte[] {
(byte)0xff, (byte)0x02
// TODO generate random
byte[] challenge = new byte[] {
(byte)0x11, (byte)0x22, (byte)0x33, (byte)0x44,
(byte)0x55, (byte)0x66, (byte)0x77, (byte)0x88
// Calculate total length of the data to be sent
short totalLen = (short)(keyDeriviation.length + keyInfo.length +
cryptogram.length + challenge.length);
apdu.setOutgoing();
apdu.setOutgoingLength(totalLen);
apdu.sendBytesLong(keyDeriviation, (short)0, (short)keyDeriviation.length);
apdu.sendBytesLong(keyInfo, (short)0, (short)keyInfo.length);
apdu.sendBytesLong(challenge, (short)0, (short)challenge.length);
apdu.sendBytesLong(cryptogram, (short)0, (short)cryptogram.length);
return true;
}This method returns true if command has been processed successfully.
I've used GlobalPlatform specification to properly parse command APDU and to generate response APDU.
Then i use JCOP Tools for Eclipse shell. I select above applet and define keys as follows:
set-key 255/1/DES-ECB/4041424344454647
set-key 255/2/DES-ECB/4041424344454647
set-key 255/3/DES-ECB/4041424344454647Then i use init-update command:
init-update 255Shell generates the following APDU command sequence:
80 50 00 00 08 C3 17 13 59 C6 0F ED ED 00We can see the challenge, generated by simulator: C3 17 13 59 C6 0F ED ED.
I got the response:
00 00 00 00 00 00 00 00 00 00 FF 02 11 22 33 44 55 66 77 88 4D 4C E8 7E 6A 04 B1 43 90 00It seems everything all right, but shell shows an error:
Status: No Error
jcshell: Error code: -5 (Authentication failed)
jcshell: Wrong response APDU: 00000000000000000000FF0211223344556677884D4CE87E6A04B1439000I think I set keys inside the shell incorrectly. I use triple-DES, but code uses simple DES. However, i use equal keysets for triple-DES so it's the same as DES.
What's wrong?
Thank you.Hello everybody, again!
At last, I solved my problem. The issue was I incorrectly generated card cryptogram data. Cryptogram must be constructed using full triple DES algorithm. After that JCOP shell processes init-update 255 successfully.
Below I'll present working code for processing INITIALIZE UPDATE command in JCOP tools, maybe this will be helpful for somebody.
private boolean processInitUpdate(APDU apdu) {
byte[] buffer = apdu.getBuffer();
// Whether this INITIALIZE UPDATE command?
if((buffer[ISO7816.OFFSET_CLA] != 0x80) &&
(buffer[ISO7816.OFFSET_INS] != 0x50))
return false;
byte challengeLen = buffer[ISO7816.OFFSET_LC];
byte dataRead = (byte)apdu.setIncomingAndReceive();
if((challengeLen != 0x08) || (dataRead != 0x08)) {
ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
// TODO generate random
// Card challange
byte[] challenge = new byte[] {
(byte)0x11, (byte)0x22, (byte)0x33, (byte)0x44,
(byte)0x55, (byte)0x66, (byte)0x77, (byte)0x88
// DES Secure Channel Encryption Key (S-ENC) generation
// Deriviation data array
byte[] derivData = new byte[16];
// Secure Channel Encryption Key data array
byte[] s_enc_key = new byte[16];
// The construction of deriviation data
Util.arrayCopy(buffer, (short)(ISO7816.OFFSET_CDATA + 4), derivData, (short)12, (short)4);
Util.arrayCopy(challenge, (short)0, derivData, (short)8, (short)4);
Util.arrayCopy(buffer, ISO7816.OFFSET_CDATA, derivData, (short)4, (short)4);
Util.arrayCopy(challenge, (short)4, derivData, (short)0, (short)4);
// Construct and initialize Cipher with des_key
DESKey des_key = (DESKey)KeyBuilder.buildKey(
KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES3_2KEY, false);
des_key.setKey(secKey, (short)0);
Cipher cipher = Cipher.getInstance(Cipher.ALG_DES_ECB_NOPAD, false);
cipher.init(des_key, Cipher.MODE_ENCRYPT);
// Generate session S-ENC key
cipher.doFinal(derivData, (byte)0, (byte)derivData.length, s_enc_key, (byte)0);
// Card Authentication Cryptogram generation
// Cryptogram data array
byte[] cryptogram = new byte[8];
// Initial vector data
byte[] initVector = new byte[] {
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00
// Construct and initialize Cipher with s_enc_key
des_key.setKey(s_enc_key, (short)0);
cipher = Cipher.getInstance(Cipher.ALG_DES_CBC_NOPAD, false);
cipher.init(des_key, Cipher.MODE_ENCRYPT, initVector, (short)0, (short)initVector.length);
// Extract host challenge from input buffer
byte[] hostChallenge = new byte[8];
Util.arrayCopy(buffer, ISO7816.OFFSET_CDATA, hostChallenge, (short)0, (short)hostChallenge.length);
// Step 1: Encrypt host challenge using ICV of binary zeroes
byte[] inputData = xorOperation(initVector, hostChallenge);
cipher.doFinal(inputData, (short)0, (short)inputData.length, cryptogram, (short)0);
// Step 2: Encrypt card challenge using results of the previous operation
inputData = xorOperation(cryptogram, challenge);
cipher.doFinal(inputData, (short)0, (short)inputData.length, cryptogram, (short)0);
// Step 3: Encrypt DES padding data using results of the previous operation
byte[] pad = new byte[] {
(byte)0x80, (byte)0x00, (byte)0x00, (byte)0x00,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00
inputData = xorOperation(cryptogram, pad);
cipher.doFinal(inputData, (short)0, (short)inputData.length, cryptogram, (short)0);
// Generate output
byte[] keyDeriviation = new byte[] {
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00
byte[] keyInfo = new byte[] {
(byte)0xff, (byte)0x01
// Calculate total length of the data to be sent
short totalLen = (short)(keyDeriviation.length + keyInfo.length +
cryptogram.length + challenge.length);
apdu.setOutgoing();
apdu.setOutgoingLength(totalLen);
apdu.sendBytesLong(keyDeriviation, (short)0, (short)keyDeriviation.length);
apdu.sendBytesLong(keyInfo, (short)0, (short)keyInfo.length);
apdu.sendBytesLong(challenge, (short)0, (short)challenge.length);
apdu.sendBytesLong(cryptogram, (short)0, (short)cryptogram.length);
return true;
private byte[] xorOperation(byte[] op1, byte[] op2) {
byte[] res = new byte[8];
if((op1.length != 8) || (op2.length != 8)) return null;
for(byte i = 0; i < res.length; i++) {
res[i] = (byte)(op1[i] ^ op2);
return res;
Regards, Eugene. -
Message is "waiting for activation"
I cant send messages. In settings under message it says "waiting for activation". I can make phone calls.
iOS: Using FaceTime
-
Iphone 3 doesn't send or receive text Imessage waiting for activation
my iphone 3 doesn;t send or receive text messages under settings, Imessage is waiting for activation. I have downloaded Itunes again but still doesnt work
Do you have iMessage on? I couldn't send iMessages and still don't know how to fix it. I switched it off and the phone started sending plain "green" SMS.
-
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. -
How to enable OCR with Scangear MP under Linux for MG8250?
Under Linux openSUSE 12.3 I use Scangear MP 1.80 for my Canon PIXMA MG8250.
As a scan target (in my German GUI it's "Ziel") I can choose "OCR". But there is no text output, the scan is just saved as a picture. How can I configure Scangear to open the scan via Tesseract in a text editor.
By the way, the target "Print" (in German "Drucken") leads to saving just as well, though there is at least one printer at hand, of course.
It's a pity that the pixma scan drivers that are shipped with openSUSE don't work with xsane (the scanner starts working, but stops after one third of the page). Using xsane with a different scanner I can use OCR successfully.
VolkerThere are two basic types of core OCR algorithm, which may produce a ranked list of candidate characters.
Matrix matching involves comparing an image to a stored glyph on a pixel-by-pixel basis; it is also known as "pattern matching" or "pattern recognition". This relies on the input glyph being correctly isolated from the rest of the image, and on the stored glyph being in a similar font and at the same scale. This technique works best with typewritten text and does not work well when new fonts are encountered. This is the technique the early physical photocell-based OCR implemented, rather directly.
Feature extraction decomposes glyphs into "features" like lines, closed loops, line direction, and line intersections. These are compared with an abstract vector-like representation of a character, which might reduce to one or more glyph prototypes. General techniques of feature detection in computer vision are applicable to this type of OCR, which is commonly seen in "intelligent" handwriting recognition and indeed most modern OCR software. Nearest neighbour classifiers such as the k-nearest neighbors algorithm are used to compare image features with stored glyph features and choose the nearest match.
Software such as Cuneiform and Tesseract use a two-pass approach to character recognition. The second pass is known as "adaptive recognition" and uses the letter shapes recognized with high confidence on the first pass to better recognize the remaining letters on the second pass. This is advantageous for unusual fonts or low-quality scans where the font is distorted.
So I wonder which kind of OCR algorithm are you using? -
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);
} -
Vhost configuration for Adobe Media Server running under linux.
Please help me with Vhost configuration for Adobe Media Server running under linux.
I was running a media sharing website for which I wanted to use Adobe Media Server.
To use, AMS, I disabled the already installed Apache server and installed AMS along with the built in Apache server. I could successfully install AMS and could login to AMS Admin Console through my IP number.
My existing website, www.mydomain.com is having its contents located at:
/home/mydomain/public_html
(Directory created under the old version of Apache not bundled with AMS)
Users will be uploading their videos, which will get transcoded and will be delivered to the website visitors in the existing scenario.
To use this website with AMS, this is what I did:
I created a folder for my domain, www.mydomain.com as below
/opt/adobe/ams/conf/_defaultRoot_/www.mydomain.com
Copied Application.xml and Vhost.xml from /opt/adobe/ams/conf/_defaultRoot_/ and pasted them in /opt/adobe/ams/conf/_defaultRoot_/www.mydomain.com
In the Application.xml file there are 2 entries:
<Alias name="mydomain.com"></Alias>
<AppsDir>${/home/mydomain/public_html}</AppsDir>
Please help me with further steps to be completed:
Do I need to create a separate VirtualHost entry in the Apache installed with AMS?
If yes, can I specify already existing document root for my website (/home/mydomain/public_html) or do I need to create a separate folder under webroot/Apache ?
If yes to point 2 above, then do I need to copy all the existing contents from /home/mydomain/public_html to the newly created folder ?
I hope, I can serve all my static contents like html pages and php and media like video/audio. In that case do I need create alias to my Media/Alias folder or AMS will automatically start streaming when a video/audio is requested ?
What other steps do i need to complete?
Any help in this regard would be highly appreciated.
Thanks and RegardsDear sir or madam,
Here is Letswin Technology, which specializes in global servers, web hosting, VPS, VPNj. If anything I can do for you, pls contact us!
Have a nice day! -
The best combination of oracle tools and linux for server and client pcs
Hi experts
I want to know that which is the best certified/tested/best "Linux" operating system / flavor for oracle 10g ids for client and programmers
for client: access through browser and/or as client/server
for programmers: development
ThanksAll certified Linux distributions you can find here:
http://www.oracle.com/technology/support/metalink/index.html -
Request for JCOP tool and gpShell tool download URL
Hi friends,
I am not able to get JCOP tool from any downloadable site. If any one have JCOP tool and other tools related to Java card pls send me to my email id [email protected]
Or pls send me the valid URL to download those tools.
regards,
dhaya.Deborah,
It would have been helpful if you had posted here with Firefox, instead of IE; that way we would have seen the Firefox user agent. Based upon the cut off description you posted in the Topic field, your problem is likely caused by a modified user agent that the addons website doesn't understand.
[http://en.wikipedia.org/wiki/User_Agent]
type '''about:config''' in the URL bar and hit Enter
''If you see the warning, you can confirm that you want to access that page.''
Filter = '''general.useragent.'''
Right-click the preferences that are '''bold''', one line at a time, and select '''''Reset''''',
Then restart Firefox -
JMF code working under linux but not windows XP
Hello everyone,
I'm currently working on a nice cross-platform project involving sound producing. I decided to take a look at JMF and test it a bit to know if its features can suit me. I tried to make it works under windows, using a very simple sample of code. The system seems to play the sound as some console output detects the start and the end, but all i hear is a very short noise ( 1/2second ) like a "CLIK" and nothing else. I tested the code under linux, using the same computer and it works just fine, playing the same wave nicely and entirely.
some info:
-i used the cross platform JMF, no performance pack ( i tried it , but still no result )
-the code just opens a file dialog and plays the selected file
-the selected file was always a very simple .wav
-i did not use system classpath variables because i don't like it, i rather use local classpath ( which works fine too, no doubt about it )
-i tested this little soft on 2 other computer using windows XP, and still got the same result.
Please, have you got an idea about what's going on ?
Thanks a lot for any answer!
Maxime - Paris . France
Code Sample:
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.media.*;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
public class JMFSound extends Object implements ControllerListener {
File soundFile;
JDialog playingDialog;
public static void main (String[] args) {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File f = chooser.getSelectedFile();
try {
JMFSound s = new JMFSound (f);
} catch (Exception e) {
e.printStackTrace();
public JMFSound (File f) throws NoPlayerException, CannotRealizeException, MalformedURLException, IOException {
soundFile = f;
// prepare a dialog to display while playing
JOptionPane pane = new JOptionPane ("Playing " + f.getName(), JOptionPane.PLAIN_MESSAGE);
playingDialog = pane.createDialog (null, "JMF Sound");
playingDialog.pack();
// get a player
MediaLocator mediaLocator = new MediaLocator(soundFile.toURL());
Player player = Manager.createRealizedPlayer (mediaLocator);
player.addControllerListener (this);
player.prefetch();
player.start();
playingDialog.setVisible(true);
// ControllerListener implementation
public void controllerUpdate (ControllerEvent e) {
System.out.println (e.getClass().getName());
if (e instanceof EndOfMediaEvent) {
playingDialog.setVisible(false);
System.exit (0);
Message was edited by:
Monsieur_MaxHello everyone,
I'm currently working on a nice cross-platform project involving sound producing. I decided to take a look at JMF and test it a bit to know if its features can suit me. I tried to make it works under windows, using a very simple sample of code. The system seems to play the sound as some console output detects the start and the end, but all i hear is a very short noise ( 1/2second ) like a "CLIK" and nothing else. I tested the code under linux, using the same computer and it works just fine, playing the same wave nicely and entirely.
some info:
-i used the cross platform JMF, no performance pack ( i tried it , but still no result )
-the code just opens a file dialog and plays the selected file
-the selected file was always a very simple .wav
-i did not use system classpath variables because i don't like it, i rather use local classpath ( which works fine too, no doubt about it )
-i tested this little soft on 2 other computer using windows XP, and still got the same result.
Please, have you got an idea about what's going on ?
Thanks a lot for any answer!
Maxime - Paris . France
Code Sample:
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.media.*;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
public class JMFSound extends Object implements ControllerListener {
File soundFile;
JDialog playingDialog;
public static void main (String[] args) {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File f = chooser.getSelectedFile();
try {
JMFSound s = new JMFSound (f);
} catch (Exception e) {
e.printStackTrace();
public JMFSound (File f) throws NoPlayerException, CannotRealizeException, MalformedURLException, IOException {
soundFile = f;
// prepare a dialog to display while playing
JOptionPane pane = new JOptionPane ("Playing " + f.getName(), JOptionPane.PLAIN_MESSAGE);
playingDialog = pane.createDialog (null, "JMF Sound");
playingDialog.pack();
// get a player
MediaLocator mediaLocator = new MediaLocator(soundFile.toURL());
Player player = Manager.createRealizedPlayer (mediaLocator);
player.addControllerListener (this);
player.prefetch();
player.start();
playingDialog.setVisible(true);
// ControllerListener implementation
public void controllerUpdate (ControllerEvent e) {
System.out.println (e.getClass().getName());
if (e instanceof EndOfMediaEvent) {
playingDialog.setVisible(false);
System.exit (0);
Message was edited by:
Monsieur_Max
Maybe you are looking for
-
How do I connect a MacPro without an airport card to my wireless network
I have a MacPro that does not have an airport card. I have a Verizon FIOS wireless router. I connected my time capsule to the router with an Ethernet cable and my MacBook Pro has no problem connecting to the network. I placed my airport extreme upsta
-
Hi experts I have a FI requeriment and I've been searching BKPF and BSEG tables conection with WITH_ITEM and BNKA tables, how could I connect this table for FI Withholding tax by bank report? I will appreciate any helpfull answer. Regards Tokio
-
Can't create new DB Connections
I am currently running version 2.1.1.64 of SQL Developer. I currently have 4 DB connection that work fine. I haven't used it in about 8 weeks, and yesterday I needed to make a New connection. It would not do ANYTHING when I select the NEW Connection
-
Performance Managment-- Appraisal
Hi, I just need to make sure that i am not missing anything. I am setting up the appraisal in the Performance Management. I did the following steps: 1. Define my rating scale. 2. Adding competencies. 3. Adding records in the competence type 4. Create
-
Hi please I have a case where two dimesions are to be linked by a bridge table dim a Accid PK Dim b Bid PK Accid FK Fact table Fid PK Accid FK Bridge table Aid PK Bid PK I have checked different examples online, and they used small data and insert th