0% ont trouvé ce document utile (0 vote)
92 vues11 pages

Programmation Client JavaCard TP3

Ce document décrit les étapes pour créer une application cliente Java qui communique avec une applet JavaCard via un simulateur. Il explique comment se connecter au simulateur, sélectionner l'applet, invoquer ses méthodes et se déconnecter.

Transféré par

stepbysteptoUranus
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
92 vues11 pages

Programmation Client JavaCard TP3

Ce document décrit les étapes pour créer une application cliente Java qui communique avec une applet JavaCard via un simulateur. Il explique comment se connecter au simulateur, sélectionner l'applet, invoquer ses méthodes et se déconnecter.

Transféré par

stepbysteptoUranus
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation des cartes à puce – JavaCard

TP3 - Programmation d’une application coté client – (V2.0)

Ramzi Mahmoudi
([Link]@[Link])
TP3 - Programmation d’une application coté client
But de ce TP :

Maintenant que nous avons programmé notre applet Javcard compteur, nous pouvons
coder une application cliente : l'équivalent du terminal bancaire si notre Javacard était
une carte de paiement.

I.1 Création de l’application client sous Eclipse :

a) Création d’un nouveau projet :

▪ Créons un nouveau projet. Pour cela, dans Eclipse, aller dans le menu File,
faire New puis Project... :

▪ Choisir Java Project puis confirmer en cliquant sur Next. Donner un nom au nouveau
projet (Application client par exemple) puis cliquer sur Finish :

2
b) Ajout de la librairie « apduio » dans le classpath

Afin de pouvoir utiliser les classes servant à communiquer avec notre Javacard, il faut ajouter
la bibliothèque [Link] (présente dans le répertoire C:\JCDK \java_card_kit-2_2_2\lib).

▪ Pour cela, faire un clic droit sur notre projet Application Client puis Propriétés... :

▪ Dans la section Java Build Path, sélectionner l'onglet Librairies et cliquer sur le
bouton Add External Jars ... :

3
▪ Sélectionner alors le fichier [Link], valider et appuyer sur le bouton OK.

c) Création de la classe principale :

Tout d'abord, créons un nouveau package. Pour cela, faire un clic droit sur notre
projet, puis New et Package :

▪ Donner un nom au package (monpackageclient par exemple ), puis valider à l'aide du


bouton Finish :

▪ Créons maintenant la classe principale de notre application. Pour cela, faire un clic droit
sur le package créé puis New et Class :

4
▪ Donnons un nom à notre nouvelle classe (Maclasse par exemple ), cocher la case public
static void main puis cliquer sur Finish :

L'application cliente se trouve sur le terminal qui communique avec le serveur (applet carte),
on peut séparer l’écriture de notre application en plusieurs étapes :

Étape 1 - Connexion :

La connexion au simulateur se fait via une socket. Le simulateur écoute par défaut sur le
port 9025. La classe que nous utiliserons pour les échanges de données est CadT1Client.

