A nicer workaround for JS compiler wrong function name bug
This commit is contained in:
parent
5d61858f81
commit
e997c18d1d
@ -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,
|
||||
|
@ -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())
|
||||
|
@ -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") {
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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<debug.test.Sha256State>().pointed
|
||||
libsodium.crypto_hash_sha256_init(state.ptr)
|
||||
|
Loading…
x
Reference in New Issue
Block a user