将ECPublicKey从JavaCard恢复到Java

将ECPublicKey从JavaCard恢复到Java,java,bouncycastle,javacard,apdu,elliptic-curve,Java,Bouncycastle,Javacard,Apdu,Elliptic Curve,我正在尝试在终端(由我的计算机模拟)和智能卡(Java卡)之间实现ECDH 我修复了我想要使用的椭圆曲线,在卡端,我有以下代码来运行协议的第一部分: ECPublicKey pubKey = (ECPublicKey) KeyBuilder.buildKey( KeyBuilder.TYPE_EC_FP_PUBLIC, (short) 0x0100, false); pubKey.setFieldFP(p, (short) 0x0001,

我正在尝试在终端(由我的计算机模拟)和智能卡(Java卡)之间实现ECDH

我修复了我想要使用的椭圆曲线,在卡端,我有以下代码来运行协议的第一部分:

        ECPublicKey pubKey = (ECPublicKey) KeyBuilder.buildKey(
            KeyBuilder.TYPE_EC_FP_PUBLIC, (short) 0x0100, false);
        pubKey.setFieldFP(p, (short) 0x0001, (short) 0x0020);
        pubKey.setA(a, (short) 0x0001, (short) 0x0020);
        pubKey.setB(b, (short) 0x0000, (short) 0x0020);
        pubKey.setR(r, (short) 0x0001, (short) 0x0020);
        pubKey.setG(g, (short) 0x0000, (short) g.length);

        ECPrivateKey privKey = (ECPrivateKey) KeyBuilder.buildKey(
            KeyBuilder.TYPE_EC_FP_PRIVATE, (short) 0x0100, false);

        KeyPair keypair = new KeyPair(pubKey, privKey);
        keypair.genKeyPair();

        pubKey.getW(apduBuffer, (short) 0x0000);
        setOutgoingAndSend((short) 0x0000, (short) 0x0041);
因此,我为ECDH创建了一个密钥对,并将公共密钥对发送到我的终端

我的问题如下:我无法在得到APDU响应的情况下重建ECPublicKey

我在Java中找不到任何方法来实现这一点(甚至使用外部库作为Bouncy Castle)


有人能帮我吗?提前感谢。

在JavaCard中返回的公钥格式如下:
04 x y
。在终端端,首先必须提取x和y坐标。那么

KeyFactory kf=KeyFactory.getInstance(“ECDSA”、“BC”)

ECPoint=新的ECPoint(x,y)

ECParameterSpec domainparameters=新的ECParameterSpec(…);//初始化域参数

ECPublicKeySpec spec=新的ECPublicKeySpec(点、域参数)

ECPublicKey公钥=(ECPublicKey)kf.generatePublic(规范)