Skip to content

Commit 44e7f93

Browse files
Add custom return code handler for initialization call
1 parent 9eec707 commit 44e7f93

File tree

4 files changed

+24
-6
lines changed

4 files changed

+24
-6
lines changed

multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/GeneralLibsodiumException.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.ionspin.kotlin.crypto
22

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

5-
class GeneralLibsodiumException : RuntimeException("Libsodium reported error! Returned value was -1") {
5+
class GeneralLibsodiumException(message: String) : RuntimeException(message) {
66
companion object {
77
/**
88
* Throws a [GeneralLibsodiumException] if the return code is not
@@ -12,7 +12,7 @@ class GeneralLibsodiumException : RuntimeException("Libsodium reported error! Re
1212
*/
1313
fun Int.ensureLibsodiumSuccess() {
1414
if (!isLibsodiumSuccessCode()) {
15-
throw GeneralLibsodiumException()
15+
throw GeneralLibsodiumException("Libsodium reported error! Returned value was -1")
1616
}
1717
}
1818
}

multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/LibsodiumInitializer.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,21 @@ expect object LibsodiumInitializer {
1010

1111
fun initializeWithCallback(done: () -> (Unit))
1212
}
13+
14+
/**
15+
* Ensures a successful response from the Libsodium init call.
16+
*
17+
* The init call has a slightly different return pattern, documented as:
18+
*
19+
* sodium_init() returns 0 on success, -1 on failure, and 1 if the library had already been initialized.
20+
*
21+
* This function will throw if anything other than 0 or 1 is returned.
22+
*/
23+
internal fun Int.ensureInitSuccess() {
24+
when (this) {
25+
0, 1 -> {
26+
// no-op: both successful responses
27+
}
28+
else -> throw GeneralLibsodiumException("Libsodium initialization failed with code: $this")
29+
}
30+
}

multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/LibsodiumInitializer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@ actual object LibsodiumInitializer {
5050
lateinit var sodiumJna : JnaLibsodiumInterface
5151
actual suspend fun initialize() {
5252
sodiumJna = loadLibrary()
53-
sodiumJna.sodium_init().ensureLibsodiumSuccess()
53+
sodiumJna.sodium_init().ensureInitSuccess()
5454
isPlatformInitialized = true
5555
}
5656

5757
actual fun initializeWithCallback(done: () -> Unit) {
5858
sodiumJna = loadLibrary()
59-
sodiumJna.sodium_init().ensureLibsodiumSuccess()
59+
sodiumJna.sodium_init().ensureInitSuccess()
6060
isPlatformInitialized = true
6161
done()
6262
}

multiplatform-crypto-libsodium-bindings/src/nativeMain/kotlin/com/ionspin/kotlin/crypto/LibsodiumInitializer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ actual object LibsodiumInitializer {
1212

1313
actual suspend fun initialize() {
1414
if (isPlatformInitialized.compareAndSet(0, 1)) {
15-
sodium_init().ensureLibsodiumSuccess()
15+
sodium_init().ensureInitSuccess()
1616
}
1717

1818

1919
}
2020

2121
actual fun initializeWithCallback(done: () -> Unit) {
2222
if (isPlatformInitialized.compareAndSet(0, 1)) {
23-
sodium_init().ensureLibsodiumSuccess()
23+
sodium_init().ensureInitSuccess()
2424
}
2525
done()
2626
}

0 commit comments

Comments
 (0)