/* Connexion - Javacard */
CadT1Client cad;
Socket sckCarte;
try {
sckCarte = new Socket("localhost", 9025);
[Link](true);
BufferedInputStream input = new
BufferedInputStream([Link]());
BufferedOutputStream output = new
BufferedOutputStream([Link]());
cad = new CadT1Client(input, output);
} catch (Exception e) {
[Link]("Erreur : impossible de se
connecter a la Javacard");
return;
}

/* Mise sous tension de la carte */


try {
[Link]();
} catch (Exception e) {

5
[Link]("Erreur lors de l'envoi de la
commande Powerup a la Javacard");
return;
}

Etape 2 - Sélection

La sélection d'applet se fait en envoyant la commade SELECT APDU (voir annexe A)

/* Sélection de l'applet */
Apdu apdu = new Apdu();
[Link][[Link]] = 0x00;
[Link][[Link]] = (byte) 0xA4;
[Link][Apdu.P1] = 0x04;
[Link][Apdu.P2] = 0x00;
byte[] appletAID = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x07, 0x08, 0x09, 0x00, 0x00 };
[Link](appletAID);
[Link](apdu);
if ([Link]() != 0x9000) {

[Link]("Erreur lors de la sélection de l'applet");


[Link](1);
}

Etape 3 - Invocation des services implémentés

Il suffit pour chaque opération d'initialiser correctement une instance de l'objet APDU
et de l'envoyer à la carte via l'instance de la classe CadT1Client.

/* Menu principal */
boolean fin = false;
while (!fin) {
[Link]();
[Link]("Application cliente
Javacard");
[Link]("----------------------------
");
[Link]();
[Link]("1 - Interroger le compteur");
[Link]("2 - Inrementer le compteur");
[Link]("3 - Decrementer le compteur");
[Link]("4 - Reinitialiser le
compteur");
[Link]("5 - Quitter");

6
[Link]();
[Link]("Votre choix ?");

int choix = [Link]();


while (!(choix >= '1' && choix <= '5')) {
choix = [Link]();
}

apdu = new Apdu();


[Link][[Link]] = Maclasse.CLA_MONAPPLET;
[Link][Apdu.P1] = 0x00;
[Link][Apdu.P2] = 0x00;
[Link](0x7f);

switch (choix) {
case '1':
[Link][[Link]] =
Maclasse.INS_INTERROGER_COMPTEUR;
[Link](apdu);
if ([Link]() != 0x9000) {
[Link]("Erreur :
status word different de 0x9000");
} else {
[Link]("Valeur du
compteur : " + [Link][0]);
}
break;

case '2':
[Link][[Link]] =
Maclasse.INS_INCREMENTER_COMPTEUR;
[Link](apdu);
if ([Link]() != 0x9000) {
[Link]("Erreur :
status word different de 0x9000");
} else {
[Link]("OK");
}
break;

case '3':
[Link][[Link]] =
Maclasse.INS_DECREMENTER_COMPTEUR;
[Link](apdu);
if ([Link]() != 0x9000) {
[Link]("Erreur :
status word different de 0x9000");
} else {
[Link]("OK");
}
break;

7
case '4':
[Link][[Link]] =
Maclasse.INS_INITIALISER_COMPTEUR;
byte[] donnees = new byte[1];
donnees[0] = 0;
[Link](donnees);
[Link](apdu);
if ([Link]() != 0x9000) {
[Link]("Erreur :
status word different de 0x9000");
} else {
[Link]("OK");
}
break;

case '5':
fin = true;
break;
}
}

Etape 4 - Mise hors tension

La déconnexion de la Javacard se fera via la méthode powerDown() de la


classe CadT1Client :

/* Mise hors tension de la carte */


try {
[Link]();
} catch (Exception e) {
[Link]("Erreur lors de l'envoi de la
commande Powerdown a la Javacard");
return;
}

8
I.2 Utilisation de l'application cliente avec un simulateur - JCWDE

Afin de pouvoir lancer le simulateur de notre applet en ligne de commande, nous allons
créer un fichier "de configuration". Il permet de lister les applets Javacard à installer pour
la simulation et de spécifier leurs AID respectifs.

▪ Créons notre fichier que nous appellerons "[Link]" (répertoire parent du


package contenant le fichier class de l'applet card « .\workspace\TP Javacard\bin ») . Il
contiendra la ligne suivante :

[Link] 0x01:0x02:0x03:0x04:0x05:0x06:0x07:0x08:0x09:0x00:0x00

▪ Nous pouvons maintenant lancer notre simulateur, en prenant soin de nous placer dans
le bon répertoire (répertoire parent du package contenant le fichier class de l'applet
« .\workspace\TP Javacard\bin ») :

▪ Maintenant que notre simulateur est lancé, lançons notre application cliente :

▪ Commençons par interroger le compteur : tapons 1 puis validons :

9
▪ Le compteur est bien à 0. Incrémentons maintenant le compteur 3 fois puis
décrémentons-le une fois. Lorsque nous réinterrogeons la carte, le compteur vaut 2
donc tout va bien :

▪ Quittons maintenant notre application cliente (commande 5). Nous pouvons voir que
le simulateur se termine automatiquement à la réception de la commande
"powerdown" :

jcwde exiting on receipt of power down command.

10
Remarque:

Le simulateur JCWDE ne permet pas de conserver l'état de la carte. Si nous le relançons,


le compteur sera à 0 et non à 2.

11

Vous aimerez peut-être aussi