Hi guys,
 
basically, I'm trying to use smart card(with muscle Applet) to generate a RSA key pair and export public key to construct a certificate Request. Since a certificate request needs the corresponding private key to sign it, I'm thinking to form a certRequestInfo and send it to card to get the signature and then construct the certRequest with the signature. Does this method make any sense?
 
And I have examined the CardEdge.java code and the computeCrypt function confused me. In javacard2.1.1 Spec: TYPE_RSA_PRIVATE = 5; TYPE_RSA_CRT_PRIVATE = 6; In the CardEdge.java:    
    "private static final byte KEY_RSA_PUBLIC = 1;
    private static final byte KEY_RSA_PRIVATE = 2;
    private static final byte KEY_RSA_PRIVATE_CRT = 3;
    private static final byte KEY_DSA_PUBLIC = 4;
    private static final byte KEY_DSA_PRIVATE = 5;
    private static final byte KEY_DES = 6;
    private static final byte KEY_3DES = 7;
    private static final byte KEY_3DES3 = 8;"
Under computeCrypt method, under OP_INIT case, and in ciph_dir under "CD_SIGN CD_VERIFY" case, the RSA_CRT_PRIVATE keyType 6 should be the same as KEY_DES, which the program should throw a SW_INCORRECT_ALG.
 
But in MuscleTool, the doCrypt function has:
 
  "cryptInit.keyNum = keyNum;
  cryptInit.cipherMode = MSC_MODE_RSA_NOPAD;
  cryptInit.cipherDirection = MSC_DIR_SIGN;
  cryptInit.optParams = 0;
  cryptInit.optParamsSize = 0;
 
  padData(inCryptData, inDataSize, keySize);
  inDataSize = outDataSize = keySize;
 
  binToHex(inCryptData, inDataSize, outCryptData);
 
  rv = MSCComputeCrypt( pConnection, &cryptInit,
   inCryptData, inDataSize,
   outCryptData, &outDataSize);"
If I input the keyNum as 0 which is my RSA_CRT_PRIVATE key, with some input, the program will return me 256 bytes of data not a SW_INCORRECT_ALG. Did I miss anything?
 
And suppose I use RSA_PRIVATE key which has the same value as KEY_DSA_PRIVATE in CardEdge, under OP_INIT case, and in ciph_dir under "CD_SIGN CD_VERIFY" case it will goto:                
                "case KEY_DSA_PUBLIC:
                case KEY_DSA_PRIVATE:
                    ciph_alg_id = Cipher.ALG_RSA_ISO9796;
                    ISOException.throwIt((short)SW_UNSUPPORTED_FEATURE);
                    break;"
Cipher.ALG_RSA_ISO9796 = 11, same as the Signature ALG: ALG_RSA_MD5_PKCS1; Does that mean there is only one supported Signature algorithm i.e. ALG_RSA_MD5_PKCS1?
 
BTW why CardEdge use these confused names as the condition?
 
If there is anything wrong please forgive my ignorance and kindly correct me.
Thank you in advance.
 
Li
_______________________________________________
Muscle mailing list
[email protected]
http://lists.drizzle.com/mailman/listinfo/muscle

Reply via email to