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
|
* 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
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user