diff --git a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdKeyPair.kt b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdKeyPair.kt index c353c9541..0a24db654 100644 --- a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdKeyPair.kt +++ b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdKeyPair.kt @@ -11,8 +11,8 @@ actual class KMMEdKeyPair actual constructor(actual val privateKey: KMMEdPrivate val generator = KeyPairGenerator.getInstance("Ed25519", provider) val javaKeyPair: KeyPair = generator.generateKeyPair() return KMMEdKeyPair( - KMMEdPrivateKey(javaKeyPair.private), - KMMEdPublicKey(javaKeyPair.public) + KMMEdPrivateKey(javaKeyPair.private.encoded), + KMMEdPublicKey(javaKeyPair.public.encoded) ) } } diff --git a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPrivateKey.kt b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPrivateKey.kt index 5920cc2b6..f3131e676 100644 --- a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPrivateKey.kt +++ b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPrivateKey.kt @@ -1,9 +1,14 @@ package io.iohk.atala.prism.apollo.utils -import java.security.PrivateKey +import org.bouncycastle.crypto.params.Ed25519PrivateKeyParameters +import org.bouncycastle.crypto.signers.Ed25519Signer -actual class KMMEdPrivateKey(val nativeValue: PrivateKey) { +actual class KMMEdPrivateKey(val raw: ByteArray) { actual fun sign(message: ByteArray): ByteArray { - throw NotImplementedError("Not implemented") + val privateKeyParameters = Ed25519PrivateKeyParameters(raw, 0) + val signer = Ed25519Signer() + signer.init(true, privateKeyParameters) + signer.update(message, 0, message.size) + return signer.generateSignature() } } diff --git a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPublicKey.kt b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPublicKey.kt index fead5c456..057007327 100644 --- a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPublicKey.kt +++ b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPublicKey.kt @@ -1,9 +1,20 @@ package io.iohk.atala.prism.apollo.utils -import java.security.PublicKey +import org.bouncycastle.crypto.params.Ed25519PublicKeyParameters +import org.bouncycastle.crypto.signers.Ed25519Signer -actual class KMMEdPublicKey(val nativeValue: PublicKey) { +actual class KMMEdPublicKey(val raw: ByteArray) { actual fun verify(message: ByteArray, sig: ByteArray): Boolean { - throw NotImplementedError("Not implemented") + return try { + val publicKeyParams = Ed25519PublicKeyParameters(raw, 0) + val verifier = Ed25519Signer() + + verifier.init(false, publicKeyParams) + verifier.update(message, 0, message.size) + + verifier.verifySignature(sig) + } catch (e: Exception) { + return false + } } } diff --git a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519KeyPair.kt b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519KeyPair.kt index 89f10828c..57faccaea 100644 --- a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519KeyPair.kt +++ b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519KeyPair.kt @@ -15,8 +15,8 @@ actual class KMMX25519KeyPair actual constructor( kpg.initialize(XDHParameterSpec(XDHParameterSpec.X25519)) val javaKeyPair = kpg.generateKeyPair() return KMMX25519KeyPair( - KMMX25519PrivateKey(javaKeyPair.private), - KMMX25519PublicKey(javaKeyPair.public) + KMMX25519PrivateKey(javaKeyPair.private.encoded), + KMMX25519PublicKey(javaKeyPair.public.encoded) ) } } diff --git a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PrivateKey.kt b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PrivateKey.kt index d95dd5ba5..7f33bb119 100644 --- a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PrivateKey.kt +++ b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PrivateKey.kt @@ -1,5 +1,3 @@ package io.iohk.atala.prism.apollo.utils -import java.security.PrivateKey - -actual class KMMX25519PrivateKey(val nativeValue: PrivateKey) +actual class KMMX25519PrivateKey(val raw: ByteArray) diff --git a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PublicKey.kt b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PublicKey.kt index 15f9df13e..5c525dc9d 100644 --- a/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PublicKey.kt +++ b/base-asymmetric-encryption/src/androidMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PublicKey.kt @@ -1,5 +1,3 @@ package io.iohk.atala.prism.apollo.utils -import java.security.PublicKey - -actual class KMMX25519PublicKey(val nativeValue: PublicKey) +actual class KMMX25519PublicKey(val raw: ByteArray) diff --git a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdKeyPair.kt b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdKeyPair.kt index 51b9a075e..be88bf020 100644 --- a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdKeyPair.kt +++ b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdKeyPair.kt @@ -11,17 +11,17 @@ actual class KMMEdKeyPair actual constructor(actual val privateKey: KMMEdPrivate val generator = KeyPairGenerator.getInstance("Ed25519", provider) val javaKeyPair: KeyPair = generator.generateKeyPair() return KMMEdKeyPair( - KMMEdPrivateKey(javaKeyPair.private), - KMMEdPublicKey(javaKeyPair.public) + KMMEdPrivateKey(javaKeyPair.private.encoded), + KMMEdPublicKey(javaKeyPair.public.encoded) ) } } actual fun sign(message: ByteArray): ByteArray { - TODO("Not yet implemented") + return privateKey.sign(message) } actual fun verify(message: ByteArray, sig: ByteArray): Boolean { - TODO("Not yet implemented") + return publicKey.verify(message, sig) } } diff --git a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPrivateKey.kt b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPrivateKey.kt index c223b6174..06541999a 100644 --- a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPrivateKey.kt +++ b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPrivateKey.kt @@ -1,9 +1,15 @@ package io.iohk.atala.prism.apollo.utils -import java.security.PrivateKey +import org.bouncycastle.crypto.params.Ed25519PrivateKeyParameters +import org.bouncycastle.crypto.signers.Ed25519Signer + +actual class KMMEdPrivateKey(val raw: ByteArray) { -actual class KMMEdPrivateKey(val nativeValue: PrivateKey) { actual fun sign(message: ByteArray): ByteArray { - TODO("Not yet implemented") + val privateKeyParameters = Ed25519PrivateKeyParameters(raw, 0) + val signer = Ed25519Signer() + signer.init(true, privateKeyParameters) + signer.update(message, 0, message.size) + return signer.generateSignature() } } diff --git a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPublicKey.kt b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPublicKey.kt index ac76ef575..057007327 100644 --- a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPublicKey.kt +++ b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMEdPublicKey.kt @@ -1,9 +1,20 @@ package io.iohk.atala.prism.apollo.utils -import java.security.PublicKey +import org.bouncycastle.crypto.params.Ed25519PublicKeyParameters +import org.bouncycastle.crypto.signers.Ed25519Signer -actual class KMMEdPublicKey(val nativeValue: PublicKey) { +actual class KMMEdPublicKey(val raw: ByteArray) { actual fun verify(message: ByteArray, sig: ByteArray): Boolean { - TODO("Not yet implemented") + return try { + val publicKeyParams = Ed25519PublicKeyParameters(raw, 0) + val verifier = Ed25519Signer() + + verifier.init(false, publicKeyParams) + verifier.update(message, 0, message.size) + + verifier.verifySignature(sig) + } catch (e: Exception) { + return false + } } } diff --git a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519KeyPair.kt b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519KeyPair.kt index 89f10828c..57faccaea 100644 --- a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519KeyPair.kt +++ b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519KeyPair.kt @@ -15,8 +15,8 @@ actual class KMMX25519KeyPair actual constructor( kpg.initialize(XDHParameterSpec(XDHParameterSpec.X25519)) val javaKeyPair = kpg.generateKeyPair() return KMMX25519KeyPair( - KMMX25519PrivateKey(javaKeyPair.private), - KMMX25519PublicKey(javaKeyPair.public) + KMMX25519PrivateKey(javaKeyPair.private.encoded), + KMMX25519PublicKey(javaKeyPair.public.encoded) ) } } diff --git a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PrivateKey.kt b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PrivateKey.kt index d95dd5ba5..7f33bb119 100644 --- a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PrivateKey.kt +++ b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PrivateKey.kt @@ -1,5 +1,3 @@ package io.iohk.atala.prism.apollo.utils -import java.security.PrivateKey - -actual class KMMX25519PrivateKey(val nativeValue: PrivateKey) +actual class KMMX25519PrivateKey(val raw: ByteArray) diff --git a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PublicKey.kt b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PublicKey.kt index 15f9df13e..5c525dc9d 100644 --- a/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PublicKey.kt +++ b/base-asymmetric-encryption/src/jvmMain/kotlin/io/iohk/atala/prism/apollo/utils/KMMX25519PublicKey.kt @@ -1,5 +1,3 @@ package io.iohk.atala.prism.apollo.utils -import java.security.PublicKey - -actual class KMMX25519PublicKey(val nativeValue: PublicKey) +actual class KMMX25519PublicKey(val raw: ByteArray)