IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Mobile en Java Discussion :

Java card avec JCop


Sujet :

Développement Mobile en Java

  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Par défaut Java card avec JCop
    Bonjour à tous


    Je dois me lancer dans la compréhension de la technologie Java Card.


    J'ai installé le plugin JCop de Eclipse afin de facilité le chargement de ma cardlet dans ma carte.

    Je débute et voudrai simplement charger un exemple simple et le faire fonctionner mais le chargement plante car le fichier .cap n'est pas généré par Eclipse.

    J'utilise Eclipse 3.3.1 ainsi que JCop 3.2.7.

    Voici le code que je voudrai implémenter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    package pck_calculator;
     
    import javacard.framework.APDU;
    import javacard.framework.Applet;
    import javacard.framework.ISO7816;
    import javacard.framework.ISOException;
    import javacard.framework.Util;
     
     
    public class Calculator extends Applet
    {
    	private static final byte[] CALC = { //
    	(byte) 0x63, // c
    	(byte) 0x61, // a
    	(byte) 0x6c, // l
    	(byte) 0x63, // c
    	(byte) 0x75, // u
    	(byte) 0x6c, // l
    	(byte) 0x61, // a
    	(byte) 0x74, // t
    	(byte) 0x72, // r
    	(byte) 0x69, // i
    	(byte) 0x63, // c
    	(byte) 0x65  // e
    	}; // Tableau de bytes (code ASCII) qui va être renvoyé si on envoit l'INS 0x00
     
     
    	//methode d'installation de l'applet dans la carte
    	public static void install(byte[] bArray, short bOffset, byte bLength)
    	{
    		// Enregistrement de l'applet (méthode register()) auprès du JCRE
    		// Lors de la création de l'applet (new)
    		new Calculator().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
    	}
     
    	public void process(APDU apdu)
    	{
    		//pour verifier que cette applet n'est pas entrain d'être sélectionné
    		if (selectingApplet())
    		{
    			return;
    		}
     
    		//réception de la commande APDU
    		byte[] buf = apdu.getBuffer();
     
    		switch (buf[ISO7816.OFFSET_INS])
    		{
    			case (byte) 0x00 :
    				Util.arrayCopy(CALC, (short) 0, buf, (short) 0, (short) CALC.length);
    				apdu.setOutgoingAndSend((short) 0, (short) CALC.length);
    				return;
    				// Ici, on copie le tableau (défini en haut) dans le buffer et on l'envoi sur la sortie
    				// En précisant la taille du champ de données
     
    			case (byte) 0x01 :
    				buf[0] = (byte) (buf[ISO7816.OFFSET_P1] + buf[ISO7816.OFFSET_P2]);
    				// Ici, on additionne P1 et P2
    				break;
     
    			case (byte) 0x02 :
    				//Soustraction de P1 et P2
    				buf[0] = (byte) (buf[ISO7816.OFFSET_P1] - buf[ISO7816.OFFSET_P2]);
    				break;
     
    			case (byte) 0x03 :
    				//Multiplication
    				buf[0] = (byte) (buf[ISO7816.OFFSET_P1] * buf[ISO7816.OFFSET_P2]);
    				break;
     
    			case (byte) 0x04 :
    				//Division
    				if (buf[ISO7816.OFFSET_P2] == 0)
    				{
    					//Test de la division par 0
    					ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);
    					//Envoie de l'exception "mauvais paramètres"
    				}
    				buf[0] = (byte) (buf[ISO7816.OFFSET_P1] / buf[ISO7816.OFFSET_P2]);
    				break;
     
    			case (byte) 0x05 :
    				//Somme du champ de données de la commande APDU
    				short n = (short) (ISO7816.OFFSET_CDATA + apdu.setIncomingAndReceive());
    				byte sum = 0;
     
    				while (n-- > ISO7816.OFFSET_CDATA)
    				{
    					sum += buf[n];
    				}
     
    				buf[0] = sum;
    				break;
     
    			default :
    				//Envoie de l'exception "mauvais champ INS"
    				ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
    		}
    		//Pour tous les cas la réponse APDU a des données de 1 octet
    		//Sauf pour le cas INS = 00
     
    		apdu.setOutgoingAndSend((short) 0, (short) 1);
    	}
    }
    Une simple calculatrice

    J'effectue un click droit sur le package et debug as => open debug dialog.

    Alors j'ai bien spécifié l'AID du package et de la classe.

    Ensuite je valide le debug et le shell me jette en me spécifiant que le .cap n'est pas généré...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    cm>  upload -d -b 250 "\prj_calculator\bin\pck_calculator\javacard\pck_calculator.cap"
    jcshell: Cannot read <\prj_calculator\bin\pck_calculator\javacard\pck_calculator.cap>: java.io.FileNotFoundException: \prj_calculator\bin\pck_calculator\javacard\pck_calculator.cap (The system cannot find the path specified)
    cm>  install -i 012345678900  -q C9#(01234567890001) 012345678900 01234567890001
     => 80 E6 0C 00 23 06 01 23 45 67 89 00 07 01 23 45    ....#..#Eg....#E
        67 89 00 01 06 01 23 45 67 89 00 01 00 09 C9 07    g.....#Eg.......
        01 23 45 67 89 00 01 00 00                         .#Eg.....
     (27300 usec)
     <= 6A 88                                              j.
    Status: Reference data not found
    jcshell: Error code: 6a88 (Reference data not found)
    jcshell: Wrong response APDU: 6A88
    Unexpected error; aborting execution
    Une idée comment activer la génération du .cap ??

    Merci d'avance !

  2. #2
    Invité de passage
    Inscrit en
    Avril 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1
    Par défaut Java card avec JCop
    Bonjour,
    est ce que vous avez essayer l'exemple fournit avec jcop tools.

Discussions similaires

  1. Java Card avec lecteur sans contact
    Par elmehri dans le forum Développement Mobile en Java
    Réponses: 1
    Dernier message: 07/09/2013, 12h45
  2. Java Card 2.2.2 avec Eclipse 4.2.2
    Par amnesia_fr dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 11/06/2013, 17h57
  3. [DOM][Java] Problème avec le retour de getNodeName()
    Par anutka dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 11/04/2012, 21h38
  4. Java card avec JCop
    Par gilloull dans le forum Eclipse
    Réponses: 0
    Dernier message: 15/02/2010, 15h55
  5. Debutant en JAVA, problème avec 1er programme
    Par Gymerus dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 07/09/2005, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo