From cc2f392bb7cf7b0dc4ba8b2f5c9d7e4918c7025b Mon Sep 17 00:00:00 2001 From: Ugljesa Jovanovic Date: Sun, 24 May 2020 20:41:32 +0200 Subject: [PATCH] Working sodium cinterop --- .../build.gradle.kts | 10 ++++++-- .../crypto/hash/blake2b/Blake2bDelegated.kt | 8 ++++--- .../crypto/hash/blake2b/Blake2bLinuxTest.kt | 2 +- .../src/nativeInterop/cinterop/libsodium.def | 6 ++--- sample/build.gradle.kts | 3 +-- .../ionspin/kotlin/crypto/sample/Runner.kt | 24 ++++--------------- 6 files changed, 22 insertions(+), 31 deletions(-) diff --git a/multiplatform-crypto-delegated/build.gradle.kts b/multiplatform-crypto-delegated/build.gradle.kts index e43b981..5e258ec 100644 --- a/multiplatform-crypto-delegated/build.gradle.kts +++ b/multiplatform-crypto-delegated/build.gradle.kts @@ -22,6 +22,7 @@ import org.gradle.api.tasks.testing.logging.TestLogging import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile +import org.jetbrains.kotlin.konan.library.konanCommonLibraryPath plugins { kotlin(PluginsDeps.multiplatform) @@ -92,11 +93,16 @@ kotlin { compilations.getByName("main") { val libsodiumCinterop by cinterops.creating { defFile(project.file("src/nativeInterop/cinterop/libsodium.def")) +// packageName("sodium") +// includeDirs.apply { +// allHeaders("/usr/include/sodium") +// header("/usr/include/sodium.h") +// } +// linkerOpts("-lsodium") } } binaries { staticLib { - optimized = true } } } @@ -177,7 +183,7 @@ kotlin { implementation(kotlin(Deps.Common.test)) implementation(Deps.Common.coroutines) implementation(Deps.Common.kotlinBigNum) - implementation(project(Deps.Common.apiProject)) + api(project(Deps.Common.apiProject)) } } val commonTest by getting { diff --git a/multiplatform-crypto-delegated/src/linuxMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt b/multiplatform-crypto-delegated/src/linuxMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt index 4b235f1..001b6c6 100644 --- a/multiplatform-crypto-delegated/src/linuxMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt +++ b/multiplatform-crypto-delegated/src/linuxMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt @@ -1,6 +1,7 @@ package com.ionspin.kotlin.crypto.hash.blake2b import interop.* import kotlinx.cinterop.* +import libsodium.* /** * Created by Ugljesa Jovanovic * ugljesa.jovanovic@ionspin.com @@ -9,8 +10,7 @@ import kotlinx.cinterop.* @ExperimentalUnsignedTypes actual class Blake2bDelegated actual constructor(key: UByteArray?, hashLength: Int) : Blake2b { - override val MAX_HASH_BYTES: Int - get() = TODO("not implemented yet") + override val MAX_HASH_BYTES: Int = 1024 override fun update(data: UByteArray) { TODO("not implemented yet") @@ -21,7 +21,9 @@ actual class Blake2bDelegated actual constructor(key: UByteArray?, hashLength: I } override fun digest(): UByteArray { - TODO("not implemented yet") + val result = sodium_init() + println("Sodium init $result") + return ubyteArrayOf(0U) } override fun digestString(): String { diff --git a/multiplatform-crypto-delegated/src/linuxTest/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bLinuxTest.kt b/multiplatform-crypto-delegated/src/linuxTest/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bLinuxTest.kt index 7427ca5..d2d82a0 100644 --- a/multiplatform-crypto-delegated/src/linuxTest/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bLinuxTest.kt +++ b/multiplatform-crypto-delegated/src/linuxTest/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bLinuxTest.kt @@ -17,7 +17,7 @@ class Blake2bLinuxTest { @Test fun testCinterop() { val sodiumInitResult = sodium_init() -// println("Sodium init $sodiumInitResult") + println("Sodium init $sodiumInitResult") println("1") } } \ No newline at end of file diff --git a/multiplatform-crypto-delegated/src/nativeInterop/cinterop/libsodium.def b/multiplatform-crypto-delegated/src/nativeInterop/cinterop/libsodium.def index 1be50a3..759fb82 100644 --- a/multiplatform-crypto-delegated/src/nativeInterop/cinterop/libsodium.def +++ b/multiplatform-crypto-delegated/src/nativeInterop/cinterop/libsodium.def @@ -1,6 +1,6 @@ headers = sodium.h headerFilter = sodium.h sodium/** staticLibraries = libsodium.a -libraryPaths = /usr/lib -compilerOpts = -Iinclude -I/usr/include -linkerOpts = -L/usr/lib -lsodium \ No newline at end of file +libraryPaths = /home/ionspin/Projects/Future/sodiumWrapper/lib +compilerOpts = -I/home/ionspin/Projects/Future/sodiumWrapper/include +linkerOpts = \ No newline at end of file diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index cd730a3..c933fcd 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -107,7 +107,6 @@ kotlin { executable { println("Optimized: $optimized") - optimized = true } } } @@ -188,7 +187,7 @@ kotlin { implementation(kotlin(Deps.Common.test)) implementation(Deps.Common.coroutines) implementation(Deps.Common.kotlinBigNum) - implementation(project(":multiplatform-crypto")) + implementation(project(":multiplatform-crypto-delegated")) } } val commonTest by getting { diff --git a/sample/src/linuxMain/kotlin/com/ionspin/kotlin/crypto/sample/Runner.kt b/sample/src/linuxMain/kotlin/com/ionspin/kotlin/crypto/sample/Runner.kt index b696812..bf7b023 100644 --- a/sample/src/linuxMain/kotlin/com/ionspin/kotlin/crypto/sample/Runner.kt +++ b/sample/src/linuxMain/kotlin/com/ionspin/kotlin/crypto/sample/Runner.kt @@ -1,5 +1,4 @@ -import com.ionspin.kotlin.crypto.keyderivation.argon2.Argon2Pure -import com.ionspin.kotlin.crypto.keyderivation.argon2.ArgonType +import com.ionspin.kotlin.crypto.hash.blake2b.Blake2bDelegated import kotlin.time.ExperimentalTime import kotlin.time.measureTime @@ -7,22 +6,7 @@ import kotlin.time.measureTime @ExperimentalStdlibApi fun main() { println("Test") - val argon2Instance = Argon2Pure( - password = "Password", - salt = "RandomSalt", - parallelism = 1, - tagLength = 64U, - requestedMemorySize = 4096U, - numberOfIterations = 100, - key = "", - associatedData = "", - argonType = ArgonType.Argon2id - ) - val time = measureTime { - val tag = argon2Instance.derive() - val tagString = tag.map { it.toString(16).padStart(2, '0') }.joinToString(separator = "") - val expectedTagString = "27c61b6538ef9f4a1250f8712cac09fc4329969295f9440249437d38c1617a005c2702d76a8a59e4cda2dfba48e1132261dacdfd31296945906992ea32f1d06e" - println("Tag: ${tagString}") - } - println("Time $time") +// Blake + val blake = Blake2bDelegated() + blake.digest() }