diff --git a/java/build.gradle b/java/build.gradle index 9927a2c85..b5dbd3d5c 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -1,3 +1,6 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + plugins { id "base" id "signing" @@ -9,6 +12,10 @@ plugins { allprojects { version = "0.73.2" group = "org.signal" + + tasks.withType(KotlinCompile).configureEach { + compilerOptions.jvmTarget = JvmTarget.JVM_17 + } } subprojects { diff --git a/java/shared/kotlin/org/signal/libsignal/protocol/ecc/Curve.kt b/java/shared/kotlin/org/signal/libsignal/protocol/ecc/Curve.kt index ba3138fbe..3dd79ad9d 100644 --- a/java/shared/kotlin/org/signal/libsignal/protocol/ecc/Curve.kt +++ b/java/shared/kotlin/org/signal/libsignal/protocol/ecc/Curve.kt @@ -9,55 +9,65 @@ package org.signal.libsignal.protocol.ecc import org.signal.libsignal.protocol.InvalidKeyException -const val DJB_TYPE = 0x05 +class Curve { + companion object { + const val DJB_TYPE = 0x05 -fun generateKeyPair(): ECKeyPair { - val privateKey = ECPrivateKey.generate() - val publicKey = privateKey.publicKey() - return ECKeyPair(publicKey, privateKey) -} + @JvmStatic + fun generateKeyPair(): ECKeyPair { + val privateKey = ECPrivateKey.generate() + val publicKey = privateKey.publicKey() + return ECKeyPair(publicKey, privateKey) + } -@Throws(InvalidKeyException::class) -fun decodePoint(bytes: ByteArray?, offset: Int): ECPublicKey { - if (bytes == null || bytes.size - offset < 1) { - throw InvalidKeyException("No key type identifier") + @JvmStatic + @Throws(InvalidKeyException::class) + fun decodePoint(bytes: ByteArray?, offset: Int): ECPublicKey { + if (bytes == null || bytes.size - offset < 1) { + throw InvalidKeyException("No key type identifier") + } + + return ECPublicKey(bytes, offset) + } + + @JvmStatic + @Throws(InvalidKeyException::class) + fun decodePrivatePoint(bytes: ByteArray?): ECPrivateKey { + return ECPrivateKey(bytes) + } + + @JvmStatic + @Throws(InvalidKeyException::class) + fun calculateAgreement(publicKey: ECPublicKey?, privateKey: ECPrivateKey?): ByteArray { + if (publicKey == null) { + throw InvalidKeyException("public value is null") + } + + if (privateKey == null) { + throw InvalidKeyException("private value is null") + } + + return privateKey.calculateAgreement(publicKey) + } + + @JvmStatic + @Throws(InvalidKeyException::class) + fun verifySignature(signingKey: ECPublicKey?, message: ByteArray?, signature: ByteArray?): Boolean { + if (signingKey == null || message == null || signature == null) { + throw InvalidKeyException("Values must not be null") + } + + return signingKey.verifySignature(message, signature) + } + + @JvmStatic + @Throws(InvalidKeyException::class) + fun calculateSignature(signingKey: ECPrivateKey?, message: ByteArray?): ByteArray { + if (signingKey == null || message == null) { + throw InvalidKeyException("Values must not be null") + } + + return signingKey.calculateSignature(message) + } } - - return ECPublicKey(bytes, offset) -} - -@Throws(InvalidKeyException::class) -fun decodePrivatePoint(bytes: ByteArray?): ECPrivateKey { - return ECPrivateKey(bytes) -} - -@Throws(InvalidKeyException::class) -fun calculateAgreement(publicKey: ECPublicKey?, privateKey: ECPrivateKey?): ByteArray { - if (publicKey == null) { - throw InvalidKeyException("public value is null") - } - - if (privateKey == null) { - throw InvalidKeyException("private value is null") - } - - return privateKey.calculateAgreement(publicKey) -} - -@Throws(InvalidKeyException::class) -fun verifySignature(signingKey: ECPublicKey?, message: ByteArray?, signature: ByteArray?): Boolean { - if (signingKey == null || message == null || signature == null) { - throw InvalidKeyException("Values must not be null") - } - - return signingKey.verifySignature(message, signature) -} - -@Throws(InvalidKeyException::class) -fun calculateSignature(signingKey: ECPrivateKey?, message: ByteArray?): ByteArray { - if (signingKey == null || message == null) { - throw InvalidKeyException("Values must not be null") - } - - return signingKey.calculateSignature(message) }