From ed7cb7482b927310af4fe908291f95e872c7d3d6 Mon Sep 17 00:00:00 2001 From: Ugljesa Jovanovic Date: Tue, 2 Mar 2021 14:09:43 +0100 Subject: [PATCH] Remove bignum dep --- buildSrc/src/main/kotlin/Deps.kt | 2 +- .../build.gradle.kts | 1 - .../com.ionspin.kotlin.crypto/util/Util.kt | 10 ++++++++ .../crypto/secretstream/SecretStreamTest.kt | 9 +++---- .../kotlin/crypto/util/LibsodiumUtilTest.kt | 25 +++++++++---------- sample/build.gradle.kts | 1 - 6 files changed, 27 insertions(+), 21 deletions(-) diff --git a/buildSrc/src/main/kotlin/Deps.kt b/buildSrc/src/main/kotlin/Deps.kt index 99fe2b6..57d6bc4 100644 --- a/buildSrc/src/main/kotlin/Deps.kt +++ b/buildSrc/src/main/kotlin/Deps.kt @@ -23,7 +23,7 @@ object Versions { val nodePlugin = "1.3.0" val dokkaPlugin = "1.4.0-rc" val taskTreePlugin = "1.5" - val kotlinBigNumVersion = "0.2.8-SNAPSHOT" + val kotlinBigNumVersion = "0.2.8" val jna = "5.7.0" val kotlinPoet = "1.6.0" val libsodiumBindings = "0.1.1-SNAPSHOT" diff --git a/multiplatform-crypto-libsodium-bindings/build.gradle.kts b/multiplatform-crypto-libsodium-bindings/build.gradle.kts index bfc3dbc..95f34c4 100644 --- a/multiplatform-crypto-libsodium-bindings/build.gradle.kts +++ b/multiplatform-crypto-libsodium-bindings/build.gradle.kts @@ -254,7 +254,6 @@ kotlin { dependencies { implementation(kotlin(Deps.Common.stdLib)) implementation(kotlin(Deps.Common.test)) - implementation(Deps.Common.kotlinBigNum) } } val commonTest by getting { diff --git a/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/util/Util.kt b/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/util/Util.kt index 97cb9f7..79a4387 100644 --- a/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/util/Util.kt +++ b/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/util/Util.kt @@ -26,3 +26,13 @@ fun UByteArray.toHexString() : String { } } } + +fun Array.hexColumnsPrint(chunk: Int = 16) { + val printout = this.map { it.toString(16).padStart(2, '0') }.chunked(chunk) + printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) } +} + +fun UByteArray.hexColumnsPrint(chunk: Int = 16) { + val printout = this.map { it.toString(16).padStart(2, '0') }.chunked(chunk) + printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) } +} diff --git a/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/secretstream/SecretStreamTest.kt b/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/secretstream/SecretStreamTest.kt index b061457..067c4ad 100644 --- a/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/secretstream/SecretStreamTest.kt +++ b/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/secretstream/SecretStreamTest.kt @@ -1,9 +1,8 @@ package com.ionspin.kotlin.crypto.secretstream -import com.ionspin.kotlin.bignum.integer.util.hexColumsPrint import com.ionspin.kotlin.crypto.LibsodiumInitializer import com.ionspin.kotlin.crypto.util.encodeToUByteArray -import com.ionspin.kotlin.crypto.util.testBlocking +import com.ionspin.kotlin.crypto.util.hexColumnsPrint import com.ionspin.kotlin.crypto.util.runTest import kotlin.test.Test import kotlin.test.assertFailsWith @@ -58,19 +57,19 @@ class SecretStreamTest { 0x98U, 0x79U, 0x47U, 0xdeU, 0xafU, 0xd8U, 0x78U, 0x0aU, 0xcfU, 0x49U ) - message.hexColumsPrint() + message.hexColumnsPrint() println("---- init enc ----") val stateAndHeader = SecretStream.xChaCha20Poly1305InitPush(key) println("---- encrypt ----") val encrypted = SecretStream.xChaCha20Poly1305Push(stateAndHeader.state, message, ubyteArrayOf(), 0U) - encrypted.hexColumsPrint() + encrypted.hexColumnsPrint() println("---- init dec ----") val decryptState = SecretStream.xChaCha20Poly1305InitPull(key, stateAndHeader.header) println("---- decrypt ----") val decrypted = SecretStream.xChaCha20Poly1305Pull(decryptState.state, encrypted, ubyteArrayOf()) - decrypted.decryptedData.hexColumsPrint() + decrypted.decryptedData.hexColumnsPrint() assertTrue { decrypted.decryptedData.contentEquals(message) } diff --git a/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/util/LibsodiumUtilTest.kt b/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/util/LibsodiumUtilTest.kt index 3a65336..c2e29c2 100644 --- a/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/util/LibsodiumUtilTest.kt +++ b/multiplatform-crypto-libsodium-bindings/src/commonTest/kotlin/com/ionspin/kotlin/crypto/util/LibsodiumUtilTest.kt @@ -1,6 +1,5 @@ package com.ionspin.kotlin.crypto.util -import com.ionspin.kotlin.bignum.integer.util.hexColumsPrint import com.ionspin.kotlin.crypto.LibsodiumInitializer import kotlin.math.exp import com.ionspin.kotlin.crypto.util.runTest @@ -47,9 +46,9 @@ class LibsodiumUtilTest { val input = ubyteArrayOf(1U, 2U) val blocksize = 16 val padded = LibsodiumUtil.pad(input, blocksize) - println(padded.hexColumsPrint()) + println(padded.hexColumnsPrint()) val unpadded = LibsodiumUtil.unpad(padded, blocksize) - println(unpadded.hexColumsPrint()) + println(unpadded.hexColumnsPrint()) assertTrue { input.contentEquals(unpadded) @@ -63,9 +62,9 @@ class LibsodiumUtilTest { val input = charArrayOf('a', 'b', 'c', 'd').map { it.toByte().toUByte() }.toUByteArray() val blocksize = 4 val padded = LibsodiumUtil.pad(input, blocksize) - println(padded.hexColumsPrint()) + println(padded.hexColumnsPrint()) val unpadded = LibsodiumUtil.unpad(padded, blocksize) - println(unpadded.hexColumsPrint()) + println(unpadded.hexColumnsPrint()) assertTrue { input.contentEquals(unpadded) @@ -80,10 +79,10 @@ class LibsodiumUtilTest { val blocksize = 2 val padded = LibsodiumUtil.pad(input, blocksize) val expected = ubyteArrayOf(1U, 2U, 0x80U, 0x00U) - println(padded.hexColumsPrint()) + println(padded.hexColumnsPrint()) assertTrue { padded.contentEquals(expected) } val unpadded = LibsodiumUtil.unpad(padded, blocksize) - println(unpadded.hexColumsPrint()) + println(unpadded.hexColumnsPrint()) assertTrue { input.contentEquals(unpadded) @@ -98,10 +97,10 @@ class LibsodiumUtilTest { val blocksize = 4 val padded = LibsodiumUtil.pad(input, blocksize) val expected = ubyteArrayOf(1U, 2U, 3U, 4U, 5U, 6U, 0x80U, 0x00U) - println(padded.hexColumsPrint()) + println(padded.hexColumnsPrint()) assertTrue { padded.contentEquals(expected) } val unpadded = LibsodiumUtil.unpad(padded, blocksize) - println(unpadded.hexColumsPrint()) + println(unpadded.hexColumnsPrint()) assertTrue { input.contentEquals(unpadded) @@ -114,13 +113,13 @@ class LibsodiumUtilTest { LibsodiumInitializer.initializeWithCallback { val input = ubyteArrayOf(1U, 2U, 3U, 4U, 5U, 32U, 64U, 128U, 255U) val expected = "AQIDBAUgQID_" - val output = LibsodiumUtil.toBase64(input) + val output = LibsodiumUtil.toBase64(input, Base64Variants.URLSAFE_NO_PADDING) println("Output: |$output|") println("Expected|$expected| ") assertTrue { output == expected } - val reconstructed = LibsodiumUtil.fromBase64(output) + val reconstructed = LibsodiumUtil.fromBase64(output, Base64Variants.URLSAFE_NO_PADDING) println("Reconstructed: ${reconstructed.toHexString()}") assertTrue { reconstructed.contentEquals(input) @@ -133,13 +132,13 @@ class LibsodiumUtilTest { LibsodiumInitializer.initializeWithCallback { val input = ubyteArrayOf(1U, 2U, 3U, 4U, 5U, 32U, 64U, 128U, 255U, 128U) val expected = "AQIDBAUgQID_gA" - val output = LibsodiumUtil.toBase64(input) + val output = LibsodiumUtil.toBase64(input, Base64Variants.URLSAFE_NO_PADDING) println("Output: |$output|") println("Expected|$expected| ") assertTrue { output == expected } - val reconstructed = LibsodiumUtil.fromBase64(output) + val reconstructed = LibsodiumUtil.fromBase64(output, Base64Variants.URLSAFE_NO_PADDING) println("Reconstructed: ${reconstructed.toHexString()}") assertTrue { reconstructed.contentEquals(input) diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index f304232..8bc7009 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -186,7 +186,6 @@ kotlin { dependencies { implementation(kotlin(Deps.Common.stdLib)) implementation(kotlin(Deps.Common.test)) - implementation(Deps.Common.kotlinBigNum) implementation(Deps.Common.serialization) api(project(":multiplatform-crypto-libsodium-bindings")) }