Wie lade ich öffentliche PEM-codierte Elliptic Curve-Schlüssel in Bouncy Castle?

Ich habe einen öffentlichen PEM-codierten Elliptic Curve-Schlüssel, den ich in Bouncy Castle laden möchte, und alles, was ich bisher versucht habe, schlägt fehl. Dies ist ein Beispiel für den Schlüssel, den ich zu laden versuche:

-----BEGIN PUBLIC KEY-----
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBhsFCcWY2GaiN1BjPEd1v+ESKO6/0
D0sUR4y1amHnOr3FZx6TdqdoSBqxownQrnAKGCwagGxUb7BWwPFgHqKQJHgBq+J7
F+6m5SKAEL1wS5pqya91N7oudF3yFW8oZRE4RQRdSLl3fV2aVXKwGDXciwhUhw8k
x5OS4iZpMAY+LI4WVGU=
-----END PUBLIC KEY-----

It wird generiert vonNodeJS Crypto Modul und der Kurvenname ist secp521r1. Es wird später in PEM durch das @ codienpm package key-encoder. Ich habe es bereits in JavaScript verwendet (ClojureScript tatsächlich), um eine Signatur zu überprüfen, und jetzt muss ich die Signatur auf dem Server mit Java überprüfen (Clojure tatsächlich).

Ich habe versucht, die Schutzvorrichtungen vom Schlüssel zu entfernen, in ein Byte [] umzuwandeln und eine X509EncodedKeySpec zu erstellen. Das hat nicht geklappt Es ist abgestürzt mit:

InvalidKeySpecException encoded key spec not recognised  org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic (:-1)

Der Code, mit dem ich den Schlüssel lade:

KeyFactory.
  getInstance("ECDSA", "BC").
  generatePublic(new X509EncodedKeySpec(publicKey.getBytes()))

Nur für den Fall, das ist mein Clojure-Code:

(-> (KeyFactory/getInstance "ECDSA")
    (.generatePublic (X509EncodedKeySpec. (.getBytes public-key)))) 

Ich habe auch PKCS8EncodedKeySpec ausprobiert, habe aber den Fehler erhalten:

InvalidKeySpecException key spec not recognised  org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic (:-1)

Ich habe diese Methode auch hier ausprobiert:https: //gist.github.com/wuyongzheng/0e2ed6d8a075153efcd3#file-ecdh_bc-java-L47-L5 aber beim Ausführen von decodePoint erhalte ich den Fehler:

IllegalArgumentException Invalid point encoding 0x4d  org.bouncycastle.math.ec.ECCurve.decodePoint (:-1)

wenn ich die Wachen entfernt habe und:

IllegalArgumentException Invalid point encoding 0x2d  org.bouncycastle.math.ec.ECCurve.decodePoint (:-1)

mit den Wachen auf.

Haben Sie eine Idee, was ich falsch mache oder wie ich das Problem beheben kann?

Auch, falls es hilft, ist dies der private Schlüssel:

-----BEGIN EC PRIVATE KEY-----
MIHbAgEBBEEjNeo52qeffbIQvSxRcWAPlyJjeEOov2JNxxwWKCtlowi07HsYNNyE
jFDdSn8tSYAGx0rROrgpGuuJoG0zarPKz6AHBgUrgQQAI6GBiQOBhgAEAYbBQnFm
NhmojdQYzxHdb/hEijuv9A9LFEeMtWph5zq9xWcek3anaEgasaMJ0K5wChgsGoBs
VG+wVsDxYB6ikCR4AaviexfupuUigBC9cEuaasmvdTe6LnRd8hVvKGUROEUEXUi5
d31dmlVysBg13IsIVIcPJMeTkuImaTAGPiyOFlRl
-----END EC PRIVATE KEY-----

und alles scheint gültig zu sein:

$ openssl ec -in private.pem  -pubout
read EC key
writing EC key
-----BEGIN PUBLIC KEY-----
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBhsFCcWY2GaiN1BjPEd1v+ESKO6/0
D0sUR4y1amHnOr3FZx6TdqdoSBqxownQrnAKGCwagGxUb7BWwPFgHqKQJHgBq+J7
F+6m5SKAEL1wS5pqya91N7oudF3yFW8oZRE4RQRdSLl3fV2aVXKwGDXciwhUhw8k
x5OS4iZpMAY+LI4WVGU=
-----END PUBLIC KEY-----