Skip to content

Commit

Permalink
feat(ed25519): add jvm and android ed25519 implementation (#85)
Browse files Browse the repository at this point in the history
  • Loading branch information
goncalo-frade-iohk authored Jul 24, 2023
1 parent e8945df commit ee9757d
Show file tree
Hide file tree
Showing 12 changed files with 59 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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()
}
}
Original file line number Diff line number Diff line change
@@ -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
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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)
Original file line number Diff line number Diff line change
@@ -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)
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
Original file line number Diff line number Diff line change
@@ -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()
}
}
Original file line number Diff line number Diff line change
@@ -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
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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)
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit ee9757d

Please sign in to comment.