Page 1 of 1

ECDSA Issue

Posted: Tue Nov 08, 2016 1:24 am
by nikonai
I am using ECDSA to do signature. However, it always threw 6F00 during Install. I tried to debug and found the problem caused by the code below. I wonder how I can modify to avoid the problem? Please help me regarding this issue.

Code: Select all

objECDSAKeyPair= new KeyPair(KeyPair.ALG_EC_FP, KeyBuilder.LENGTH_EC_FP_192);


My code:

Code: Select all

package Test;
   
    import javacard.framework.*;
    import javacard.security.*;
    import javacardx.crypto.*;
   
    public class Test extends Applet{
   
    private byte[] PLAINTEXT ;
    private ECPrivateKey objECDSAPriKey=null;   // Object for ECDSA Private Key
    private ECPublicKey objECDSAPubKey=null;    // Object for ECDSA Public Key
    private KeyPair objECDSAKeyPair=null;       // Object for ECDSA Key Pair
    private Signature objECDSASign=null;        // Object for ECDSA Signature
   
    final static short BAS =  0;
   
    public static void install(byte[] bArray, short bOffset, byte bLength){
      new Test(bArray, bOffset, bLength);
    }
   
    private Test(byte bArray[], short bOffset, byte bLength){
      PLAINTEXT = new byte[0x100] ; // Data file
      Util.arrayFillNonAtomic(PLAINTEXT,  BAS, (short)0x100, (byte)0);
 
      objECDSAKeyPair= new KeyPair(KeyPair.ALG_EC_FP, KeyBuilder.LENGTH_EC_FP_192);
   
      // Create Signature Object
      objECDSASign = Signature.getInstance(Signature.ALG_ECDSA_SHA, false);
   
      register();
    }
   
    public void process(APDU apdu){
      byte buf[] = apdu.getBuffer();
   
      switch(buf[1])
      {
      case (byte)0xA4: break;
   
      case (byte)0x46:
      objECDSAKeyPair.genKeyPair();
      objECDSAPriKey = (ECPrivateKey)objECDSAKeyPair.getPrivate();
      objECDSAPubKey = (ECPublicKey)objECDSAKeyPair.getPublic();
      break;
   
      case (byte)0x2E:
      short Le = apdu.setOutgoing();
      short sSignLen=0 ;
   
      // Init with Private Key
      objECDSASign.init(objECDSAPriKey, Signature.MODE_SIGN);
      //objECDSASign.init(objECDSAKeyPair.getPrivate(), Signature.MODE_SIGN);
   
      // Sign Data
      sSignLen = objECDSASign.sign(PLAINTEXT, BAS, Le, buf, BAS);
   
      apdu.setOutgoingLength(sSignLen);
      apdu.sendBytes(BAS, sSignLen);
      break;
   
      default:
      ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
      }
   
      return;
    } }

Re: ECDSA Issue

Posted: Tue Nov 08, 2016 3:42 am
by Tarantino
Use ALG_EC_F2M instead.

Re: ECDSA Issue

Posted: Tue Nov 08, 2016 5:21 am
by nikonai
I tried, 6F00 was still there. :cry:

Re: ECDSA Issue

Posted: Wed Nov 09, 2016 5:47 am
by Thelogan
You need to set specific parameters for ECC. Set those parameters that are present in the ECKey interface in the public key. These parameters are not stored on the card

Re: ECDSA Issue

Posted: Thu Nov 17, 2016 2:37 am
by UNKNwYSHSA
Are you using JCOP card?
JCOP card not set curve parameters automatically, as Thelogan said.
You have to set curve parameters yourself in the code.