我正在尝试让 Elliptic Curve Diffie Hellman 在 JavaCard(2.2.1 版)上工作。
在 JavaCard 上,我现在有以下代码:
byte temp[] = new byte[100];
byte secret[] = new byte[100];
byte size = buf[ISO7816.OFFSET_LC];
Util.arrayCopy(buf, ISO7816.OFFSET_CDATA, temp, (byte) 0, size);
// the public key is in temp
short len = dh.generateSecret(temp, (byte) 0, size, secret, (byte) 0);
Util.arrayCopy(temp, (byte) 0, buf, ISO7816.OFFSET_CDATA, size);
//Util.arrayCopy(secret, (byte) 0, buf, ISO7816.OFFSET_CDATA, len);
apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA, size);
Run Code Online (Sandbox Code Playgroud)
我初始化dh如下:
keyPair = new KeyPair(KeyPair.ALG_EC_FP, KeyBuilder.LENGTH_EC_F2M_163);
keyPair.genKeyPair();
dh = KeyAgreement.getInstance(KeyAgreement.ALG_EC_SVDP_DH, false);
dh.init(keyPair.getPrivate());
Run Code Online (Sandbox Code Playgroud)
所有这些似乎都有效,除了dh.generateSecret调用外,小程序似乎只是崩溃了。如果我忽略调用并返回其他数据,则效果很好。其中我导入了终端发送的数据。在终端中,我有以下内容:
// …Run Code Online (Sandbox Code Playgroud)