Call sodium init in js and jvm
This commit is contained in:
		
							parent
							
								
									010ee5bd11
								
							
						
					
					
						commit
						e000d13b79
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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()
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -73,6 +73,12 @@ class SecretStreamXChaCha20Poly1305State : Structure() {
 | 
			
		||||
 | 
			
		||||
interface JnaLibsodiumInterface : Library {
 | 
			
		||||
 | 
			
		||||
    // ---- Initialization ---
 | 
			
		||||
 | 
			
		||||
    fun sodium_init() : Int
 | 
			
		||||
 | 
			
		||||
    // ---- Initialization end ---
 | 
			
		||||
 | 
			
		||||
    // ---- Utils ----
 | 
			
		||||
    fun sodium_version_string(): String
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user