Beruflich Dokumente
Kultur Dokumente
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
Sys tmes lec troniques N umriques
Groupe SEN
Cours en ligne A ide au choix des parcours A ffectations de projets Guides, manuels, mementos
Projets Recherche Site web COMELEC Site web ENST Intranet COMELEC Wiki COMELEC
Enseignement
BCI Cycle master C SMLP ELEC 222 ELEC 223 ELEC 342 - SO C ELEC 390 ELEC INF344 / ELEC INF381 ELEC INF359 Etude s biblio 2010-2011 Etude s biblio 2011-2012 Mini-proje ts 2008-2009 Mini-proje ts 2009-2010 TD SC A TP Javacard 1/2 TP Javacard 2/2 ELEC 920 / NSS04 Projets matriels Les stages TEL
Objectif du TP
C e TP a pour but de vous initier la programmation de cartes Java (Javacard) l'aide d'un environnement de dveloppement gratuit vous permettant de dvelopper des applets (appeles parfois cardlets car elles s'excutent sur la carte puce), dvelopper des applications clientes pour communiquer avec les cartes et de les tester l'aide d'un simulateur de carte. C e sujet est inspir du tutoriel "Introduction la programmation de Javacard sous Windows" crit par un ancien lve de l'cole et publi sur le site developpez.com (http://julienb.developpez.com/tutoriels/java/introjavacard/).
Quelques rappels
Les APDU
Les changes entre carte et terminal se font au moyen d'APDUs (suite d'octets respectant nu format dfini dans le standard ISO7816-4). Nous utiliserons dans ce TP l'APDU de requte suivante :
C onnexion utilisateur
Nom d'utilisate ur :
Offset
6 ... 6 + (Lc 1)
6 + Lc
Mot de passe :
Se connecter
C LA = octet de classe dfini pour des types de cartes particuliers (exemples : 0xBC pour les cartes vitales, 0x0A pour les cartes SIM, 0x00 pour les Mastercard/Visa) INS = octet d'instruction P1 = paramtre 1 P2 = paramtre 2 Lc = taille des donnes (0x00 si pas de donnes) Le = taille maximale des donnes pour la rponse La carte rpond en envoyant les donnes de rponse (si il y a) suivies d'un status word cod sur 2 octets (nomms SW1 et SW2). Gnralement, SW1 indique le type de rponse et SW2 fournit des informations supplmentaires. Quelques exemples de status word : SW1 SW2 Signification 0x90 0x61 0x00 Pas d'erreur xx Pas de problme Avertissement Erreur d'excution C ommande incorrecte
Instructions d'installation
sen.enst.fr/node/408
1/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
Installation du Java Card Development Kit 2.2.2
Dzipper l'archive dans le rpertoire de votre choix (~ / E L E C I N F 3 5 9par exemple) (pour information, l'archive a té rcupre l'adresse http://java.sun.com/products/javacard/dev_kit.html)
~ / E L E C I N F 3 5 9 $u n z i p~ d u c / e n s e i g n e m e n t s / T P _ E L E C I N F 3 5 9 / j a v a _ c a r d _ k i t 2 _ 2 _ 2 l i n u x . z i p
Aller alors dans le rpertoire j a v a _ c a r d _ k i t 2 _ 2 _ 2et dcompresser l'archive java_card_kit-2_2_2-rr-bin-linux-do.zip (supprimez ensuite l'archive afin d'conomiser de l'espace) :
~ / E L E C I N F 3 5 9 $c dj a v a _ c a r d _ k i t 2 _ 2 _ 2 ~ / E L E C I N F 3 5 9 / j a v a c a r d _ k i t 2 _ 2 _ 2 $u n z i pj a v a _ c a r d _ k i t 2 _ 2 _ 2 r r b i n l i n u x d o . z i p ~ / E L E C I N F 3 5 9 / j a v a c a r d _ k i t 2 _ 2 _ 2 $r mj a v a _ c a r d _ k i t 2 _ 2 _ 2 r r b i n l i n u x d o . z i p
Note : les 3 autres archives ZIP ne seront pas utilises dans ce TP. Elles contiennent, entre autres, la Javadoc du JC DK de Sun.
~ / E L E C I N F 3 5 9 $t a rz x v fe c l i p s e j c d e 0 . 1 l i n u x . t g z
Lancer Eclipse :
~ / E L E C I N F 3 5 9 $e c l i p s e v m/ u s r / b i n / j a v a
Aller dans le menu "Help" / "Software Updates" / "Manage Configuration" C liquer sur "Add an Extension Location" Slectionner le rpertoire eclipse contenant le plugin (~ / E L E C I N F 3 5 9 / e c l i p s edans notre cas) C liquer sur "Yes" pour redmarrer Eclipse Aller dans le menu "Java Card" / "Preferences" Renseigner le champ "Java Card Home " (~ / E L E C I N F 3 5 9 / j a v a _ c a r d _ k i t 2 _ 2 _ 2dans notre cas) puis cliquer sur "OK" ce stade, nous disposons d'un environnement de dveloppement permettant de crer des applet Javacard, de les simuler et crer des applications clientes.
C liquer alors sur le bouton Next. Donner alors un nom au projet. Nous l'appellerons "Tutoriel Javacard" :
A ce stade, nous venons de crer notre projet. Nous allons maintenant crer notre applet Javacard. Pour cela, aller dans le menu File , faire New puis Other... Slectionner alors "Java Card Applet" puis cliquer sur le bouton Next. Donner alors un nom au package
sen.enst.fr/node/408
2/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
ainsi qu' l'applet. Nous les appellerons respectivement "monpackage " et "MonApplet" :
C liquer alors sur le bouton Finish. Eclipse vient de gnrer automatiquement le squelette de notre Applet :
C lic droit sur le package monpackage , Java Card Tools, Set Package AID :
Appuyer sur le bouton OK . Le Package AID doit obligatoirement tre un prfixe de l'applet AID.
p a c k a g em o n p a c k a g e ; i m p o r tj a v a c a r d . f r a m e w o r k . A P D U ; i m p o r tj a v a c a r d . f r a m e w o r k . A p p l e t ; i m p o r tj a v a c a r d . f r a m e w o r k . I S O 7 8 1 6 ; i m p o r tj a v a c a r d . f r a m e w o r k . I S O E x c e p t i o n ; p u b l i cc l a s sM o n A p p l e te x t e n d sA p p l e t{
sen.enst.fr/node/408
3/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
/ *C o n s t a n t e s* / p u b l i cs t a t i cf i n a lb y t eC L A _ M O N A P P L E T=( b y t e )0 x B 0 ; p u b l i cs t a t i cf i n a lb y t eI N S _ I N C R E M E N T E R _ C O M P T E U R=0 x 0 0 ; p u b l i cs t a t i cf i n a lb y t eI N S _ D E C R E M E N T E R _ C O M P T E U R=0 x 0 1 ; p u b l i cs t a t i cf i n a lb y t eI N S _ I N T E R R O G E R _ C O M P T E U R=0 x 0 2 ; p u b l i cs t a t i cf i n a lb y t eI N S _ I N I T I A L I S E R _ C O M P T E U R=0 x 0 3 ; / *A t t r i b u t s* / p r i v a t eb y t ec o m p t e u r ; / *C o n s t r u c t e u r* / p r i v a t eM o n A p p l e t ( ){ c o m p t e u r=0 ; } p u b l i cs t a t i cv o i di n s t a l l ( b y t eb A r r a y [ ] ,s h o r tb O f f s e t ,b y t eb L e n g t h )t h r o w sI S O E x c e p t i o n{ n e wM o n A p p l e t ( ) . r e g i s t e r ( ) ; } }
Puis nous codons notre mthode p r o c e s s:
Outils de simulation
Avant de commencer les simulations, faire un clic droit sur le package monpackage , slectionner Java Card Tools puis Generate Script. C eci a pour consquence de gnrer automatiquement les APDU ncessaires l'upload, l'instanciation (installation) et la slection de l'applet sur une Javacard. m o n p a c k a g e . j a v a c a r dcontient alors 3 scripts : cap-download.script : upload de l'applet create-MonApplet.script : instanciation (installation) de l'applet select-MonApplet.script : slection de l'applet
J A V A _ H O M E: le chemin d'accs au Java Development Kit J C _ H O M E: le chemin d'accs au Java C ard Development Kit ~ / E L E C I N F 3 5 9 $e x p o r tJ A V A _ H O M E = / u s r ~ / E L E C I N F 3 5 9 $e x p o r tJ C _ H O M E = / s t u d / u s e r s / p r o m o X X / Y Y Y / E L E C I N F 3 5 9 / j a v a _ c a r d _ k i t 2 _ 2 _ 2
Il faut galement rendre les scripts excutables, et ventuellement ajouter le chemin d'accs dans le P A T Hpour plus de facilit :
sen.enst.fr/node/408
4/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
L'outil APDUTOOL du JC DK permet d'changer des APDU avec une Javacard relle ou un simulateur. Nous l'utiliserons dans la suite de ce tutoriel.
C liquer sur le bouton OK pour lancer le simulateur JC WDE avec notre applet. Le simulateur est alors lanc et attend une connexion (le simulateur et l'outil apdutool communiquent l'aide d'une socket rseau). Nous pouvons alors lancer l'outil APDUTOOL. Pour cela, ouvrir un terminal dans lequel on aura pris soin de dfinir les variables d'environnement, puis taper a p d u t o o let valider :
~ / E L E C I N F 3 5 9 $a p d u t o o l J a v aC a r d2 . 2 . 2A P D UT o o l ,V e r s i o n1 . 3 C o p y r i g h t2 0 0 5S u nM i c r o s y s t e m s ,I n c .A l lr i g h t sr e s e r v e d .U s ei ss u b j e c tt ol i c e n s et e r m s . O p e n i n gc o n n e c t i o nt ol o c a l h o s to np o r t9 0 2 5 . C o n n e c t e d .
Installons notre applet en recopiant les APDU contenus dans le script c r e a t e M o n A p p l e t . s c r i p t(sauf la dernire instruction p o w e r d o w n ):
p o w e r u p ; / /S e l e c tt h ei n s t a l l e ra p p l e t 0 x 0 00 x A 40 x 0 40 x 0 00 x 0 90 x a 00 x 0 00 x 0 00 x 0 00 x 6 20 x 0 30 x 0 10 x 0 80 x 0 10 x 7 F ; / /c r e a t eM o n A p p l e ta p p l e t 0 x 8 00 x B 80 x 0 00 x 0 00 x d0 x b0 x 0 10 x 0 20 x 0 30 x 0 40 x 0 50 x 0 60 x 0 70 x 0 80 x 0 90 x 0 00 x 0 00 x 0 00 x 7 F ; R e c e i v e dA T R=0 x 3 b0 x f 00 x 1 10 x 0 00 x f f0 x 0 0 C L A :0 0 ,I N S :a 4 ,P 1 :0 4 ,P 2 :0 0 ,L c :0 9 ,a 0 ,0 0 ,0 0 ,0 0 ,6 2 ,0 3 ,0 1 ,0 8 ,0 1 ,L e :0 0 ,S W 1 :9 0 ,S W 2 :0 0 C L A :8 0 ,I N S :b 8 ,P 1 :0 0 ,P 2 :0 0 ,L c :0 d ,0 b ,0 1 ,0 2 ,0 3 ,0 4 ,0 5 ,0 6 ,0 7 ,0 8 ,0 9 ,0 0 ,0 0 ,0 0 ,L e :0 b ,0 1 ,0 2
Nous voyons que la carte rpond "positivement" avec un status word 0 x 9 0 0 0 . Nous pouvons alors slectionner notre applet en recopiant l'APDU contenu dans s e l e c t M o n A p p l e t . s c r i p t:
/ /s e l e c tM o n A p p l e ta p p l e t 0 x 0 00 x A 40 x 0 40 x 0 00 x b0 x 0 10 x 0 20 x 0 30 x 0 40 x 0 50 x 0 60 x 0 70 x 0 80 x 0 90 x 0 00 x 0 00 x 7 F ; C L A :0 0 ,I N S :a 4 ,P 1 :0 4 ,P 2 :0 0 ,L c :0 b ,0 1 ,0 2 ,0 3 ,0 4 ,0 5 ,0 6 ,0 7 ,0 8 ,0 9 ,0 0 ,0 0 ,L e :0 0 ,S W 1 :9 0 ,S W 2 :
De nouveau, la carte rpond "positivement" avec un status word 0 x 9 0 0 0 . Notre applet est dsormais slectionne et nous pouvons la tester. C ommenons par interroger le compteur (I N S=0 x 0 2 ) en envoyant l'APDU suivante :
0 x B 00 x 0 20 x 0 00 x 0 00 x 0 00 x 7 F ; C L A :b 0 ,I N S :0 2 ,P 1 :0 0 ,P 2 :0 0 ,L c :0 0 ,L e :0 1 ,0 0 ,S W 1 :9 0 ,S W 2 :0 0
Nous pouvons voir que le compteur est pour l'instant 0. Nous allons l'incrmenter (I N S=0 x 0 0 ):
0 x B 00 x 0 00 x 0 00 x 0 00 x 0 00 x 7 F ; C L A :b 0 ,I N S :0 0 ,P 1 :0 0 ,P 2 :0 0 ,L c :0 0 ,L e :0 0 ,S W 1 :9 0 ,S W 2 :0 0
Interrogeons de nouveau le compteur :
0 x B 00 x 0 20 x 0 00 x 0 00 x 0 00 x 7 F ; C L A :b 0 ,I N S :0 2 ,P 1 :0 0 ,P 2 :0 0 ,L c :0 0 ,L e :0 1 ,0 1 ,S W 1 :9 0 ,S W 2 :0 0
Il est dsormais 1. Initialisons maintenant (I N S=0 x 0 3 ) le compteur 0 x 4 A:
0 x B 00 x 0 30 x 0 00 x 0 00 x 0 10 x 4 A0 x 7 F ; C L A :b 0 ,I N S :0 3 ,P 1 :0 0 ,P 2 :0 0 ,L c :0 1 ,4 a ,L e :0 0 ,S W 1 :9 0 ,S W 2 :0 0
Dcrmentons le compteur (I N S=0 x 0 1 ) et regardons le rsultat :
0 x B 00 x 0 10 x 0 00 x 0 00 x 0 00 x 7 F ; C L A :b 0 ,I N S :0 1 ,P 1 :0 0 ,P 2 :0 0 ,L c :0 0 ,L e :0 0 ,S W 1 :9 0 ,S W 2 :0 0 0 x B 00 x 0 20 x 0 00 x 0 00 x 0 00 x 7 F ; C L A :b 0 ,I N S :0 2 ,P 1 :0 0 ,P 2 :0 0 ,L c :0 0 ,L e :0 1 ,4 9 ,S W 1 :9 0 ,S W 2 :0 0 0 x 4 A-1=0 x 4 9 . Le rsultat est cohrent. Nous allons nous dconnecter du simulateur en tapant "p o w e r d o w n ; " dans apdutool,
sen.enst.fr/node/408
5/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
ce qui provoque la fermeture de JC WDE dans la console d'Eclipse :
M a xA d d r 0 x f f f 0 x f f f f 0 x 1 f f f f 5 2 8 3 6b y t e s 6 1 0 2 7b y t e s 4 5 0 8b y t e s
R O MM a s ks i z e= 0 x c e 6 4= H i g h e s tR O Ma d d r e s si nm a s k= 0 x e e 6 3= S p a c ea v a i l a b l ei nR O M= 0 x 1 1 9 c= E E P R O Mw i l lb es a v e di nf i l e" m o n a p p l e t . e e p r o m " M a s kh a sn o wb e e ni n i t i a l i z e df o ru s e
C hargeons maintenant notre applet. Pour cela, clic droit sur le package monpackage , Java Card Tools, Deploy :
Nous pouvons voir les APDUs envoys dans la zone C onsole d'Eclipse :
Les status word 0 x 9 0 0 0indiquent que l'upload s'est droul correctement. Relanons C REF afin d'installer notre applet, en prenant soin de recharger notre fichier image (option i ):
M a xA d d r 0 x f f f 0 x f f f f 0 x 1 f f f f
ce stade, nous pouvons utiliser apdutool pour tester notre carte, de la mme manire qu'avec JC WDE, en prenant soin de ne pas oublier la commande p o w e r u pet la slection de l'applet. C ommenons par relancer C REF (qui s'est termin sur une commande p o w e r d o w n ):
~ / E L E C I N F 3 5 9 $c r e f im o n a p p l e t . e e p r o m om o n a p p l e t . e e p r o m J a v aC a r d2 . 2 . 2CR e f e r e n c eI m p l e m e n t a t i o nS i m u l a t o r( v e r s i o n0 . 4 1 )
sen.enst.fr/node/408
6/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
3 2 b i tA d d r e s sS p a c ei m p l e m e n t a t i o n-w i t hc r y p t o g r a p h ys u p p o r t T = 1/T = C LD u a li n t e r f a c eA P D Up r o t o c o l( I S O7 8 1 6 3 ) C o p y r i g h t2 0 0 5S u nM i c r o s y s t e m s ,I n c .A l lr i g h t sr e s e r v e d . M e m o r yc o n f i g u r a t i o n T y p e B a s e S i z e R A M 0 x 0 0 x 1 0 0 0 R O M 0 x 2 0 0 0 0 x e 0 0 0 E 2 P 0 x 1 0 0 2 00 x f f e 0
M a xA d d r 0 x f f f 0 x f f f f 0 x 1 f f f f
~ / E L E C I N F 3 5 9 $a p d u t o o l J a v aC a r d2 . 2 . 2A P D UT o o l ,V e r s i o n1 . 3 C o p y r i g h t2 0 0 5S u nM i c r o s y s t e m s ,I n c .A l lr i g h t sr e s e r v e d .U s ei ss u b j e c tt ol i c e n s et e r m s . O p e n i n gc o n n e c t i o nt ol o c a l h o s to np o r t9 0 2 5 . C o n n e c t e d . p o w e r u p ; R e c e i v e dA T R=0 x 3 b0 x f 00 x 1 10 x 0 00 x f f0 x 0 1 / /s e l e c tM o n A p p l e ta p p l e t 0 x 0 00 x A 40 x 0 40 x 0 00 x b0 x 0 10 x 0 20 x 0 30 x 0 40 x 0 50 x 0 60 x 0 70 x 0 80 x 0 90 x 0 00 x 0 00 x 7 F ; C L A :0 0 ,I N S :a 4 ,P 1 :0 4 ,P 2 :0 0 ,L c :0 b ,0 1 ,0 2 ,0 3 ,0 4 ,0 5 ,0 6 ,0 7 ,0 8 ,0 9 ,0 0 ,0 0 ,L e :0 0 ,S W 1 :9 0 ,S W 2 : 0 x B 00 x 0 00 x 0 00 x 0 00 x 0 00 x 7 F ; C L A :b 0 ,I N S :0 0 ,P 1 :0 0 ,P 2 :0 0 ,L c :0 0 ,L e :0 0 ,S W 1 :9 0 ,S W 2 :0 0 0 x B 00 x 0 20 x 0 00 x 0 00 x 0 00 x 7 F ; C L A :b 0 ,I N S :0 2 ,P 1 :0 0 ,P 2 :0 0 ,L c :0 0 ,L e :0 1 ,0 1 ,S W 1 :9 0 ,S W 2 :0 0 p o w e r d o w n ;
sen.enst.fr/node/408
7/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
Dans la section Java Build Path, slectionner l'onglet Librairies et cliquer sur le bouton Add External Jars... :
sen.enst.fr/node/408
8/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
C rons maintenant la classe principale de notre application. Pour cela, faire un clic droit sur le package cr puis New et Class :
Donnons un nom notre nouvelle classe, cocher la case public static void main puis cliquer sur Finish :
/ *C o n n e x i o nal aJ a v a c a r d* / C a d T 1 C l i e n tc a d ; S o c k e ts c k C a r t e ; t r y{ s c k C a r t e=n e wS o c k e t ( " l o c a l h o s t " ,9 0 2 5 ) ; s c k C a r t e . s e t T c p N o D e l a y ( t r u e ) ; B u f f e r e d I n p u t S t r e a mi n p u t=n e wB u f f e r e d I n p u t S t r e a m ( s c k C a r t e . g e t I n p u t S t r e a m ( ) ) ; B u f f e r e d O u t p u t S t r e a mo u t p u t=n e wB u f f e r e d O u t p u t S t r e a m ( s c k C a r t e . g e t O u t p u t S t r e a m ( ) ) ; c a d=n e wC a d T 1 C l i e n t ( i n p u t ,o u t p u t ) ; }c a t c h( E x c e p t i o ne ){ S y s t e m . o u t . p r i n t l n ( " E r r e u r:i m p o s s i b l ed es ec o n n e c t e ral aJ a v a c a r d " ) ; r e t u r n ; } / *M i s es o u st e n s i o nd el ac a r t e* / t r y{ c a d . p o w e r U p ( ) ; }c a t c h( E x c e p t i o ne ){ S y s t e m . o u t . p r i n t l n ( " E r r e u rl o r sd el ' e n v o id el ac o m m a n d eP o w e r u pal aJ a v a c a r d " ) ; r e t u r n ; }
sen.enst.fr/node/408
9/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
Code pour se dconnecter de la Javacard
La dconnexion de la Javacard se fera via la mthode p o w e r D o w n ( )de la classe C a d T 1 C l i e n t:
/ *S l e c t i o nd el ' a p p l e t* / A p d ua p d u=n e wA p d u ( ) ; a p d u . c o m m a n d [ A p d u . C L A ]=0 x 0 0 ; a p d u . c o m m a n d [ A p d u . I N S ]=( b y t e )0 x A 4 ; a p d u . c o m m a n d [ A p d u . P 1 ]=0 x 0 4 ; a p d u . c o m m a n d [ A p d u . P 2 ]=0 x 0 0 ; b y t e [ ]a p p l e t A I D={0 x 0 1 ,0 x 0 2 ,0 x 0 3 ,0 x 0 4 ,0 x 0 5 ,0 x 0 6 ,0 x 0 7 ,0 x 0 8 ,0 x 0 9 ,0 x 0 0 ,0 x 0 0} ; a p d u . s e t D a t a I n ( a p p l e t A I D ) ; c a d . e x c h a n g e A p d u ( a p d u ) ; i f( a p d u . g e t S t a t u s ( )! =0 x 9 0 0 0 ){ S y s t e m . o u t . p r i n t l n ( " E r r e u rl o r sd el as l e c t i o nd el ' a p p l e t " ) ; S y s t e m . e x i t ( 1 ) ; }
Note : cette phase de slection n'est pas indispensable pour le simulateur JC WDE
/ *M e n up r i n c i p a l* / b o o l e a nf i n=f a l s e ; w h i l e( ! f i n ){ S y s t e m . o u t . p r i n t l n ( ) ; S y s t e m . o u t . p r i n t l n ( " A p p l i c a t i o nc l i e n t eJ a v a c a r d " ) ; S y s t e m . o u t . p r i n t l n ( " " ) ; S y s t e m . o u t . p r i n t l n ( ) ; S y s t e m . o u t . p r i n t l n ( " 1-I n t e r r o g e rl ec o m p t e u r " ) ; S y s t e m . o u t . p r i n t l n ( " 2-I n r e m e n t e rl ec o m p t e u r " ) ; S y s t e m . o u t . p r i n t l n ( " 3-D e c r e m e n t e rl ec o m p t e u r " ) ; S y s t e m . o u t . p r i n t l n ( " 4-R e i n i t i a l i s e rl ec o m p t e u r " ) ; S y s t e m . o u t . p r i n t l n ( " 5-Q u i t t e r " ) ; S y s t e m . o u t . p r i n t l n ( ) ; S y s t e m . o u t . p r i n t l n ( " V o t r ec h o i x? " ) ; i n tc h o i x=S y s t e m . i n . r e a d ( ) ; w h i l e( ! ( c h o i x> =' 1 '& &c h o i x< =' 5 ' ) ){ c h o i x=S y s t e m . i n . r e a d ( ) ; } a p d u=n e wA p d u ( ) ; a p d u . c o m m a n d [ A p d u . C L A ]=M a c l a s s e . C L A _ M O N A P P L E T ; a p d u . c o m m a n d [ A p d u . P 1 ]=0 x 0 0 ; a p d u . c o m m a n d [ A p d u . P 2 ]=0 x 0 0 ; a p d u . s e t L e ( 0 x 7 f ) ; s w i t c h( c h o i x ){ c a s e' 1 ' : a p d u . c o m m a n d [ A p d u . I N S ]=M a c l a s s e . I N S _ I N T E R R O G E R _ C O M P T E U R ; c a d . e x c h a n g e A p d u ( a p d u ) ; i f( a p d u . g e t S t a t u s ( )! =0 x 9 0 0 0 ){ S y s t e m . o u t . p r i n t l n ( " E r r e u r:s t a t u sw o r dd i f f e r e n td e0 x 9 0 0 0 " ) ; }e l s e{ S y s t e m . o u t . p r i n t l n ( " V a l e u rd uc o m p t e u r:"+a p d u . d a t a O u t [ 0 ] ) ; } b r e a k ; c a s e' 2 ' : a p d u . c o m m a n d [ A p d u . I N S ]=M a c l a s s e . I N S _ I N C R E M E N T E R _ C O M P T E U R ; c a d . e x c h a n g e A p d u ( a p d u ) ; i f( a p d u . g e t S t a t u s ( )! =0 x 9 0 0 0 ){ S y s t e m . o u t . p r i n t l n ( " E r r e u r:s t a t u sw o r dd i f f e r e n td e0 x 9 0 0 0 " ) ; }e l s e{ S y s t e m . o u t . p r i n t l n ( " O K " ) ; } b r e a k ; c a s e' 3 ' : a p d u . c o m m a n d [ A p d u . I N S ]=M a c l a s s e . I N S _ D E C R E M E N T E R _ C O M P T E U R ; c a d . e x c h a n g e A p d u ( a p d u ) ; i f( a p d u . g e t S t a t u s ( )! =0 x 9 0 0 0 ){ S y s t e m . o u t . p r i n t l n ( " E r r e u r:s t a t u sw o r dd i f f e r e n td e0 x 9 0 0 0 " ) ; }e l s e{ S y s t e m . o u t . p r i n t l n ( " O K " ) ; } b r e a k ; c a s e' 4 ' :
sen.enst.fr/node/408
10/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
a p d u . c o m m a n d [ A p d u . I N S ]=M a c l a s s e . I N S _ I N I T I A L I S E R _ C O M P T E U R ; b y t e [ ]d o n n e e s=n e wb y t e [ 1 ] ; d o n n e e s [ 0 ]=0 ; a p d u . s e t D a t a I n ( d o n n e e s ) ; c a d . e x c h a n g e A p d u ( a p d u ) ; i f( a p d u . g e t S t a t u s ( )! =0 x 9 0 0 0 ){ S y s t e m . o u t . p r i n t l n ( " E r r e u r:s t a t u sw o r dd i f f e r e n td e0 x 9 0 0 0 " ) ; }e l s e{ S y s t e m . o u t . p r i n t l n ( " O K " ) ; } b r e a k ; c a s e' 5 ' : f i n=t r u e ; b r e a k ; } }
Le code source de l'application est disponible ici : Maclasse.java
m o n p a c k a g e . M o n A p p l e t0 x 0 1 : 0 x 0 2 : 0 x 0 3 : 0 x 0 4 : 0 x 0 5 : 0 x 0 6 : 0 x 0 7 : 0 x 0 8 : 0 x 0 9 : 0 x 0 0 : 0 x 0 0
Nous pouvons maintenant lancer notre simulateur, en prenant soin de nous placer dans le bon rpertoire (rpertoire parent du package contenant le fichier class de l'applet) :
~ $c dw o r k s p a c e / T u t o r i e l \J a v a c a r d / b i n ~ / w o r k s p a c e / T u t o r i e lJ a v a c a r d / b i n $j c w d em o n a p p l e t . a p p J a v aC a r d2 . 2 . 2W o r k s t a t i o nD e v e l o p m e n tE n v i r o n m e n t ,V e r s i o n1 . 3 C o p y r i g h t2 0 0 5S u nM i c r o s y s t e m s ,I n c .A l lr i g h t sr e s e r v e d .U s ei ss u b j e c tt ol i c e n s et e r m s . j c w d ei sl i s t e n i n gf o rT = 1A p d u ' so nT C P / I Pp o r t90 2 5 .
Maintenant que notre simulateur est lanc, lanons notre application cliente :
Le compteur est bien 0. Incrmentons maintenant le compteur 3 fois puis dcrmentons-le une fois. Lorsque nous rinterrogeons 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 rception de la commande "p o w e r d o w n ":
j c w d ee x i t i n go nr e c e i p to fp o w e rd o w nc o m m a n d .
Rappel : ce simulateur ne permet pas de conserver l'tat de la carte. Si nous le relanons, le compteur sera 0 et non 2.
Avec CREF
Lanons C REF partir de l'image EEPROM que nous avons gnre :
sen.enst.fr/node/408
11/12
29/03/13
TP Java Card 1/2 : Utilisation du Javacard Development Kit 2.2.2 de Sun | Groupe SEN
T y p e R A M R O M E 2 P B a s e S i z e 0 x 0 0 x 1 0 0 0 0 x 2 0 0 0 0 x e 0 0 0 0 x 1 0 0 2 00 x f f e 0 M a xA d d r 0 x f f f 0 x f f f f 0 x 1 f f f f
Filename/Title
Taille
Maclasse.java
4.12 Ko
eclipse-jcde-0.1-linux.tgz 135.54 Ko
sen.enst.fr/node/408
12/12