JS fixes.

Use libsodium-sumo module for ready and _sodium_init, and libsodium-wrapper-sumo for JsSodiumInterface

Load JsSodiumInterface as external object

Clean up JsSodiumLoader: remove storeSodium (not needed anymore)
Clean up LibsodiumInitializer: remove sodiumPointer (not needed anymore)
This commit is contained in:
Luca Spinazzola 2022-03-25 02:43:10 -04:00
parent 494e3d5ac0
commit e16167a08e
4 changed files with 17 additions and 30 deletions

View File

@ -9,10 +9,10 @@ import org.khronos.webgl.Uint8Array
* ugljesa.jovanovic@ionspin.com * ugljesa.jovanovic@ionspin.com
* on 27-May-2020 * on 27-May-2020
*/ */
interface JsSodiumInterface { @JsModule("libsodium-wrappers-sumo")
@JsNonModule
external object JsSodiumInterface {
@JsName("sodium_init")
fun sodium_init() : Int
@JsName("crypto_generichash") @JsName("crypto_generichash")
fun crypto_generichash(hashLength: Int, inputMessage: Uint8Array, key: Uint8Array): Uint8Array fun crypto_generichash(hashLength: Int, inputMessage: Uint8Array, key: Uint8Array): Uint8Array

View File

@ -1,11 +1,7 @@
package ext.libsodium.com.ionspin.kotlin.crypto package ext.libsodium.com.ionspin.kotlin.crypto
import com.ionspin.kotlin.crypto.getSodiumLoaded import com.ionspin.kotlin.crypto.*
import com.ionspin.kotlin.crypto.setSodiumPointer
import com.ionspin.kotlin.crypto.sodiumLoaded
import com.ionspin.kotlin.crypto.sodiumPointer
import ext.libsodium.* import ext.libsodium.*
import kotlin.coroutines.Continuation
import kotlin.coroutines.suspendCoroutine import kotlin.coroutines.suspendCoroutine
/** /**
@ -25,18 +21,15 @@ object JsSodiumLoader {
} }
fun storeSodium(promisedSodium: dynamic, continuation: Continuation<Unit>) {
setSodiumPointer(promisedSodium)
sodiumLoaded = true
continuation.resumeWith(Result.success(Unit))
}
suspend fun load() = suspendCoroutine<Unit> { continuation -> suspend fun load() = suspendCoroutine<Unit> { continuation ->
console.log(getSodiumLoaded()) console.log(getSodiumLoaded())
if (!getSodiumLoaded()) { if (!getSodiumLoaded()) {
val libsodiumModule = js("\$module\$libsodium_wrappers_sumo")
_libsodiumPromise.then<dynamic> { _libsodiumPromise.then<dynamic> {
storeSodium(libsodiumModule, continuation) sodium_init()
sodiumLoaded = true
continuation.resumeWith(Result.success(Unit))
}.catch { e ->
continuation.resumeWith(Result.failure(e))
} }
} else { } else {
continuation.resumeWith(Result.success(Unit)) continuation.resumeWith(Result.success(Unit))
@ -46,10 +39,8 @@ object JsSodiumLoader {
fun loadWithCallback(doneCallback: () -> (Unit)) { fun loadWithCallback(doneCallback: () -> (Unit)) {
console.log(getSodiumLoaded()) console.log(getSodiumLoaded())
if (!getSodiumLoaded()) { if (!getSodiumLoaded()) {
val libsodiumModule = js("\$module\$libsodium_wrappers_sumo")
_libsodiumPromise.then<dynamic> { _libsodiumPromise.then<dynamic> {
setSodiumPointer(libsodiumModule) sodium_init()
sodiumPointer.sodium_init()
sodiumLoaded = true sodiumLoaded = true
doneCallback.invoke() doneCallback.invoke()
} }

View File

@ -2,22 +2,15 @@ package com.ionspin.kotlin.crypto
import ext.libsodium.com.ionspin.kotlin.crypto.JsSodiumInterface import ext.libsodium.com.ionspin.kotlin.crypto.JsSodiumInterface
import ext.libsodium.com.ionspin.kotlin.crypto.JsSodiumLoader import ext.libsodium.com.ionspin.kotlin.crypto.JsSodiumLoader
/* 1.4-M1 has some weirdness with static/objects, or I'm misusing something, not sure */
lateinit var sodiumPointer : JsSodiumInterface
var sodiumLoaded: Boolean = false var sodiumLoaded: Boolean = false
fun getSodium() : JsSodiumInterface = sodiumPointer fun getSodium() : JsSodiumInterface = JsSodiumInterface
//fun getSodiumAdvanced() : JsSodiumAdvancedInterface = js("sodiumPointer.libsodium")
fun setSodiumPointer(jsSodiumInterface: JsSodiumInterface) {
js("sodiumPointer = jsSodiumInterface")
}
fun getSodiumLoaded() : Boolean = sodiumLoaded fun getSodiumLoaded() : Boolean = sodiumLoaded
fun setSodiumLoaded(loaded: Boolean) { fun setSodiumLoaded(loaded: Boolean) {
js("sodiumLoaded = loaded") sodiumLoaded = loaded
} }
actual object LibsodiumInitializer { actual object LibsodiumInitializer {

View File

@ -1,4 +1,4 @@
@file:JsModule("libsodium-wrappers-sumo") @file:JsModule("libsodium-sumo")
@file:JsNonModule @file:JsNonModule
package ext.libsodium package ext.libsodium
@ -15,6 +15,9 @@ import kotlin.js.Promise
@JsName("ready") @JsName("ready")
external val _libsodiumPromise : Promise<dynamic> external val _libsodiumPromise : Promise<dynamic>
@JsName("_sodium_init")
external fun sodium_init() : Int
external fun crypto_generichash(hashLength: Int, inputMessage: Uint8Array) : Uint8Array external fun crypto_generichash(hashLength: Int, inputMessage: Uint8Array) : Uint8Array
external fun crypto_hash_sha256(message: Uint8Array) : Uint8Array external fun crypto_hash_sha256(message: Uint8Array) : Uint8Array