Создание точечного объекта эллиптической кривой из координат
У меня есть координаты x и y точки и название кривой. Теперь я хочу создать org.bouncycastle.jce.interfaces.ECPublicKey
объект из этого, автоматически используя реализацию, которая предоставляется. Цель состоит в том, чтобы иметь возможность создавать объекты независимо от того, используется ли bouncycastle или его порт Android, spongycastle.
Это то, что я делаю прямо сейчас. Дело в том, что класс EC5Util не входит в Spongycastle. Я хотел бы иметь решение, использующее, возможно, фабрику только с одним методом, который я должен вызвать. Это возможно?
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);
2 ответа
Так что я знаю, что это было давно с тех пор, как это было опубликовано. но сегодня оказывается, что это легче сделать, по крайней мере, когда у вас есть экземпляр объекта Curve.
ECCurve curve = .....
BigInteger x = .....
BigInteger y = .....
ECPoint.Fp point = curve.createPoint(x,y);
Надеюсь, это поможет.
Модульные тесты в Bouncycastle, в ECPointTest.java, похоже, имеют покрытие для этого случая:
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);
Это очень уникальная ситуация, в которой вы находитесь. Если вы захотите рассказать, почему вы это делаете, мне было бы интересно узнать.