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:
		
							parent
							
								
									494e3d5ac0
								
							
						
					
					
						commit
						e16167a08e
					
				@ -9,10 +9,10 @@ import org.khronos.webgl.Uint8Array
 | 
			
		||||
 * ugljesa.jovanovic@ionspin.com
 | 
			
		||||
 * on 27-May-2020
 | 
			
		||||
 */
 | 
			
		||||
interface JsSodiumInterface {
 | 
			
		||||
@JsModule("libsodium-wrappers-sumo")
 | 
			
		||||
@JsNonModule
 | 
			
		||||
external object JsSodiumInterface {
 | 
			
		||||
 | 
			
		||||
    @JsName("sodium_init")
 | 
			
		||||
    fun sodium_init() : Int
 | 
			
		||||
 | 
			
		||||
    @JsName("crypto_generichash")
 | 
			
		||||
    fun crypto_generichash(hashLength: Int, inputMessage: Uint8Array, key: Uint8Array): Uint8Array
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,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 com.ionspin.kotlin.crypto.*
 | 
			
		||||
import ext.libsodium.*
 | 
			
		||||
import kotlin.coroutines.Continuation
 | 
			
		||||
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 ->
 | 
			
		||||
        console.log(getSodiumLoaded())
 | 
			
		||||
        if (!getSodiumLoaded()) {
 | 
			
		||||
            val libsodiumModule = js("\$module\$libsodium_wrappers_sumo")
 | 
			
		||||
            _libsodiumPromise.then<dynamic> {
 | 
			
		||||
                storeSodium(libsodiumModule, continuation)
 | 
			
		||||
                sodium_init()
 | 
			
		||||
                sodiumLoaded = true
 | 
			
		||||
                continuation.resumeWith(Result.success(Unit))
 | 
			
		||||
            }.catch { e ->
 | 
			
		||||
                continuation.resumeWith(Result.failure(e))
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            continuation.resumeWith(Result.success(Unit))
 | 
			
		||||
@ -46,10 +39,8 @@ object JsSodiumLoader {
 | 
			
		||||
    fun loadWithCallback(doneCallback: () -> (Unit)) {
 | 
			
		||||
        console.log(getSodiumLoaded())
 | 
			
		||||
        if (!getSodiumLoaded()) {
 | 
			
		||||
            val libsodiumModule = js("\$module\$libsodium_wrappers_sumo")
 | 
			
		||||
            _libsodiumPromise.then<dynamic> {
 | 
			
		||||
                setSodiumPointer(libsodiumModule)
 | 
			
		||||
                sodiumPointer.sodium_init()
 | 
			
		||||
                sodium_init()
 | 
			
		||||
                sodiumLoaded = true
 | 
			
		||||
                doneCallback.invoke()
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -2,22 +2,15 @@ package com.ionspin.kotlin.crypto
 | 
			
		||||
 | 
			
		||||
import ext.libsodium.com.ionspin.kotlin.crypto.JsSodiumInterface
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
fun getSodium() : JsSodiumInterface = sodiumPointer
 | 
			
		||||
 | 
			
		||||
//fun getSodiumAdvanced() : JsSodiumAdvancedInterface = js("sodiumPointer.libsodium")
 | 
			
		||||
 | 
			
		||||
fun setSodiumPointer(jsSodiumInterface: JsSodiumInterface) {
 | 
			
		||||
    js("sodiumPointer = jsSodiumInterface")
 | 
			
		||||
}
 | 
			
		||||
fun getSodium() : JsSodiumInterface = JsSodiumInterface
 | 
			
		||||
 | 
			
		||||
fun getSodiumLoaded() : Boolean = sodiumLoaded
 | 
			
		||||
 | 
			
		||||
fun setSodiumLoaded(loaded: Boolean) {
 | 
			
		||||
    js("sodiumLoaded = loaded")
 | 
			
		||||
    sodiumLoaded = loaded
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
actual object LibsodiumInitializer {
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
@file:JsModule("libsodium-wrappers-sumo")
 | 
			
		||||
@file:JsModule("libsodium-sumo")
 | 
			
		||||
@file:JsNonModule
 | 
			
		||||
package ext.libsodium
 | 
			
		||||
 | 
			
		||||
@ -15,6 +15,9 @@ import kotlin.js.Promise
 | 
			
		||||
@JsName("ready")
 | 
			
		||||
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_hash_sha256(message: Uint8Array) : Uint8Array
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user