2

我有一个点的 x 和 y 坐标以及曲线的名称。我现在想从中创建一个org.bouncycastle.jce.interfaces.ECPublicKey对象,自动使用提供的实现。目标是无论是否使用 bouncycastle 或其 Android 端口 spongycastle 都能够创建对象。

这就是我现在正在做的事情。问题是,海绵城堡中不包含 EC5Util 类。我想有一个解决方案,使用可能只有一个我必须调用的方法的工厂。那可能吗?

java.security.spec.ECPoint w = new java.security.spec.ECPoint(x, y);
ECNamedCurveParameterSpec params = ECNamedCurveTable.getParameterSpec("secp256k1");
KeyFactory fact = KeyFactory.getInstance("ECDSA", "BC");
ECCurve curve = params.getCurve();
java.security.spec.EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, params.getSeed());
java.security.spec.ECParameterSpec params2 = EC5Util.convertSpec(ellipticCurve, params);
java.security.spec.ECPublicKeySpec keySpec = new java.security.spec.ECPublicKeySpec(w, params2);
return (ECPublicKey) fact.generatePublic(keySpec);
4

2 回答 2

2

在 ECPointTest.java 中的 Bouncycastle 中的单元测试似乎涵盖了这种情况:

ECFieldElement.Fp x_ecfe = new ECFieldElement.Fp(q, x);
ECFieldElement.Fp y_ecfe = new ECFieldElement.Fp(q, y);
ECPoint.Fp point = new ECPoint.Fp(curve, x_ecfe, y_ecfe);

这是你所处的一个非常独特的情况。如果你想扩大你这样做的原因,我很想知道。

于 2013-09-20T23:31:08.620 回答
2

所以我知道这已经有一段时间没有发布了。但事实证明,至少当你有一个 Curve 对象的实例时,它更容易做到。

ECCurve curve = .....
BigInteger x = .....
BigInteger y = .....

ECPoint.Fp point =  curve.createPoint(x,y);

希望能帮助到你。

于 2021-09-22T11:32:48.917 回答