From d901a45b878ebc5f23a840002bbb7cbffdd357eb Mon Sep 17 00:00:00 2001 From: Ugljesa Jovanovic Date: Fri, 5 Jun 2020 20:09:38 +0200 Subject: [PATCH] Playing around with the API, added optins, will remove annotations in next commit --- gradle/wrapper/gradle-wrapper.properties | 2 +- multiplatform-crypto-api/build.gradle.kts | 2 ++ .../kotlin/crypto/hash/blake2b/Blake2b.kt | 2 ++ .../build.gradle.kts | 2 ++ .../com/ionspin/kotlin/crypto/Crypto.kt | 23 +++++++++++++++++++ .../crypto/hash/blake2b/Blake2bDelegated.kt | 1 + .../crypto/hash/blake2b/Blake2bDelegated.kt | 3 --- multiplatform-crypto/build.gradle.kts | 2 ++ sample/build.gradle.kts | 2 ++ .../ionspin/kotlin/crypto/sample/Sample.kt | 14 +++++++++-- .../ionspin/kotlin/crypto/sample/Runner.kt | 23 +++++++++++-------- 11 files changed, 60 insertions(+), 16 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0375fc2..65fa2e2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -16,6 +16,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/multiplatform-crypto-api/build.gradle.kts b/multiplatform-crypto-api/build.gradle.kts index b13ac3a..a689963 100644 --- a/multiplatform-crypto-api/build.gradle.kts +++ b/multiplatform-crypto-api/build.gradle.kts @@ -259,6 +259,8 @@ kotlin { all { languageSettings.enableLanguageFeature("InlineClasses") + languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes") + languageSettings.useExperimentalAnnotation("kotlin.ExperimentalStdlibApi") } } diff --git a/multiplatform-crypto-api/src/commonMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2b.kt b/multiplatform-crypto-api/src/commonMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2b.kt index f9cb896..957d782 100644 --- a/multiplatform-crypto-api/src/commonMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2b.kt +++ b/multiplatform-crypto-api/src/commonMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2b.kt @@ -8,7 +8,9 @@ import com.ionspin.kotlin.crypto.hash.UpdatableHash * ugljesa.jovanovic@ionspin.com * on 24-May-2020 */ +@ExperimentalUnsignedTypes interface Blake2b : UpdatableHash +@ExperimentalUnsignedTypes interface Blake2bStatelessInterface : StatelessHash { @ExperimentalUnsignedTypes override val MAX_HASH_BYTES: Int diff --git a/multiplatform-crypto-delegated/build.gradle.kts b/multiplatform-crypto-delegated/build.gradle.kts index 7aeb039..d4f365f 100644 --- a/multiplatform-crypto-delegated/build.gradle.kts +++ b/multiplatform-crypto-delegated/build.gradle.kts @@ -539,6 +539,8 @@ kotlin { all { languageSettings.enableLanguageFeature("InlineClasses") + languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes") + languageSettings.useExperimentalAnnotation("kotlin.ExperimentalStdlibApi") } } diff --git a/multiplatform-crypto-delegated/src/commonMain/kotlin/com/ionspin/kotlin/crypto/Crypto.kt b/multiplatform-crypto-delegated/src/commonMain/kotlin/com/ionspin/kotlin/crypto/Crypto.kt index 84489e6..1a3e08f 100644 --- a/multiplatform-crypto-delegated/src/commonMain/kotlin/com/ionspin/kotlin/crypto/Crypto.kt +++ b/multiplatform-crypto-delegated/src/commonMain/kotlin/com/ionspin/kotlin/crypto/Crypto.kt @@ -1,5 +1,7 @@ package com.ionspin.kotlin.crypto +import com.ionspin.kotlin.crypto.hash.blake2b.Blake2b +import com.ionspin.kotlin.crypto.hash.blake2b.Blake2bDelegated import com.ionspin.kotlin.crypto.hash.blake2b.Blake2bStateless import com.ionspin.kotlin.crypto.hash.sha.Sha256Pure import com.ionspin.kotlin.crypto.hash.sha.Sha512Pure @@ -11,13 +13,34 @@ import com.ionspin.kotlin.crypto.hash.sha.Sha512Pure */ +@ExperimentalUnsignedTypes typealias Sha256Stateless = Sha256Pure.Companion +@ExperimentalUnsignedTypes typealias Sha512Stateless = Sha512Pure.Companion +@ExperimentalUnsignedTypes object Crypto : CryptoProvider { override suspend fun initialize() { Initializer.initialize() } + @ExperimentalUnsignedTypes + @ExperimentalStdlibApi + object Blake2b { + fun updateable() : com.ionspin.kotlin.crypto.hash.blake2b.Blake2b { + return Blake2bDelegated() + } + + fun stateless(message : String) : UByteArray { + println("?") + return Blake2bStateless.digest(message) + } + } + +} + +@ExperimentalUnsignedTypes +object SimpleCrypto { + fun hash(message : String) : UByteArray { return ubyteArrayOf(0U) } } diff --git a/multiplatform-crypto-delegated/src/commonMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt b/multiplatform-crypto-delegated/src/commonMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt index 6b522e6..e4e89b1 100644 --- a/multiplatform-crypto-delegated/src/commonMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt +++ b/multiplatform-crypto-delegated/src/commonMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt @@ -30,6 +30,7 @@ import com.ionspin.kotlin.crypto.util.rotateRight @ExperimentalUnsignedTypes expect class Blake2bDelegated(key: UByteArray? = null, hashLength: Int = 64) : Blake2b +@ExperimentalUnsignedTypes expect object Blake2bStateless : Blake2bStatelessInterface diff --git a/multiplatform-crypto-delegated/src/nativeMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt b/multiplatform-crypto-delegated/src/nativeMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt index a5468ae..2149d4a 100644 --- a/multiplatform-crypto-delegated/src/nativeMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt +++ b/multiplatform-crypto-delegated/src/nativeMain/kotlin/com/ionspin/kotlin/crypto/hash/blake2b/Blake2bDelegated.kt @@ -21,9 +21,6 @@ actual class Blake2bDelegated actual constructor(key: UByteArray?, hashLength: I } override fun digest(): UByteArray { - val result = sodium_init() - println("Sodium init") - println(result) val inputString = "test" val hashLength = 64 val key : String? = null diff --git a/multiplatform-crypto/build.gradle.kts b/multiplatform-crypto/build.gradle.kts index a57aac6..b731f26 100644 --- a/multiplatform-crypto/build.gradle.kts +++ b/multiplatform-crypto/build.gradle.kts @@ -344,6 +344,8 @@ kotlin { all { languageSettings.enableLanguageFeature("InlineClasses") + languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes") + languageSettings.useExperimentalAnnotation("kotlin.ExperimentalStdlibApi") } } diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index e020c35..7cd8aaf 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -269,6 +269,8 @@ kotlin { all { languageSettings.enableLanguageFeature("InlineClasses") + languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes") + languageSettings.useExperimentalAnnotation("kotlin.ExperimentalStdlibApi") } } diff --git a/sample/src/commonMain/kotlin/com/ionspin/kotlin/crypto/sample/Sample.kt b/sample/src/commonMain/kotlin/com/ionspin/kotlin/crypto/sample/Sample.kt index 98798d7..7ecfd59 100644 --- a/sample/src/commonMain/kotlin/com/ionspin/kotlin/crypto/sample/Sample.kt +++ b/sample/src/commonMain/kotlin/com/ionspin/kotlin/crypto/sample/Sample.kt @@ -1,7 +1,17 @@ package com.ionspin.kotlin.crypto.sample -object Sample { - fun blakehash() { +import com.ionspin.kotlin.crypto.Crypto +import com.ionspin.kotlin.crypto.CryptoProvider +import com.ionspin.kotlin.crypto.hash.blake2b.Blake2b +import com.ionspin.kotlin.crypto.util.toHexString +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +object Sample { + suspend fun runSample() { + Crypto.initialize() + val blake2bUpdateable = Crypto.Blake2b.updateable() + blake2bUpdateable.update("test") + println(blake2bUpdateable.digest().toHexString()) } } \ No newline at end of file diff --git a/sample/src/linuxArm64Main/kotlin/com/ionspin/kotlin/crypto/sample/Runner.kt b/sample/src/linuxArm64Main/kotlin/com/ionspin/kotlin/crypto/sample/Runner.kt index 5f36831..05b946d 100644 --- a/sample/src/linuxArm64Main/kotlin/com/ionspin/kotlin/crypto/sample/Runner.kt +++ b/sample/src/linuxArm64Main/kotlin/com/ionspin/kotlin/crypto/sample/Runner.kt @@ -1,18 +1,21 @@ import com.ionspin.kotlin.crypto.hash.blake2b.Blake2bDelegated import com.ionspin.kotlin.crypto.hash.blake2b.Blake2bStateless +import com.ionspin.kotlin.crypto.sample.Sample +import kotlinx.coroutines.runBlocking import kotlin.time.ExperimentalTime import kotlin.time.measureTime @ExperimentalTime @ExperimentalStdlibApi -fun main() { - println("Test") -// Blake - val blake = Blake2bDelegated() - val res = blake.digest() - println("Result of res") -// println(res) - val staticRes = Blake2bStateless.digest("test") - println("Result:") - println(staticRes) +fun main() = runBlocking { + Sample.runSample() +// println("Test") +//// Blake +// val blake = Blake2bDelegated() +// val res = blake.digest() +// println("Result of res") +//// println(res) +// val staticRes = Blake2bStateless.digest("test") +// println("Result:") +// println(staticRes) }