28 lines
694 B
Kotlin
28 lines
694 B
Kotlin
package net.sergeych.crypto
|
|
|
|
import com.ionspin.kotlin.crypto.LibsodiumInitializer
|
|
import kotlinx.coroutines.sync.Mutex
|
|
import kotlinx.coroutines.sync.withLock
|
|
|
|
private var isReady = false
|
|
private val readyAccess = Mutex()
|
|
|
|
/**
|
|
* Library initialization: should be called before all other calls.
|
|
* It is safe and with little performance penalty to call it multiple times.
|
|
*/
|
|
suspend fun initCrypto() {
|
|
// faster to check with no lock
|
|
if( !isReady) {
|
|
readyAccess.withLock {
|
|
// recheck with lock, it could be ready by now
|
|
if( !isReady ) {
|
|
LibsodiumInitializer.initialize()
|
|
isReady = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|