From e71ff35e14fabd4d0d75d80c90cc853c9e71e6a0 Mon Sep 17 00:00:00 2001 From: sergeych Date: Tue, 28 Jul 2026 10:07:29 +0400 Subject: [PATCH] Fix libsodium initialization on Kotlin JS --- .../kotlin/crypto/JsSodiumInterface.kt | 3 ++ .../ionspin/kotlin/crypto/JsSodiumLoader.kt | 22 ++----------- .../src/jsMain/kotlin/libsodium.kt | 31 ------------------- 3 files changed, 5 insertions(+), 51 deletions(-) delete mode 100644 multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/libsodium.kt diff --git a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt index 71e4b31..4a3a2bb 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt @@ -3,6 +3,7 @@ package ext.libsodium.com.ionspin.kotlin.crypto import com.ionspin.kotlin.crypto.box.BoxKeyPair import org.khronos.webgl.Uint8Array +import kotlin.js.Promise /** * Created by Ugljesa Jovanovic @@ -13,6 +14,8 @@ import org.khronos.webgl.Uint8Array @JsNonModule external object JsSodiumInterface { + val ready: Promise + @JsName("crypto_generichash") fun crypto_generichash(hashLength: Int, inputMessage: Uint8Array, key: Uint8Array): Uint8Array diff --git a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt index a4509a0..970045d 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt @@ -2,12 +2,6 @@ package ext.libsodium.com.ionspin.kotlin.crypto import com.ionspin.kotlin.crypto.getSodiumLoaded import com.ionspin.kotlin.crypto.sodiumLoaded -import ext.libsodium._libsodiumPromise -import ext.libsodium.crypto_generichash -import ext.libsodium.crypto_hash_sha256 -import ext.libsodium.crypto_hash_sha256_init -import ext.libsodium.crypto_hash_sha512 -import ext.libsodium.sodium_init import kotlin.coroutines.suspendCoroutine /** @@ -17,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() = suspendCoroutine { continuation -> if (!getSodiumLoaded()) { - _libsodiumPromise.then { - sodium_init() + JsSodiumInterface.ready.then { sodiumLoaded = true continuation.resumeWith(Result.success(Unit)) }.catch { e -> @@ -43,8 +26,7 @@ object JsSodiumLoader { fun loadWithCallback(doneCallback: () -> (Unit)) { if (!getSodiumLoaded()) { - _libsodiumPromise.then { - sodium_init() + JsSodiumInterface.ready.then { sodiumLoaded = true doneCallback.invoke() } diff --git a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/libsodium.kt b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/libsodium.kt deleted file mode 100644 index 85ff707..0000000 --- a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/libsodium.kt +++ /dev/null @@ -1,31 +0,0 @@ -@file:JsModule("libsodium-sumo") -@file:JsNonModule -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(): dynamic - - - - -