Page 1 of 1
Get CryptoException.ILLEGAL_VALUE when generating ECC key pair
Posted: Mon Mar 14, 2016 5:20 am
by Jsine
Hi everyone!
Today I used JCOP card to generate ECC key pair. I can create
ECPrivateKey,
ECPublicKey,
KeyPair w/o any problems, but it throws exception
CryptoException.ILLEGAL_VALUE when
genKeyPair(). What's wrong with my card or my operation? I have no idea. Could you please tell me where I made the mistake? Much appreciated!
BTW, I found that JCAlgTest has encountered the same problem, pls check the test report
here.
Re: Get CryptoException.ILLEGAL_VALUE when generating ECC key pair
Posted: Wed Mar 16, 2016 11:27 pm
by horse dream
For JCOP card, you should set ECC domain parameters for both the public key and private key before
genKeyPair().
FYI:
Check the code below to set the parameters.
Code: Select all
pubKey.setFieldFP(p, (short) 0, (short) p.length);
pubKey.setA(a, (short) 0, (short) a.length);
pubKey.setB(b, (short) 0, (short) b.length);
pubKey.setG(g, (short) 0, (short) g.length);
pubKey.setR(n, (short) 0, (short) n.length);
pubKey.setK((short) 1);
priKey.setFieldFP(p, (short) 0, (short) p.length);
priKey.setA(a, (short) 0, (short) a.length);
priKey.setB(b, (short) 0, (short) b.length);
priKey.setG(g, (short) 0, (short) g.length);
priKey.setR(n, (short) 0, (short) n.length);
priKey.setK((short) 1);
Re: Get CryptoException.ILLEGAL_VALUE when generating ECC key pair
Posted: Wed Mar 16, 2016 11:38 pm
by Jsine
horse dream wrote:For JCOP card, you should set ECC domain parameters for both the public key and private key before
genKeyPair().
FYI:
Check the code below to set the parameters.
Code: Select all
pubKey.setFieldFP(p, (short) 0, (short) p.length);
pubKey.setA(a, (short) 0, (short) a.length);
pubKey.setB(b, (short) 0, (short) b.length);
pubKey.setG(g, (short) 0, (short) g.length);
pubKey.setR(n, (short) 0, (short) n.length);
pubKey.setK((short) 1);
priKey.setFieldFP(p, (short) 0, (short) p.length);
priKey.setA(a, (short) 0, (short) a.length);
priKey.setB(b, (short) 0, (short) b.length);
priKey.setG(g, (short) 0, (short) g.length);
priKey.setR(n, (short) 0, (short) n.length);
priKey.setK((short) 1);
@horse dream, thanks for your detailed reply! I have solved my problem according to your answer!