La construcción de la clave pública de EC a partir de EC Point y ECParameterSpec proporciona un valor x no válido

Tengo un EC Point sin comprimir para la prime256v1curva, y estoy tratando de construir un objeto PublicKey a partir de él usando el siguiente código (referido desde aquí), usando el proveedor BouncyCastle:

public static void main(String[] args) throws Exception
{
    // Using BC as SunEC (java8) doesn't support prime256v1.
    Security.addProvider(new BouncyCastleProvider());

    // Input values -----------------

    // Complete EC Point (with uncompressed prefix 04 and the length [41])
    // 0441044ef454741576ed945005ea87f114bf8045bcff84155914246aaef43bc35804c9537201ea2387f7edabf76e85b9a7fc341001ddda3272a9685d9aa36ff96526d9

    // EC Point value w/o the tag and length
    final String ecPointHex = "044ef454741576ed945005ea87f114bf8045bcff84155914246aaef43bc35804c9537201ea2387f7edabf76e85b9a7fc341001ddda3272a9685d9aa36ff96526d9";
    // final String ecParamsHex = "06082a8648ce3d030107"; // prime256v1; OID: 1.2.840.10045.3.1.7

    final String curveName = "prime256v1";
    // ------------------------------

    // EC Parameter Spec ------------

    AlgorithmParameters params = AlgorithmParameters.getInstance("EC", "BC");
    params.init(new ECGenParameterSpec(curveName));

    ECParameterSpec ecParameterSpec = params.getParameterSpec(ECParameterSpec.class);

    // ------------------------------

    // EC Point ---------------------

    byte[] ecPointBinary = Hex.decode(ecPointHex);

    byte[] x = Arrays.copyOfRange(ecPointBinary, 0, ecPointBinary.length / 2);
    byte[] y = Arrays.copyOfRange(ecPointBinary, ecPointBinary.length / 2, ecPointBinary.length);

    ECPoint ecPoint = new ECPoint(new BigInteger(1, x), new BigInteger(1, y));

    // ------------------------------

    // Construct Public Key ---------

    KeyFactory keyFactory = KeyFactory.getInstance("EC", "BC"); // Tried ECDSA as well

    ECPublicKey ecPublicKey = (ECPublicKey) keyFactory.generatePublic(new ECPublicKeySpec(ecPoint, ecParameterSpec)); // <-- exception here

    System.out.println(ecPublicKey);

    // ------------------------------
}

Pero me sale esta excepción:

Exception in thread "main" 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)
    at org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi.engineGeneratePublic(Unknown Source)
    at java.security.KeyFactory.generatePublic(KeyFactory.java:328)
    at com.test.ECStackOverflow.main(ECStackOverflow.java:70)

¿Qué estoy haciendo mal?

PD: Esta PublicKey se generó en SafeNet HSM y los valores de Punto y Parámetros EC se recuperan del objeto PublicKey.

Respuesta 1

Copié el ejemplo de código que "ilustra cómo consultar los 5 defectos de mayor prioridad" que se encuentra en la parte inferior de la página Java Toolkit for Rally Rest. Cambié el nombre de usuario y la contraseña ...

Hay un archivo json con varios objetos: {"object1": {"property": "bar",}, "object2": {"property": "foo",}, "object3": {"property": " zumbido "}} ...

En el siguiente Servicio, estoy tratando de iniciar mi Dao e inyectar el EntityManager en él. No estamos usando la primavera para este proyecto. Mi IDE se queja de llamar a setEntityManager () porque no puede ...

Me gustaría eliminar un mensaje JMS no persistente (= protegido) de una cola Oracle AQ. En PL / SQL todo está bien y funciona, si configuro L_DequeueOptions.VISIBILITY: = DBMS_AQ.IMMEDIATE; ...