diff --git a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt index a1af2a2..7be5d75 100644 --- a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt +++ b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt @@ -9,6 +9,11 @@ import org.khronos.webgl.Uint8Array * ugljesa.jovanovic@ionspin.com * on 27-May-2020 */ + +typealias UByte = Int +typealias UInt = Long + + @JsModule("libsodium-wrappers-sumo") external object JsSodiumInterface { @@ -93,6 +98,9 @@ external object JsSodiumInterface { @JsName("crypto_secretstream_xchacha20poly1305_init_push") fun crypto_secretstream_xchacha20poly1305_init_push(key: Uint8Array) : JsAny @JsName("crypto_secretstream_xchacha20poly1305_push") + // TODO: два варианта: \/ + // 1. Меняем юбайт на байт и юинт на инт \/ + // 2. Меняем юбайт на инт и юинт на лонг \/ и далее по списку fun crypto_secretstream_xchacha20poly1305_push(state: JsAny, message: Uint8Array, associatedData: Uint8Array, tag: UByte) : Uint8Array //decrypt diff --git a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt index a4509a0..f85eacd 100644 --- a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt +++ b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumLoader.kt @@ -27,14 +27,18 @@ object JsSodiumLoader { } - suspend fun load() = suspendCoroutine { continuation -> + // TODO: попробовать сделать из этого suspend вместо continuation + suspend fun load(): Unit = suspendCoroutine { continuation -> if (!getSodiumLoaded()) { - _libsodiumPromise.then { + _libsodiumPromise.then { sodium_init() sodiumLoaded = true + //Dynamic может быть Юнит, но Unit не может быть JsAny? continuation.resumeWith(Result.success(Unit)) - }.catch { e -> + null + }.catch { e-> continuation.resumeWith(Result.failure(e)) + null } } else { continuation.resumeWith(Result.success(Unit)) @@ -43,7 +47,7 @@ object JsSodiumLoader { fun loadWithCallback(doneCallback: () -> (Unit)) { if (!getSodiumLoaded()) { - _libsodiumPromise.then { + _libsodiumPromise.then { sodium_init() sodiumLoaded = true doneCallback.invoke() diff --git a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/libsodium.kt b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/libsodium.kt index 85ff707..e55db33 100644 --- a/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/libsodium.kt +++ b/multiplatform-crypto-libsodium-bindings/src/wasmJsMain/kotlin/libsodium.kt @@ -1,5 +1,5 @@ @file:JsModule("libsodium-sumo") -@file:JsNonModule +//@file:JsNonModule package ext.libsodium import org.khronos.webgl.Uint8Array @@ -13,7 +13,7 @@ import kotlin.js.Promise */ @JsName("ready") -external val _libsodiumPromise : Promise +external val _libsodiumPromise : Promise @JsName("_sodium_init") external fun sodium_init() : Int @@ -23,7 +23,7 @@ external fun crypto_generichash(hashLength: Int, inputMessage: Uint8Array) : Uin external fun crypto_hash_sha256(message: Uint8Array) : Uint8Array external fun crypto_hash_sha512(message: Uint8Array) : Uint8Array -external fun crypto_hash_sha256_init(): dynamic +external fun crypto_hash_sha256_init(): JsAny