Call sodium init in js and jvm

This commit is contained in:
Ugljesa Jovanovic 2021-05-01 12:43:29 +02:00
parent 010ee5bd11
commit e000d13b79
No known key found for this signature in database
GPG Key ID: 178E6DFCECCB0E0F
6 changed files with 18 additions and 2 deletions

View File

@ -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

View File

@ -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")
}

View File

@ -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

View File

@ -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<Unit> { continuation ->
console.log(getSodiumLoaded())
if (!getSodiumLoaded()) {
val libsodiumModule = js("\$module\$libsodium_wrappers_sumo")
_libsodiumPromise.then<dynamic> { storeSodium(libsodiumModule, continuation) }
_libsodiumPromise.then<dynamic> {
storeSodium(libsodiumModule, continuation)
}
} else {
continuation.resumeWith(Result.success(Unit))
}
@ -46,6 +50,7 @@ object JsSodiumLoader {
val libsodiumModule = js("\$module\$libsodium_wrappers_sumo")
_libsodiumPromise.then<dynamic> {
setSodiumPointer(libsodiumModule)
sodiumPointer.sodium_init()
sodiumLoaded = true
doneCallback.invoke()
}

View File

@ -73,6 +73,12 @@ class SecretStreamXChaCha20Poly1305State : Structure() {
interface JnaLibsodiumInterface : Library {
// ---- Initialization ---
fun sodium_init() : Int
// ---- Initialization end ---
// ---- Utils ----
fun sodium_version_string(): String

View File

@ -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()
}