diff --git a/CHANGELOG.md b/CHANGELOG.md index 7120cbd..86dd64d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ (All dates are DD.MM.YYYY) #### 0.8.3-SNAPSHOT +- Fixed loading but not initializing libsodium on js and jvm - Changed subkey id to UInt from Int, limited by JS api - Updated libsodium to latest master 710b2d3963347017ba (potentially will be switched to stable branch) - Experimentig with sodium_malloc usage instead of pinned UByteArrays diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 0dd811f..32b00a0 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -31,7 +31,7 @@ repositories { } dependencies { - implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32") implementation("com.android.tools.build:gradle:4.0.2") } 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 3b4fe47..ad5c987 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 @@ -11,6 +11,8 @@ import org.khronos.webgl.Uint8Array */ interface JsSodiumInterface { + fun sodium_init() : Int + fun randombytes_buf(numberOfBytes: Int): Uint8Array 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 b445487..8961db1 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 @@ -3,6 +3,7 @@ package ext.libsodium.com.ionspin.kotlin.crypto import com.ionspin.kotlin.crypto.getSodiumLoaded import com.ionspin.kotlin.crypto.setSodiumPointer import com.ionspin.kotlin.crypto.sodiumLoaded +import com.ionspin.kotlin.crypto.sodiumPointer import ext.libsodium.* import kotlin.coroutines.Continuation import kotlin.coroutines.suspendCoroutine @@ -28,13 +29,16 @@ object JsSodiumLoader { setSodiumPointer(promisedSodium) sodiumLoaded = true continuation.resumeWith(Result.success(Unit)) + sodiumPointer.sodium_init() } suspend fun load() = suspendCoroutine { continuation -> console.log(getSodiumLoaded()) if (!getSodiumLoaded()) { val libsodiumModule = js("\$module\$libsodium_wrappers_sumo") - _libsodiumPromise.then { storeSodium(libsodiumModule, continuation) } + _libsodiumPromise.then { + storeSodium(libsodiumModule, continuation) + } } else { continuation.resumeWith(Result.success(Unit)) } @@ -46,6 +50,7 @@ object JsSodiumLoader { val libsodiumModule = js("\$module\$libsodium_wrappers_sumo") _libsodiumPromise.then { setSodiumPointer(libsodiumModule) + sodiumPointer.sodium_init() sodiumLoaded = true doneCallback.invoke() } diff --git a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/JnaLibsodiumInterface.kt b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/JnaLibsodiumInterface.kt index f2fa16a..5a82b28 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/JnaLibsodiumInterface.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/JnaLibsodiumInterface.kt @@ -73,6 +73,12 @@ class SecretStreamXChaCha20Poly1305State : Structure() { interface JnaLibsodiumInterface : Library { + // ---- Initialization --- + + fun sodium_init() : Int + + // ---- Initialization end --- + // ---- Utils ---- fun sodium_version_string(): String diff --git a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/LibsodiumInitializer.kt b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/LibsodiumInitializer.kt index 4bd1461..911a32d 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/LibsodiumInitializer.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/LibsodiumInitializer.kt @@ -55,11 +55,13 @@ actual object LibsodiumInitializer { lateinit var sodiumJna : JnaLibsodiumInterface actual suspend fun initialize() { sodiumJna = loadLibrary() + sodiumJna.sodium_init() isPlatformInitialized = true } actual fun initializeWithCallback(done: () -> Unit) { sodiumJna = loadLibrary() + sodiumJna.sodium_init() isPlatformInitialized = true done() }