From e17f5a8dd521f6df818066f5a0530f9e807703b0 Mon Sep 17 00:00:00 2001 From: sergeych Date: Tue, 28 Jul 2026 02:36:16 +0400 Subject: [PATCH] Fix libsodium initialization on Kotlin Wasm --- buildSrc/src/main/kotlin/Deps.kt | 3 +- .../kotlin/crypto/JsSodiumInterface.kt | 5 +++- .../ionspin/kotlin/crypto/JsSodiumLoader.kt | 17 ++--------- .../src/wasmJsMain/kotlin/libsodium.kt | 30 ------------------- 4 files changed, 7 insertions(+), 48 deletions(-) delete mode 100644 multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/libsodium.kt diff --git a/buildSrc/src/main/kotlin/Deps.kt b/buildSrc/src/main/kotlin/Deps.kt index 9324b52..7a432b5 100644 --- a/buildSrc/src/main/kotlin/Deps.kt +++ b/buildSrc/src/main/kotlin/Deps.kt @@ -37,7 +37,7 @@ object Versions { object ReleaseInfo { val group = "net.sergeych" - val bindingsVersion = "0.9.6" + val bindingsVersion = "0.9.8-SNAPSHOT" } object Deps { @@ -142,4 +142,3 @@ object PluginsDeps { val kotlinAndroid = "kotlin-android" val kapt = "kotlin-kapt" } - diff --git a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt index e766fa5..54b4a39 100644 --- a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt +++ b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt @@ -2,6 +2,7 @@ package ext.libsodium.com.ionspin.kotlin.crypto import org.khronos.webgl.Uint8Array +import kotlin.js.Promise /** * Created by Ugljesa Jovanovic @@ -16,7 +17,9 @@ external object JsSodium: JsAny { } @JsModule("libsodium-wrappers-sumo") -external object JsSodiumInterface: JsAny { +external interface JsSodiumInterface: JsAny { + val ready: Promise + @JsName("crypto_generichash") fun crypto_generichash(hashLength: Int, inputMessage: Uint8Array, key: Uint8Array): Uint8Array diff --git a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt index 183bb85..aa0bbf9 100644 --- a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt +++ b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt @@ -2,7 +2,6 @@ package ext.libsodium.com.ionspin.kotlin.crypto import com.ionspin.kotlin.crypto.getSodiumLoaded import com.ionspin.kotlin.crypto.sodiumLoaded -import ext.libsodium.* import kotlin.coroutines.suspendCoroutine /** @@ -12,20 +11,9 @@ import kotlin.coroutines.suspendCoroutine */ object JsSodiumLoader { - class _EmitJsSodiumFunction { - init { - println(::crypto_generichash) - println(::crypto_hash_sha256) - println(::crypto_hash_sha512) - println(::crypto_hash_sha256_init) - } - - } - suspend fun load(): Unit = suspendCoroutine { continuation -> if (!getSodiumLoaded()) { - _libsodiumPromise.then { - sodium_init() + JsSodium.default.ready.then { sodiumLoaded = true continuation.resumeWith(Result.success(Unit)) null @@ -45,8 +33,7 @@ object JsSodiumLoader { fun loadWithCallback(doneCallback: () -> (Unit)) { if (!getSodiumLoaded()) { - _libsodiumPromise.then { - sodium_init() + JsSodium.default.ready.then { sodiumLoaded = true doneCallback.invoke() null diff --git a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/libsodium.kt b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/libsodium.kt deleted file mode 100644 index 9c3b6be..0000000 --- a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/libsodium.kt +++ /dev/null @@ -1,30 +0,0 @@ -@file:JsModule("libsodium-sumo") -package ext.libsodium - -import org.khronos.webgl.Uint8Array -import kotlin.js.Promise - - -/** - * Created by Ugljesa Jovanovic - * ugljesa.jovanovic@ionspin.com - * on 25-May-2020 - */ - -@JsName("ready") -external val _libsodiumPromise : Promise - -@JsName("_sodium_init") -external fun sodium_init() : Int - -external fun crypto_generichash(hashLength: Int, inputMessage: Uint8Array) : Uint8Array - -external fun crypto_hash_sha256(message: Uint8Array) : Uint8Array -external fun crypto_hash_sha512(message: Uint8Array) : Uint8Array - -external fun crypto_hash_sha256_init(): JsAny - - - - -