Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.ionspin.kotlin.crypto

import com.ionspin.kotlin.crypto.util.isLibsodiumSuccessCode

class GeneralLibsodiumException : RuntimeException("Libsodium reported error! Returned value was -1") {
class GeneralLibsodiumException(message: String) : RuntimeException(message) {
companion object {
/**
* Throws a [GeneralLibsodiumException] if the return code is not
Expand All @@ -12,7 +12,7 @@ class GeneralLibsodiumException : RuntimeException("Libsodium reported error! Re
*/
fun Int.ensureLibsodiumSuccess() {
if (!isLibsodiumSuccessCode()) {
throw GeneralLibsodiumException()
throw GeneralLibsodiumException("Libsodium reported error! Returned value was -1")
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,21 @@ expect object LibsodiumInitializer {

fun initializeWithCallback(done: () -> (Unit))
}

/**
* Ensures a successful response from the Libsodium init call.
*
* The init call has a slightly different return pattern, documented as:
*
* sodium_init() returns 0 on success, -1 on failure, and 1 if the library had already been initialized.
*
* This function will throw if anything other than 0 or 1 is returned.
*/
internal fun Int.ensureInitSuccess() {
when (this) {
0, 1 -> {
// no-op: both successful responses
}
else -> throw GeneralLibsodiumException("Libsodium initialization failed with code: $this")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ actual object LibsodiumInitializer {
lateinit var sodiumJna : JnaLibsodiumInterface
actual suspend fun initialize() {
sodiumJna = loadLibrary()
sodiumJna.sodium_init().ensureLibsodiumSuccess()
sodiumJna.sodium_init().ensureInitSuccess()
isPlatformInitialized = true
}

actual fun initializeWithCallback(done: () -> Unit) {
sodiumJna = loadLibrary()
sodiumJna.sodium_init().ensureLibsodiumSuccess()
sodiumJna.sodium_init().ensureInitSuccess()
isPlatformInitialized = true
done()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ actual object LibsodiumInitializer {

actual suspend fun initialize() {
if (isPlatformInitialized.compareAndSet(0, 1)) {
sodium_init().ensureLibsodiumSuccess()
sodium_init().ensureInitSuccess()
}


}

actual fun initializeWithCallback(done: () -> Unit) {
if (isPlatformInitialized.compareAndSet(0, 1)) {
sodium_init().ensureLibsodiumSuccess()
sodium_init().ensureInitSuccess()
}
done()
}
Expand Down