将 ECPublicKey 从 JavaCard 恢复到 Java
Recovering an ECPublicKey from JavaCard to Java
我正在尝试在终端(由我的计算机模拟)和智能卡(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 创建了一个密钥对,并将 public 发送到我的终端。
我的问题如下:鉴于我收到的响应 APDU,我无法重建 ECPublicKey...
我在 Java 中没有找到任何方法来做到这一点(即使使用外部库作为 Bouncy Castle)。
有人可以帮助我吗?提前谢谢你。
JavaCard返回的public键格式如下:04 x y
。在终端端,首先必须提取 x 和 y 坐标。那么,
KeyFactory kf = KeyFactory.getInstance("ECDSA", "BC");
ECPoint point = new ECPoint(x, y);
ECParameterSpec domainparameters = new ECParameterSpec(...); // initialize your domain parameters
ECPublicKeySpec spec = new ECPublicKeySpec(point, domainparameters);
ECPublicKey publickey = (ECPublicKey)kf.generatePublic(spec);
我正在尝试在终端(由我的计算机模拟)和智能卡(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 创建了一个密钥对,并将 public 发送到我的终端。
我的问题如下:鉴于我收到的响应 APDU,我无法重建 ECPublicKey...
我在 Java 中没有找到任何方法来做到这一点(即使使用外部库作为 Bouncy Castle)。
有人可以帮助我吗?提前谢谢你。
JavaCard返回的public键格式如下:04 x y
。在终端端,首先必须提取 x 和 y 坐标。那么,
KeyFactory kf = KeyFactory.getInstance("ECDSA", "BC");
ECPoint point = new ECPoint(x, y);
ECParameterSpec domainparameters = new ECParameterSpec(...); // initialize your domain parameters
ECPublicKeySpec spec = new ECPublicKeySpec(point, domainparameters);
ECPublicKey publickey = (ECPublicKey)kf.generatePublic(spec);