JavaCard 上的椭圆曲线 DSA - 我还需要初始化什么?

Elliptic Curve DSA on JavaCard - what else do I need to initialise?

我正在尝试在 JavaCard 上实现 ECDSA。到目前为止我有这个代码:

Signature sig = Signature.getInstance(Signature.ALG_ECDSA_SHA_256, false);
KeyPair key = new KeyPair(KeyPair.ALG_EC_FP, (short)256);
key.genKeyPair();
sig.init(key.Private(), Signature.MODE_SIGN);
sig.sign(data, (short)0, dataLen, outputBuf, (short)0);

当我尝试使用 getK() 方法退出 K 以便我可以在 APDU 中发送 public 密钥时,我收到错误代码 6F 00。

根据文档 getK() 如果 'cofactor of the order of the fixed point G of the curve of the key has not been successfully initialized'

可以抛出 CryptoException.UNINITIALIZED_KEY

设置 keys/signature 时还需要初始化什么吗?

您需要初始化域参数:A、B、G、R、K 和字段。有关 NIST 推荐曲线的列表,您可以在此处查看:https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf