From fa4b5d16ba6249f85b50851c2f52dc697eebdee6 Mon Sep 17 00:00:00 2001 From: Konstantinos Chalkias Date: Mon, 12 Feb 2018 16:13:04 +0000 Subject: [PATCH] CORDA-1009 Remove X509EdDSAEngine dependency on X509Key (#2506) --- .../kotlin/net/corda/core/internal/X509EdDSAEngine.kt | 9 ++++----- .../net/corda/core/internal/X509EdDSAEngineTest.kt | 8 ++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core/src/main/kotlin/net/corda/core/internal/X509EdDSAEngine.kt b/core/src/main/kotlin/net/corda/core/internal/X509EdDSAEngine.kt index cd5fac1ee1..5ccee61be5 100644 --- a/core/src/main/kotlin/net/corda/core/internal/X509EdDSAEngine.kt +++ b/core/src/main/kotlin/net/corda/core/internal/X509EdDSAEngine.kt @@ -27,12 +27,11 @@ class X509EdDSAEngine : Signature { override fun engineInitSign(privateKey: PrivateKey, random: SecureRandom) = engine.initSign(privateKey, random) override fun engineInitVerify(publicKey: PublicKey) { - val parsedKey = if (publicKey is sun.security.x509.X509Key) { - EdDSAPublicKey(X509EncodedKeySpec(publicKey.encoded)) - } else { - publicKey + val parsedKey = try { + publicKey as? EdDSAPublicKey ?: EdDSAPublicKey(X509EncodedKeySpec(publicKey.encoded)) + } catch(e: Exception) { + throw (InvalidKeyException(e.message)) } - engine.initVerify(parsedKey) } diff --git a/core/src/test/kotlin/net/corda/core/internal/X509EdDSAEngineTest.kt b/core/src/test/kotlin/net/corda/core/internal/X509EdDSAEngineTest.kt index c4cca75b83..eb5586c483 100644 --- a/core/src/test/kotlin/net/corda/core/internal/X509EdDSAEngineTest.kt +++ b/core/src/test/kotlin/net/corda/core/internal/X509EdDSAEngineTest.kt @@ -114,4 +114,12 @@ class X509EdDSAEngineTest { engine.verify(signature) } } + + /** Verify will fail if the input public key cannot be converted to EdDSA public key. */ + @Test + fun `verify with non-supported key type fails`() { + val engine = EdDSAEngine() + val keyPair = Crypto.deriveKeyPairFromEntropy(Crypto.ECDSA_SECP256K1_SHA256, BigInteger.valueOf(SEED)) + assertFailsWith { engine.initVerify(keyPair.public) } + } } \ No newline at end of file