diff --git a/multiplatform-crypto-libsodium-bindings/build.gradle.kts b/multiplatform-crypto-libsodium-bindings/build.gradle.kts index 548a8dc..1fcae36 100644 --- a/multiplatform-crypto-libsodium-bindings/build.gradle.kts +++ b/multiplatform-crypto-libsodium-bindings/build.gradle.kts @@ -73,6 +73,9 @@ android { isMinifyEnabled = false } } + sourceSets.getByName("main") { + jniLibs.srcDir("libs") + } } @@ -447,6 +450,9 @@ kotlin { dependencies { implementation("com.goterl.lazycode:lazysodium-android:4.2.0@aar") implementation("net.java.dev.jna:jna:5.5.0@aar") + implementation(Deps.Jvm.resourceLoader) { + exclude("net.java.dev.jna", "jna") + } } } diff --git a/multiplatform-crypto-libsodium-bindings/src/androidSpecific/com/ionspin/kotlin/crypto/AndroidSodiumWrapper.kt b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/com/ionspin/kotlin/crypto/AndroidSodiumWrapper.kt index b537c33..151dd49 100644 --- a/multiplatform-crypto-libsodium-bindings/src/androidSpecific/com/ionspin/kotlin/crypto/AndroidSodiumWrapper.kt +++ b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/com/ionspin/kotlin/crypto/AndroidSodiumWrapper.kt @@ -1,7 +1,8 @@ package com.ionspin.kotlin.crypto -import com.goterl.lazycode.lazysodium.LazySodiumAndroid import com.goterl.lazycode.lazysodium.SodiumAndroid +import com.ionspin.kotlin.crypto.jnitest.SodiumVersion +import com.sun.jna.Native /** diff --git a/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/arm64-v8a/libsodium.so b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/arm64-v8a/libsodium.so new file mode 100755 index 0000000..f788e86 Binary files /dev/null and b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/arm64-v8a/libsodium.so differ diff --git a/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/armeabi-v7a/libsodium.so b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/armeabi-v7a/libsodium.so new file mode 100755 index 0000000..9f95266 Binary files /dev/null and b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/armeabi-v7a/libsodium.so differ diff --git a/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/armeabi/libsodium.so b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/armeabi/libsodium.so new file mode 100755 index 0000000..a35a5e6 Binary files /dev/null and b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/armeabi/libsodium.so differ diff --git a/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/x86/libsodium.so b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/x86/libsodium.so new file mode 100755 index 0000000..ebc9823 Binary files /dev/null and b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/x86/libsodium.so differ diff --git a/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/x86_64/libsodium.so.so b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/x86_64/libsodium.so.so new file mode 100755 index 0000000..046b0db Binary files /dev/null and b/multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/x86_64/libsodium.so.so differ diff --git a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/jnitest/JniTest.kt b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/jnitest/JniTest.kt index 4796a32..8e05017 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/jnitest/JniTest.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/jnitest/JniTest.kt @@ -4,11 +4,9 @@ import co.libly.resourceloader.FileLoader import co.libly.resourceloader.ResourceLoader import com.sun.jna.Library import com.sun.jna.Native -import com.sun.jna.NativeLibrary import com.sun.jna.Platform import java.io.File import java.lang.RuntimeException -import kotlin.test.assertEquals /** * Created by Ugljesa Jovanovic @@ -17,7 +15,7 @@ import kotlin.test.assertEquals */ object JniTest { - fun work() { + fun work() : String { val libraryFile = when { Platform.isMac() -> { FileLoader.get().load("dynamic-macos-x86-64.dylib", Any::class.java) @@ -29,20 +27,28 @@ object JniTest { FileLoader.get().load("dynamic-msvc-x86-64-libsodium.dll", Any::class.java) } Platform.isAndroid() -> { - File("/home/ionspin/Projects/Future/kotlin-multiplatform-libsodium/multiplatform-crypto-libsodium-bindings/src/jvmMain/resources/dynamic-linux-x86-64-libsodium.so") + when { + Platform.is64Bit() -> { + File("irrelevant") + } + else -> throw RuntimeException("Unsupported platform") + } } else -> throw RuntimeException("Unknown platform") } - + val loaded = if (Platform.isAndroid()) { + Native.load("sodium", SodiumVersion::class.java) as SodiumVersion + } else { + Native.load(libraryFile.absolutePath, SodiumVersion::class.java) as SodiumVersion + } println(libraryFile.absoluteFile) - val loaded = Native.load(libraryFile.absolutePath, SodiumVersion::class.java) as SodiumVersion val version = loaded.sodium_version_string() println("Loaded ${loaded.sodium_version_string()}") - assertEquals("1.0.18", version) + return version } } diff --git a/multiplatform-crypto-libsodium-bindings/src/jvmSpecific/com/ionspin/kotlin/crypto/JvmSodiumWrapper.kt b/multiplatform-crypto-libsodium-bindings/src/jvmSpecific/com/ionspin/kotlin/crypto/JvmSodiumWrapper.kt index eb62fc6..d0f0a04 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jvmSpecific/com/ionspin/kotlin/crypto/JvmSodiumWrapper.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jvmSpecific/com/ionspin/kotlin/crypto/JvmSodiumWrapper.kt @@ -2,6 +2,8 @@ package com.ionspin.kotlin.crypto import com.goterl.lazycode.lazysodium.LazySodiumJava import com.goterl.lazycode.lazysodium.SodiumJava +import com.ionspin.kotlin.crypto.jnitest.JniTest +import com.ionspin.kotlin.crypto.jnitest.SodiumVersion /** * Created by Ugljesa Jovanovic @@ -9,3 +11,4 @@ import com.goterl.lazycode.lazysodium.SodiumJava * on 22-Aug-2020 */ typealias SodiumWrapper = SodiumJava +typealias JniTestWrapper = SodiumVersion diff --git a/multiplatform-crypto-libsodium-bindings/src/jvmTest/kotlin/com/ionspin/kotlin/crypto/jnitest/JniTestTest.kt b/multiplatform-crypto-libsodium-bindings/src/jvmTest/kotlin/com/ionspin/kotlin/crypto/jnitest/JniTestTest.kt index 79e1a29..4352bc9 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jvmTest/kotlin/com/ionspin/kotlin/crypto/jnitest/JniTestTest.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jvmTest/kotlin/com/ionspin/kotlin/crypto/jnitest/JniTestTest.kt @@ -1,6 +1,7 @@ package com.ionspin.kotlin.crypto.jnitest import org.junit.Test +import kotlin.test.assertEquals /** * Created by Ugljesa Jovanovic @@ -11,6 +12,7 @@ class JniTestTest { @Test fun testJniTest() { - JniTest.work() + val result = JniTest.work() + assertEquals("1.0.18", result) } } diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index 295d20b..f304232 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -63,7 +63,7 @@ kotlin { android() runningOnLinuxx86_64 { jvm() - js { + js(IR) { browser { webpackTask { @@ -188,7 +188,7 @@ kotlin { implementation(kotlin(Deps.Common.test)) implementation(Deps.Common.kotlinBigNum) implementation(Deps.Common.serialization) - api(Deps.Common.libsodiumBindings) + api(project(":multiplatform-crypto-libsodium-bindings")) } } val commonTest by getting { diff --git a/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/MainActivity.kt b/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/MainActivity.kt index f484737..54ae6ea 100644 --- a/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/MainActivity.kt +++ b/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/MainActivity.kt @@ -7,6 +7,7 @@ package com.ionspin.kotlin.crypto.sample import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.ionspin.kotlin.crypto.hash.Hash +import com.ionspin.kotlin.crypto.jnitest.JniTest import com.ionspin.kotlin.crypto.util.encodeToUByteArray import com.ionspin.kotlin.crypto.util.toHexString import kotlinx.android.synthetic.main.activity_main.* @@ -18,7 +19,7 @@ class MainActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val hash = Hash.sha512("123".encodeToUByteArray()) - helloWorldTextView.setText("Hash (SHA512) of 123: ${hash.toHexString()}") + helloWorldTextView.setText("Hash (SHA512) of 123: ${hash.toHexString()} \nSodium version: ${JniTest.work()}") } diff --git a/sample/src/jsMain/kotlin/com/ionspin/kotlin/crypto/sample/Main.kt b/sample/src/jsMain/kotlin/com/ionspin/kotlin/crypto/sample/Main.kt index 1b2174c..f5e426d 100644 --- a/sample/src/jsMain/kotlin/com/ionspin/kotlin/crypto/sample/Main.kt +++ b/sample/src/jsMain/kotlin/com/ionspin/kotlin/crypto/sample/Main.kt @@ -7,11 +7,12 @@ import com.ionspin.kotlin.crypto.util.encodeToUByteArray import com.ionspin.kotlin.crypto.util.toHexString import react.dom.render import kotlinx.browser.document -import kotlin.browser.window +import kotlinx.browser.window + fun main() { val runningOnNode = jsTypeOf(window) == "undefined" - if (!runningOnNode) = runTest { +// if (!runningOnNode) = runTest { LibsodiumInitializer.initializeWithCallback { render(document.getElementById("root")) { app { @@ -19,10 +20,10 @@ fun main() { } } } - } else = runTest { - LibsodiumInitializer.initializeWithCallback { - val hash = Hash.sha512("123".encodeToUByteArray()) - println("Hash (SHA512) of 123: ${hash.toHexString()}") - } - } +// } else = runTest { +// LibsodiumInitializer.initializeWithCallback { +// val hash = Hash.sha512("123".encodeToUByteArray()) +// println("Hash (SHA512) of 123: ${hash.toHexString()}") +// } +// } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 98649a6..d0a5cf9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -37,5 +37,5 @@ enableFeaturePreview("GRADLE_METADATA") rootProject.name = "KotlinMultiplatformLibsodium" include("multiplatform-crypto-api") include("multiplatform-crypto-libsodium-bindings") -//include("sample") +include("sample")