Я пытаюсь прочитать ECPublicKey в моей программе Java.Этот ключ был сгенерирован в анклаве Intel SGX и отправлен на сервер через сокет.
Это мой код Java (я пропустил часть сокета чтения и вставил сгенерированный ключ напрямую.
byte[] otherPub = Hex.decode("74044d458d4a462205d29fd59dfa3142a821f614879c5c010a20e05867def6a188c9c057225e20f73a4731f8eae265fdf999da4e19df7d11115e269791282b05");
byte [] x = new byte [32];
byte [] y = new byte [32];
for (int i = 0; i<32; i++)
{
x[i] = otherPub[i];
}
for (int i = 0; i<32; i++)
{
y[i] = otherPub[i+32];
}
BigInteger myX= new BigInteger(x);
BigInteger myY= new BigInteger(y);
ECPoint w = new ECPoint (myX,myY);
ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("secp256r1");
KeyFactory kf = KeyFactory.getInstance("ECDH", new BouncyCastleProvider());
ECNamedCurveSpec params = new ECNamedCurveSpec("secp256r1", spec.getCurve(), spec.getG(), spec.getN());
ECPublicKeySpec pubKeySpec = new ECPublicKeySpec(w, params);
ECPublicKey pk = (ECPublicKey) kf.generatePublic(pubKeySpec);
Каждый раз, когда я получаю следующую ошибку
Exception in thread "main" java.security.spec.InvalidKeySpecException: invalid KeySpec: x value invalid for SecP256R1FieldElement
at org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(Unknown Source)
at Connection.serverConnection(Connection.java:158)
at main.main(main.java:12)
Caused by: java.lang.IllegalArgumentException: x value invalid for SecP256R1FieldElement
at org.bouncycastle.math.ec.custom.sec.SecP256R1FieldElement.<init>(Unknown Source)
at org.bouncycastle.math.ec.custom.sec.SecP256R1Curve.fromBigInteger(Unknown Source)
at org.bouncycastle.math.ec.ECCurve.createPoint(Unknown Source)
at org.bouncycastle.math.ec.ECCurve.createPoint(Unknown Source)
at org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util.convertPoint(Unknown Source)
at org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util.convertPoint(Unknown Source)
at org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey.<init>(Unknown Source)
... 4 more
КогдаЯ генерирую пару ключей в Java и вставляю ее в переменную otherPub Я не получаю сообщение об ошибке. Я посмотрел в Интернете, и генерация ключей в sgx с функцией sgx_ecc256_generate_key_pair имеет младший порядок и на кривой secp256r1. В чем моя ошибка? Может кто-нибудь?помогите мне?
Спасибо
Омарама