diff --git a/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/definitions/LibsodiumHashDefinitions.kt b/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/definitions/LibsodiumHashDefinitions.kt index ec02290..b196ecf 100644 --- a/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/definitions/LibsodiumHashDefinitions.kt +++ b/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/definitions/LibsodiumHashDefinitions.kt @@ -18,9 +18,6 @@ fun ClassDefinition.defineHashFunctions() { "crypto_hash_sha256_state" ) +funcDef( - "crypto_hash_sha256_init_spec", - "crypto_hash_sha256_init", - "crypto_hash_sha256_init", "crypto_hash_sha256_init", CustomTypeDefinition(ClassName(packageName, "Sha256State")), dynamicJsReturn = true, diff --git a/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/generator/JsLibsodiumGenerator.kt b/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/generator/JsLibsodiumGenerator.kt index 82a4e59..cf0d4a4 100644 --- a/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/generator/JsLibsodiumGenerator.kt +++ b/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/generator/JsLibsodiumGenerator.kt @@ -85,8 +85,13 @@ object JsLibsodiumGenerator { constructJsCall.append(paramsToString(methodDefinition)) } is CustomTypeDefinition -> { - constructJsCall.append("return getSodium().${methodDefinition.jsName}") - constructJsCall.append(paramsToString(methodDefinition)) + if (methodDefinition.parameterList.filter { it.isStateType.not() }.size > 0) { + constructJsCall.append("return getSodium().${methodDefinition.jsName}") + constructJsCall.append(paramsToString(methodDefinition)) + } else { + constructJsCall.append("val result = js(\"getSodium().${methodDefinition.jsName}()\")") + constructJsCall.append("\nreturn result") + } } } methodBuilder.addStatement(constructJsCall.toString()) diff --git a/multiplatform-crypto-libsodium-bindings/build.gradle.kts b/multiplatform-crypto-libsodium-bindings/build.gradle.kts index 12f3783..d81fe4e 100644 --- a/multiplatform-crypto-libsodium-bindings/build.gradle.kts +++ b/multiplatform-crypto-libsodium-bindings/build.gradle.kts @@ -566,12 +566,12 @@ tasks { // } // } -// val jsIrBrowserTest by getting(KotlinJsTest::class) { -// testLogging { -// events("PASSED", "FAILED", "SKIPPED") -// showStandardStreams = true -// } -// } + val jsBrowserTest by getting(KotlinJsTest::class) { + testLogging { + events("PASSED", "FAILED", "SKIPPED") + showStandardStreams = true + } + } } if (getHostOsName() == "windows") { diff --git a/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/debug/test/DebugTest.kt b/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/debug/test/DebugTest.kt index e28a1ca..6287381 100644 --- a/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/debug/test/DebugTest.kt +++ b/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/debug/test/DebugTest.kt @@ -10,7 +10,7 @@ expect class Sha512State expect class GenericHashState expect class Crypto internal constructor() { - fun crypto_hash_sha256_init_spec(): Sha256State + fun crypto_hash_sha256_init(): Sha256State fun crypto_hash_sha256_update(state: Sha256State, input: UByteArray) diff --git a/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/SmokeTest.kt b/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/SmokeTest.kt index 2c2d1fe..f160c9a 100644 --- a/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/SmokeTest.kt +++ b/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/SmokeTest.kt @@ -1,5 +1,6 @@ package com.ionspin.kotlin.crypto +import com.ionspin.kotlin.bignum.integer.BigInteger import com.ionspin.kotlin.crypto.hash.encodeToUByteArray import com.ionspin.kotlin.crypto.util.testBlocking import com.ionspin.kotlin.crypto.util.toHexString @@ -13,18 +14,23 @@ import kotlin.test.assertTrue * on 08-Aug-2020 */ class SmokeTest { + //TODO Browser ignores our testBlocking, node works fine though @Test - fun testIfLibraryIsNotOnFire() = testBlocking { - Initializer.initialize() - val crypto = Crypto() - val state256 = crypto.crypto_hash_sha256_init_spec() //TODO seems to be a bug in JS compiler, if we have the same method name in crypto an in JsSodiumInterface, method tries to call wrong method name (unneeded suffix _0) - crypto.crypto_hash_sha256_update(state256, "Hello".encodeToUByteArray()) - val result = crypto.crypto_hash_sha256_final(state256).toHexString() - println("Result: $result") - assertTrue { - "185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" == result + fun testIfLibraryIsNotOnFire() { + testBlocking { + Initializer.initialize() + val crypto = Crypto() + //TODO seems to be a bug in JS compiler, if we have the same method name in crypto an in JsSodiumInterface, method tries to call wrong method name (unneeded suffix _0) + //I've workaround this by making state functions with 1 parameter execute call with js("") wrap, but still might sail somewhere else + val state256 = crypto.crypto_hash_sha256_init() + crypto.crypto_hash_sha256_update(state256, "Hello".encodeToUByteArray()) + val result = crypto.crypto_hash_sha256_final(state256) + val resultString = result.toHexString() + println("Result: $resultString") + assertTrue { + "185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969" == resultString + } + } - - } } diff --git a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/debug/test/DebugTest.kt b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/debug/test/DebugTest.kt index 4ebfc23..b4be625 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/debug/test/DebugTest.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/debug/test/DebugTest.kt @@ -14,9 +14,10 @@ actual typealias Sha512State = Any actual typealias GenericHashState = Any actual class Crypto internal actual constructor() { - actual fun crypto_hash_sha256_init_spec(): dynamic { + actual fun crypto_hash_sha256_init(): dynamic { println("Debug") - return getSodium().crypto_hash_sha256_init() + val result = js("getSodium().crypto_hash_sha256_init()") + return result } actual fun crypto_hash_sha256_update(state: Sha256State, input: UByteArray) { @@ -31,7 +32,8 @@ actual class Crypto internal actual constructor() { actual fun crypto_hash_sha512_init(): dynamic { println("Debug") - return getSodium().crypto_hash_sha512_init() + val result = js("getSodium().crypto_hash_sha512_init()") + return result } actual fun crypto_hash_sha512_update(state: Sha512State, input: UByteArray) { diff --git a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/debug/test/DebugTest.kt b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/debug/test/DebugTest.kt index 022d395..f7d99eb 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/debug/test/DebugTest.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/debug/test/DebugTest.kt @@ -15,7 +15,7 @@ actual typealias Sha512State = Hash.State512 actual typealias GenericHashState = ByteArray actual class Crypto internal actual constructor() { - actual fun crypto_hash_sha256_init_spec(): Sha256State { + actual fun crypto_hash_sha256_init(): Sha256State { val state = debug.test.Sha256State() println("Debug") sodium.crypto_hash_sha256_init(state) diff --git a/multiplatform-crypto-libsodium-bindings/src/nativeMain/kotlin/debug/test/DebugTest.kt b/multiplatform-crypto-libsodium-bindings/src/nativeMain/kotlin/debug/test/DebugTest.kt index 0509ab6..a199eab 100644 --- a/multiplatform-crypto-libsodium-bindings/src/nativeMain/kotlin/debug/test/DebugTest.kt +++ b/multiplatform-crypto-libsodium-bindings/src/nativeMain/kotlin/debug/test/DebugTest.kt @@ -27,7 +27,7 @@ actual class Crypto internal actual constructor() { val _emitByteArray: ByteArray = ByteArray(0) - actual fun crypto_hash_sha256_init_spec(): Sha256State { + actual fun crypto_hash_sha256_init(): Sha256State { val allocated = sodium_malloc(debug.test.Sha256State.size.convert())!! val state = allocated.reinterpret().pointed libsodium.crypto_hash_sha256_init(state.ptr)