From 2ea47dc50c9d22f3bddb6d12246364aaffa6c495 Mon Sep 17 00:00:00 2001 From: Bruno Wieczorek Date: Mon, 10 Oct 2022 22:49:37 +0200 Subject: [PATCH] Move tests from jvmTest to commonTest (#108) The first step for making the library multiplatform. This commit also removes JSON parsing and Moshi test dependency. This change also includes moving test extensions and test data to utils package. --- bip39-lib/build.gradle.kts | 9 +- bip39-lib/gradle.lockfile | 23 ++- .../cash/z/ecc/android/bip39/MnemonicsTest.kt | 101 ++++-------- .../z/ecc/android/bip39/ReadmeExamplesTest.kt | 0 .../cash/z/ecc/android/bip39/UtilsTest.kt | 31 ++++ .../z/ecc/android/bip39/utils/Extensions.kt | 39 +++++ .../z/ecc/android/bip39/utils/TestData.kt | 148 ++++++++++++++++++ .../z/ecc/android/crypto/Pbkdf2Sha512Test.kt | 2 +- .../resources/data/BIP-0039-test-values.json | 148 ------------------ gradle/libs.versions.toml | 10 +- 10 files changed, 269 insertions(+), 242 deletions(-) rename bip39-lib/src/{jvmTest => commonTest}/kotlin/cash/z/ecc/android/bip39/MnemonicsTest.kt (73%) rename bip39-lib/src/{jvmTest => commonTest}/kotlin/cash/z/ecc/android/bip39/ReadmeExamplesTest.kt (100%) create mode 100644 bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/UtilsTest.kt create mode 100644 bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/utils/Extensions.kt create mode 100644 bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/utils/TestData.kt rename bip39-lib/src/{jvmTest => commonTest}/kotlin/cash/z/ecc/android/crypto/Pbkdf2Sha512Test.kt (99%) delete mode 100644 bip39-lib/src/jvmTest/resources/data/BIP-0039-test-values.json diff --git a/bip39-lib/build.gradle.kts b/bip39-lib/build.gradle.kts index a98425a..0e67ae4 100644 --- a/bip39-lib/build.gradle.kts +++ b/bip39-lib/build.gradle.kts @@ -24,6 +24,9 @@ kotlin { val commonTest by getting { dependencies { implementation(kotlin("test")) + implementation(libs.kotest.framework.engine) + implementation(libs.kotest.assertion) + implementation(libs.kotest.property) } } val jvmMain by getting { @@ -33,11 +36,7 @@ kotlin { val jvmTest by getting { dependencies { implementation(kotlin("test")) - implementation(libs.kotest.runner) - implementation(libs.kotest.assertion) - implementation(libs.kotest.property) - implementation(libs.moshi.core) - implementation(libs.moshi.kotlin) + implementation(libs.kotest.runner.junit5) } } } diff --git a/bip39-lib/gradle.lockfile b/bip39-lib/gradle.lockfile index 60d401b..0503a27 100644 --- a/bip39-lib/gradle.lockfile +++ b/bip39-lib/gradle.lockfile @@ -12,32 +12,30 @@ com.fasterxml.woodstox:woodstox-core:6.2.4=dokkaGfmPartialRuntime,dokkaGfmRuntim com.github.ajalt:colormath:1.2.0=jvmTestCompileClasspath,jvmTestRuntimeClasspath com.github.ajalt:mordant:1.2.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath com.github.mifmif:generex:1.0.2=jvmTestRuntimeClasspath -com.squareup.moshi:moshi-kotlin:1.9.2=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath -com.squareup.moshi:moshi:1.9.2=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath -com.squareup.okio:okio:1.16.0=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath commons-io:commons-io:2.6=jvmTestRuntimeClasspath dk.brics.automaton:automaton:1.11-8=jvmTestRuntimeClasspath io.github.classgraph:classgraph:4.8.105=jvmTestCompileClasspath,jvmTestRuntimeClasspath io.github.java-diff-utils:java-diff-utils:4.9=jvmTestRuntimeClasspath io.kotest:kotest-assertions-api-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath -io.kotest:kotest-assertions-api:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath -io.kotest:kotest-assertions-core-jvm:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath -io.kotest:kotest-assertions-core:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath +io.kotest:kotest-assertions-api:4.6.1=commonTestImplementationDependenciesMetadata,jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath +io.kotest:kotest-assertions-core-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath +io.kotest:kotest-assertions-core:4.6.1=commonTestImplementationDependenciesMetadata,jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath io.kotest:kotest-assertions-shared-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath -io.kotest:kotest-assertions-shared:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath +io.kotest:kotest-assertions-shared:4.6.1=commonTestImplementationDependenciesMetadata,jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath io.kotest:kotest-common-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath -io.kotest:kotest-common:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath +io.kotest:kotest-common:4.6.1=commonTestImplementationDependenciesMetadata,jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath io.kotest:kotest-extensions-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath io.kotest:kotest-extensions:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath io.kotest:kotest-framework-api-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath -io.kotest:kotest-framework-api:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath +io.kotest:kotest-framework-api:4.6.1=commonTestImplementationDependenciesMetadata,jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath io.kotest:kotest-framework-concurrency-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath io.kotest:kotest-framework-concurrency:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath io.kotest:kotest-framework-discovery-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath io.kotest:kotest-framework-discovery:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath io.kotest:kotest-framework-engine-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath -io.kotest:kotest-framework-engine:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath -io.kotest:kotest-property-jvm:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath +io.kotest:kotest-framework-engine:4.6.1=commonTestImplementationDependenciesMetadata,jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath +io.kotest:kotest-property-jvm:4.6.1=jvmTestCompileClasspath,jvmTestRuntimeClasspath +io.kotest:kotest-property:4.6.1=commonTestImplementationDependenciesMetadata,jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath io.kotest:kotest-runner-junit5-jvm:4.6.1=jvmTestCompileClasspath,jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath io.mockk:mockk-agent-api:1.9.3=jvmTestRuntimeClasspath io.mockk:mockk-agent-common:1.9.3=jvmTestRuntimeClasspath @@ -65,8 +63,7 @@ org.jetbrains.kotlin:kotlin-compiler-embeddable:1.7.10=kotlinCompilerClasspath,k org.jetbrains.kotlin:kotlin-daemon-client:1.5.0=jvmTestRuntimeClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:1.7.10=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.7.10=kotlinKlibCommonizerClasspath -org.jetbrains.kotlin:kotlin-reflect:1.3.50=jvmTestCompileClasspath -org.jetbrains.kotlin:kotlin-reflect:1.5.0=jvmTestImplementationDependenciesMetadata,jvmTestRuntimeClasspath +org.jetbrains.kotlin:kotlin-reflect:1.5.0=jvmTestRuntimeClasspath org.jetbrains.kotlin:kotlin-reflect:1.7.10=dokkaGfmPartialPlugin,dokkaGfmPartialRuntime,dokkaGfmPlugin,dokkaGfmRuntime,dokkaHtmlPartialPlugin,dokkaHtmlPartialRuntime,dokkaHtmlPlugin,dokkaHtmlRuntime,dokkaJavadocPartialPlugin,dokkaJavadocPartialRuntime,dokkaJavadocPlugin,dokkaJavadocRuntime,dokkaJekyllPartialPlugin,dokkaJekyllPartialRuntime,dokkaJekyllPlugin,dokkaJekyllRuntime,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath org.jetbrains.kotlin:kotlin-script-runtime:1.5.0=jvmTestCompileClasspath,jvmTestRuntimeClasspath org.jetbrains.kotlin:kotlin-script-runtime:1.7.10=kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath diff --git a/bip39-lib/src/jvmTest/kotlin/cash/z/ecc/android/bip39/MnemonicsTest.kt b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/MnemonicsTest.kt similarity index 73% rename from bip39-lib/src/jvmTest/kotlin/cash/z/ecc/android/bip39/MnemonicsTest.kt rename to bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/MnemonicsTest.kt index 5813f05..8aaeae2 100644 --- a/bip39-lib/src/jvmTest/kotlin/cash/z/ecc/android/bip39/MnemonicsTest.kt +++ b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/MnemonicsTest.kt @@ -1,10 +1,10 @@ package cash.z.ecc.android.bip39 import cash.z.ecc.android.bip39.Mnemonics.MnemonicCode -import com.squareup.moshi.Json -import com.squareup.moshi.JsonClass -import com.squareup.moshi.Moshi -import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory +import cash.z.ecc.android.bip39.utils.englishTestData +import cash.z.ecc.android.bip39.utils.fromHex +import cash.z.ecc.android.bip39.utils.swap +import cash.z.ecc.android.bip39.utils.toHex import io.kotest.assertions.asClue import io.kotest.assertions.throwables.shouldNotThrowAny import io.kotest.assertions.throwables.shouldThrow @@ -14,13 +14,12 @@ import io.kotest.data.row import io.kotest.matchers.collections.shouldContainAll import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe -import okio.Okio -import java.io.File -import java.util.* + +private const val DEFAULT_LANGUAGE_CODE = "en" class MnemonicsTest : BehaviorSpec({ - val validPhrase = "void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold" - val lang = Locale.ENGLISH.language + val validPhrase = + "void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold" Given("a valid, known mnemonic phrase") { When("it is converted into a seed") { @@ -97,10 +96,26 @@ class MnemonicsTest : BehaviorSpec({ When("it is converted to a mnemonic phrase") { Then("it should match the expected phrase") { forAll( - row(24, "b893a6b0da8fc9b73d709bda939e818a677aa376c266949378300b65a34b8e52", "review outdoor promote relax wish swear volume beach surround ostrich parrot below jeans faculty swallow error nest orange army bitter focus place deer fat"), - row(18, "d5bcbf62dea1a07ab1abb0144b299300137168a7939f3071f112b557", "stick tourist suffer run borrow diary shop invite begin flock gospel ability damage reform oxygen initial corn moon dwarf height image"), - row(15, "e06ce21369dc09eb2bda66510a76f65ab3f947cce90fcb10", "there grow luggage squirrel scene void quarter error extra father rural rely display physical crisp capable slam lumber"), - row(12, "0b01c3c0b0590faf45fc171da17cfb22", "arch asthma usual gaze movie stumble blood load buffalo armor disagree earth") + row( + 24, + "b893a6b0da8fc9b73d709bda939e818a677aa376c266949378300b65a34b8e52", + "review outdoor promote relax wish swear volume beach surround ostrich parrot below jeans faculty swallow error nest orange army bitter focus place deer fat" + ), + row( + 18, + "d5bcbf62dea1a07ab1abb0144b299300137168a7939f3071f112b557", + "stick tourist suffer run borrow diary shop invite begin flock gospel ability damage reform oxygen initial corn moon dwarf height image" + ), + row( + 15, + "e06ce21369dc09eb2bda66510a76f65ab3f947cce90fcb10", + "there grow luggage squirrel scene void quarter error extra father rural rely display physical crisp capable slam lumber" + ), + row( + 12, + "0b01c3c0b0590faf45fc171da17cfb22", + "arch asthma usual gaze movie stumble blood load buffalo armor disagree earth" + ) ) { _, entropy, mnemonic -> val code = MnemonicCode(entropy.fromHex()) String(code.chars) shouldBe mnemonic @@ -111,11 +126,9 @@ class MnemonicsTest : BehaviorSpec({ // uses test values from the original BIP : https://github.com/trezor/python-mnemonic/blob/master/vectors.json Given("The original BIP-0039 test data set") { - val testData: TestDataSet? = loadTestData() - testData shouldNotBe null When("each provided entropy is converted to a mnemonic phrase [entropy -> mnemonic]") { Then("each result matches the corresponding test mnemonic phrase") { - testData!!.values.forEach { + englishTestData.forEach { val entropy = it[0].fromHex() val mnemonic = it[1] String(MnemonicCode(entropy).chars) shouldBe mnemonic @@ -124,7 +137,7 @@ class MnemonicsTest : BehaviorSpec({ } When("each provided mnemonic phrase is reverted to entropy [mnemonic -> entropy]") { Then("each result matches the corresponding test entropy") { - testData!!.values.forEach { + englishTestData.forEach { val entropy = it[0] val mnemonic = it[1] MnemonicCode(mnemonic).toEntropy().toHex() shouldBe entropy @@ -133,11 +146,11 @@ class MnemonicsTest : BehaviorSpec({ } When("each provided mnemonic phrase is converted into a seed [mnemonic -> seed]") { Then("each result matches the corresponding test seed") { - testData!!.values.forEach { + englishTestData.forEach { val mnemonic = it[1].toCharArray() val seed = it[2] val passphrase = "TREZOR".toCharArray() - MnemonicCode(mnemonic, lang).toSeed(passphrase).toHex() shouldBe seed + MnemonicCode(mnemonic, DEFAULT_LANGUAGE_CODE).toSeed(passphrase).toHex() shouldBe seed } } } @@ -215,53 +228,3 @@ class MnemonicsTest : BehaviorSpec({ } } }) - -// -// Test Utilities -// - -@JsonClass(generateAdapter = true) -data class TestDataSet( - @Json(name = "english") val values: List> -) - -fun ByteArray.toHex(): String { - val sb = StringBuilder(size * 2) - for (b in this) - sb.append(String.format("%02x", b)) - return sb.toString() -} - -fun String.fromHex(): ByteArray { - val len = length - val data = ByteArray(len / 2) - var i = 0 - while (i < len) { - data[i / 2] = - ((Character.digit(this[i], 16) shl 4) + Character.digit(this[i + 1], 16)).toByte() - i += 2 - } - return data -} - -fun String.swap(srcWord: Int, destWord: Int = srcWord + 1): String { - if (srcWord >= destWord) throw IllegalArgumentException("srcWord must be less than destWord") - if (destWord > count { it == ' ' }) throw IllegalArgumentException("there aren't that many words") - return split(' ').let { words -> - words.reduceIndexed { i, result, word -> - val next = when (i) { - srcWord -> words[destWord] - destWord -> words[srcWord] - else -> word - } - if (srcWord == 0 && i == 1) "${words[destWord]} $next" else "$result $next" - } - } -} - -fun loadTestData(): TestDataSet? = - Okio.buffer(Okio.source(File("src/jvmTest/resources/data/BIP-0039-test-values.json"))) - .use { dataFile -> - Moshi.Builder().add(KotlinJsonAdapterFactory()).build() - .adapter(TestDataSet::class.java).fromJson(dataFile) - } diff --git a/bip39-lib/src/jvmTest/kotlin/cash/z/ecc/android/bip39/ReadmeExamplesTest.kt b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/ReadmeExamplesTest.kt similarity index 100% rename from bip39-lib/src/jvmTest/kotlin/cash/z/ecc/android/bip39/ReadmeExamplesTest.kt rename to bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/ReadmeExamplesTest.kt diff --git a/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/UtilsTest.kt b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/UtilsTest.kt new file mode 100644 index 0000000..6ef58c8 --- /dev/null +++ b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/UtilsTest.kt @@ -0,0 +1,31 @@ +package cash.z.ecc.android.bip39 + +import cash.z.ecc.android.bip39.utils.fromHex +import cash.z.ecc.android.bip39.utils.toHex +import io.kotest.core.spec.style.ShouldSpec +import io.kotest.matchers.shouldBe + +class UtilsTest : ShouldSpec({ + should("convert ByteArray to hex String") { + val byteArray = byteArrayOf(-128, -16, 0, 16, 127) + byteArray.toHex() shouldBe "80f000107f" + } + + should("convert hex String to ByteArray") { + val hexString = "80f000107f" + val expectedByteArray = byteArrayOf(-128, -16, 0, 16, 127) + hexString.fromHex() shouldBe expectedByteArray + } + + should("return original value, when converting to hex and then from hex") { + val originalBytes = ByteArray(256) { (it - 128).toByte() } + val transformedBytes = originalBytes.toHex().fromHex() + transformedBytes shouldBe originalBytes + } + + should("return original value, when converting from hex and then to hex") { + val originalHex = "0008101820283038404850586068707880889098a0a8b0b8c0c8d0d8e0e8f0f8" + val transformedHex = originalHex.fromHex().toHex() + transformedHex shouldBe originalHex + } +}) diff --git a/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/utils/Extensions.kt b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/utils/Extensions.kt new file mode 100644 index 0000000..fbfd8f1 --- /dev/null +++ b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/utils/Extensions.kt @@ -0,0 +1,39 @@ +package cash.z.ecc.android.bip39.utils + +fun ByteArray.toHex(): String { + val sb = StringBuilder(size * 2) + for (b in this) { + val hexValue = b.let { if (it >= 0) it.toInt() else 256 + it } + .toString(16) + .let { if (it.length < 2) "0$it" else it } + sb.append(hexValue) + } + return sb.toString() +} + +fun String.fromHex(): ByteArray { + val len = length + val data = ByteArray(len / 2) + var i = 0 + while (i < len) { + data[i / 2] = + ((this[i].digitToInt(16) shl 4) + this[i + 1].digitToInt(16)).toByte() + i += 2 + } + return data +} + +fun String.swap(srcWord: Int, destWord: Int = srcWord + 1): String { + if (srcWord >= destWord) throw IllegalArgumentException("srcWord must be less than destWord") + if (destWord > count { it == ' ' }) throw IllegalArgumentException("there aren't that many words") + return split(' ').let { words -> + words.reduceIndexed { i, result, word -> + val next = when (i) { + srcWord -> words[destWord] + destWord -> words[srcWord] + else -> word + } + if (srcWord == 0 && i == 1) "${words[destWord]} $next" else "$result $next" + } + } +} diff --git a/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/utils/TestData.kt b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/utils/TestData.kt new file mode 100644 index 0000000..8f3631d --- /dev/null +++ b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/bip39/utils/TestData.kt @@ -0,0 +1,148 @@ +package cash.z.ecc.android.bip39.utils + +val englishTestData = listOf( + listOf( + "00000000000000000000000000000000", + "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", + "c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04", + "xprv9s21ZrQH143K3h3fDYiay8mocZ3afhfULfb5GX8kCBdno77K4HiA15Tg23wpbeF1pLfs1c5SPmYHrEpTuuRhxMwvKDwqdKiGJS9XFKzUsAF" + ), + listOf( + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", + "legal winner thank year wave sausage worth useful legal winner thank yellow", + "2e8905819b8723fe2c1d161860e5ee1830318dbf49a83bd451cfb8440c28bd6fa457fe1296106559a3c80937a1c1069be3a3a5bd381ee6260e8d9739fce1f607", + "xprv9s21ZrQH143K2gA81bYFHqU68xz1cX2APaSq5tt6MFSLeXnCKV1RVUJt9FWNTbrrryem4ZckN8k4Ls1H6nwdvDTvnV7zEXs2HgPezuVccsq" + ), + listOf( + "80808080808080808080808080808080", + "letter advice cage absurd amount doctor acoustic avoid letter advice cage above", + "d71de856f81a8acc65e6fc851a38d4d7ec216fd0796d0a6827a3ad6ed5511a30fa280f12eb2e47ed2ac03b5c462a0358d18d69fe4f985ec81778c1b370b652a8", + "xprv9s21ZrQH143K2shfP28KM3nr5Ap1SXjz8gc2rAqqMEynmjt6o1qboCDpxckqXavCwdnYds6yBHZGKHv7ef2eTXy461PXUjBFQg6PrwY4Gzq" + ), + listOf( + "ffffffffffffffffffffffffffffffff", + "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong", + "ac27495480225222079d7be181583751e86f571027b0497b5b5d11218e0a8a13332572917f0f8e5a589620c6f15b11c61dee327651a14c34e18231052e48c069", + "xprv9s21ZrQH143K2V4oox4M8Zmhi2Fjx5XK4Lf7GKRvPSgydU3mjZuKGCTg7UPiBUD7ydVPvSLtg9hjp7MQTYsW67rZHAXeccqYqrsx8LcXnyd" + ), + listOf( + "000000000000000000000000000000000000000000000000", + "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent", + "035895f2f481b1b0f01fcf8c289c794660b289981a78f8106447707fdd9666ca06da5a9a565181599b79f53b844d8a71dd9f439c52a3d7b3e8a79c906ac845fa", + "xprv9s21ZrQH143K3mEDrypcZ2usWqFgzKB6jBBx9B6GfC7fu26X6hPRzVjzkqkPvDqp6g5eypdk6cyhGnBngbjeHTe4LsuLG1cCmKJka5SMkmU" + ), + listOf( + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", + "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will", + "f2b94508732bcbacbcc020faefecfc89feafa6649a5491b8c952cede496c214a0c7b3c392d168748f2d4a612bada0753b52a1c7ac53c1e93abd5c6320b9e95dd", + "xprv9s21ZrQH143K3Lv9MZLj16np5GzLe7tDKQfVusBni7toqJGcnKRtHSxUwbKUyUWiwpK55g1DUSsw76TF1T93VT4gz4wt5RM23pkaQLnvBh7" + ), + listOf( + "808080808080808080808080808080808080808080808080", + "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter always", + "107d7c02a5aa6f38c58083ff74f04c607c2d2c0ecc55501dadd72d025b751bc27fe913ffb796f841c49b1d33b610cf0e91d3aa239027f5e99fe4ce9e5088cd65", + "xprv9s21ZrQH143K3VPCbxbUtpkh9pRG371UCLDz3BjceqP1jz7XZsQ5EnNkYAEkfeZp62cDNj13ZTEVG1TEro9sZ9grfRmcYWLBhCocViKEJae" + ), + listOf( + "ffffffffffffffffffffffffffffffffffffffffffffffff", + "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when", + "0cd6e5d827bb62eb8fc1e262254223817fd068a74b5b449cc2f667c3f1f985a76379b43348d952e2265b4cd129090758b3e3c2c49103b5051aac2eaeb890a528", + "xprv9s21ZrQH143K36Ao5jHRVhFGDbLP6FCx8BEEmpru77ef3bmA928BxsqvVM27WnvvyfWywiFN8K6yToqMaGYfzS6Db1EHAXT5TuyCLBXUfdm" + ), + listOf( + "0000000000000000000000000000000000000000000000000000000000000000", + "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art", + "bda85446c68413707090a52022edd26a1c9462295029f2e60cd7c4f2bbd3097170af7a4d73245cafa9c3cca8d561a7c3de6f5d4a10be8ed2a5e608d68f92fcc8", + "xprv9s21ZrQH143K32qBagUJAMU2LsHg3ka7jqMcV98Y7gVeVyNStwYS3U7yVVoDZ4btbRNf4h6ibWpY22iRmXq35qgLs79f312g2kj5539ebPM" + ), + listOf( + "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", + "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title", + "bc09fca1804f7e69da93c2f2028eb238c227f2e9dda30cd63699232578480a4021b146ad717fbb7e451ce9eb835f43620bf5c514db0f8add49f5d121449d3e87", + "xprv9s21ZrQH143K3Y1sd2XVu9wtqxJRvybCfAetjUrMMco6r3v9qZTBeXiBZkS8JxWbcGJZyio8TrZtm6pkbzG8SYt1sxwNLh3Wx7to5pgiVFU" + ), + listOf( + "8080808080808080808080808080808080808080808080808080808080808080", + "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic bless", + "c0c519bd0e91a2ed54357d9d1ebef6f5af218a153624cf4f2da911a0ed8f7a09e2ef61af0aca007096df430022f7a2b6fb91661a9589097069720d015e4e982f", + "xprv9s21ZrQH143K3CSnQNYC3MqAAqHwxeTLhDbhF43A4ss4ciWNmCY9zQGvAKUSqVUf2vPHBTSE1rB2pg4avopqSiLVzXEU8KziNnVPauTqLRo" + ), + listOf( + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo vote", + "dd48c104698c30cfe2b6142103248622fb7bb0ff692eebb00089b32d22484e1613912f0a5b694407be899ffd31ed3992c456cdf60f5d4564b8ba3f05a69890ad", + "xprv9s21ZrQH143K2WFF16X85T2QCpndrGwx6GueB72Zf3AHwHJaknRXNF37ZmDrtHrrLSHvbuRejXcnYxoZKvRquTPyp2JiNG3XcjQyzSEgqCB" + ), + listOf( + "9e885d952ad362caeb4efe34a8e91bd2", + "ozone drill grab fiber curtain grace pudding thank cruise elder eight picnic", + "274ddc525802f7c828d8ef7ddbcdc5304e87ac3535913611fbbfa986d0c9e5476c91689f9c8a54fd55bd38606aa6a8595ad213d4c9c9f9aca3fb217069a41028", + "xprv9s21ZrQH143K2oZ9stBYpoaZ2ktHj7jLz7iMqpgg1En8kKFTXJHsjxry1JbKH19YrDTicVwKPehFKTbmaxgVEc5TpHdS1aYhB2s9aFJBeJH" + ), + listOf( + "6610b25967cdcca9d59875f5cb50b0ea75433311869e930b", + "gravity machine north sort system female filter attitude volume fold club stay feature office ecology stable narrow fog", + "628c3827a8823298ee685db84f55caa34b5cc195a778e52d45f59bcf75aba68e4d7590e101dc414bc1bbd5737666fbbef35d1f1903953b66624f910feef245ac", + "xprv9s21ZrQH143K3uT8eQowUjsxrmsA9YUuQQK1RLqFufzybxD6DH6gPY7NjJ5G3EPHjsWDrs9iivSbmvjc9DQJbJGatfa9pv4MZ3wjr8qWPAK" + ), + listOf( + "68a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc74e6ce7c", + "hamster diagram private dutch cause delay private meat slide toddler razor book happy fancy gospel tennis maple dilemma loan word shrug inflict delay length", + "64c87cde7e12ecf6704ab95bb1408bef047c22db4cc7491c4271d170a1b213d20b385bc1588d9c7b38f1b39d415665b8a9030c9ec653d75e65f847d8fc1fc440", + "xprv9s21ZrQH143K2XTAhys3pMNcGn261Fi5Ta2Pw8PwaVPhg3D8DWkzWQwjTJfskj8ofb81i9NP2cUNKxwjueJHHMQAnxtivTA75uUFqPFeWzk" + ), + listOf( + "c0ba5a8e914111210f2bd131f3d5e08d", + "scheme spot photo card baby mountain device kick cradle pact join borrow", + "ea725895aaae8d4c1cf682c1bfd2d358d52ed9f0f0591131b559e2724bb234fca05aa9c02c57407e04ee9dc3b454aa63fbff483a8b11de949624b9f1831a9612", + "xprv9s21ZrQH143K3FperxDp8vFsFycKCRcJGAFmcV7umQmcnMZaLtZRt13QJDsoS5F6oYT6BB4sS6zmTmyQAEkJKxJ7yByDNtRe5asP2jFGhT6" + ), + listOf( + "6d9be1ee6ebd27a258115aad99b7317b9c8d28b6d76431c3", + "horn tenant knee talent sponsor spell gate clip pulse soap slush warm silver nephew swap uncle crack brave", + "fd579828af3da1d32544ce4db5c73d53fc8acc4ddb1e3b251a31179cdb71e853c56d2fcb11aed39898ce6c34b10b5382772db8796e52837b54468aeb312cfc3d", + "xprv9s21ZrQH143K3R1SfVZZLtVbXEB9ryVxmVtVMsMwmEyEvgXN6Q84LKkLRmf4ST6QrLeBm3jQsb9gx1uo23TS7vo3vAkZGZz71uuLCcywUkt" + ), + listOf( + "9f6a2878b2520799a44ef18bc7df394e7061a224d2c33cd015b157d746869863", + "panda eyebrow bullet gorilla call smoke muffin taste mesh discover soft ostrich alcohol speed nation flash devote level hobby quick inner drive ghost inside", + "72be8e052fc4919d2adf28d5306b5474b0069df35b02303de8c1729c9538dbb6fc2d731d5f832193cd9fb6aeecbc469594a70e3dd50811b5067f3b88b28c3e8d", + "xprv9s21ZrQH143K2WNnKmssvZYM96VAr47iHUQUTUyUXH3sAGNjhJANddnhw3i3y3pBbRAVk5M5qUGFr4rHbEWwXgX4qrvrceifCYQJbbFDems" + ), + listOf( + "23db8160a31d3e0dca3688ed941adbf3", + "cat swing flag economy stadium alone churn speed unique patch report train", + "deb5f45449e615feff5640f2e49f933ff51895de3b4381832b3139941c57b59205a42480c52175b6efcffaa58a2503887c1e8b363a707256bdd2b587b46541f5", + "xprv9s21ZrQH143K4G28omGMogEoYgDQuigBo8AFHAGDaJdqQ99QKMQ5J6fYTMfANTJy6xBmhvsNZ1CJzRZ64PWbnTFUn6CDV2FxoMDLXdk95DQ" + ), + listOf( + "8197a4a47f0425faeaa69deebc05ca29c0a5b5cc76ceacc0", + "light rule cinnamon wrap drastic word pride squirrel upgrade then income fatal apart sustain crack supply proud access", + "4cbdff1ca2db800fd61cae72a57475fdc6bab03e441fd63f96dabd1f183ef5b782925f00105f318309a7e9c3ea6967c7801e46c8a58082674c860a37b93eda02", + "xprv9s21ZrQH143K3wtsvY8L2aZyxkiWULZH4vyQE5XkHTXkmx8gHo6RUEfH3Jyr6NwkJhvano7Xb2o6UqFKWHVo5scE31SGDCAUsgVhiUuUDyh" + ), + listOf( + "066dca1a2bb7e8a1db2832148ce9933eea0f3ac9548d793112d9a95c9407efad", + "all hour make first leader extend hole alien behind guard gospel lava path output census museum junior mass reopen famous sing advance salt reform", + "26e975ec644423f4a4c4f4215ef09b4bd7ef924e85d1d17c4cf3f136c2863cf6df0a475045652c57eb5fb41513ca2a2d67722b77e954b4b3fc11f7590449191d", + "xprv9s21ZrQH143K3rEfqSM4QZRVmiMuSWY9wugscmaCjYja3SbUD3KPEB1a7QXJoajyR2T1SiXU7rFVRXMV9XdYVSZe7JoUXdP4SRHTxsT1nzm" + ), + listOf( + "f30f8c1da665478f49b001d94c5fc452", + "vessel ladder alter error federal sibling chat ability sun glass valve picture", + "2aaa9242daafcee6aa9d7269f17d4efe271e1b9a529178d7dc139cd18747090bf9d60295d0ce74309a78852a9caadf0af48aae1c6253839624076224374bc63f", + "xprv9s21ZrQH143K2QWV9Wn8Vvs6jbqfF1YbTCdURQW9dLFKDovpKaKrqS3SEWsXCu6ZNky9PSAENg6c9AQYHcg4PjopRGGKmdD313ZHszymnps" + ), + listOf( + "c10ec20dc3cd9f652c7fac2f1230f7a3c828389a14392f05", + "scissors invite lock maple supreme raw rapid void congress muscle digital elegant little brisk hair mango congress clump", + "7b4a10be9d98e6cba265566db7f136718e1398c71cb581e1b2f464cac1ceedf4f3e274dc270003c670ad8d02c4558b2f8e39edea2775c9e232c7cb798b069e88", + "xprv9s21ZrQH143K4aERa2bq7559eMCCEs2QmmqVjUuzfy5eAeDX4mqZffkYwpzGQRE2YEEeLVRoH4CSHxianrFaVnMN2RYaPUZJhJx8S5j6puX" + ), + listOf( + "f585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f", + "void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold", + "01f5bced59dec48e362f2c45b5de68b9fd6c92c6634f44d6d40aab69056506f0e35524a518034ddc1192e1dacd32c1ed3eaa3c3b131c88ed8e7e54c49a5d0998", + "xprv9s21ZrQH143K39rnQJknpH1WEPFJrzmAqqasiDcVrNuk926oizzJDDQkdiTvNPr2FYDYzWgiMiC63YmfPAa2oPyNB23r2g7d1yiK6WpqaQS" + ) +) diff --git a/bip39-lib/src/jvmTest/kotlin/cash/z/ecc/android/crypto/Pbkdf2Sha512Test.kt b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/crypto/Pbkdf2Sha512Test.kt similarity index 99% rename from bip39-lib/src/jvmTest/kotlin/cash/z/ecc/android/crypto/Pbkdf2Sha512Test.kt rename to bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/crypto/Pbkdf2Sha512Test.kt index 2453378..d128902 100644 --- a/bip39-lib/src/jvmTest/kotlin/cash/z/ecc/android/crypto/Pbkdf2Sha512Test.kt +++ b/bip39-lib/src/commonTest/kotlin/cash/z/ecc/android/crypto/Pbkdf2Sha512Test.kt @@ -1,6 +1,6 @@ package cash.z.ecc.android.crypto -import cash.z.ecc.android.bip39.toHex +import cash.z.ecc.android.bip39.utils.toHex import io.kotest.core.spec.style.BehaviorSpec import io.kotest.data.forAll import io.kotest.data.row diff --git a/bip39-lib/src/jvmTest/resources/data/BIP-0039-test-values.json b/bip39-lib/src/jvmTest/resources/data/BIP-0039-test-values.json deleted file mode 100644 index bd33819..0000000 --- a/bip39-lib/src/jvmTest/resources/data/BIP-0039-test-values.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "english": [ - [ - "00000000000000000000000000000000", - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", - "c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04", - "xprv9s21ZrQH143K3h3fDYiay8mocZ3afhfULfb5GX8kCBdno77K4HiA15Tg23wpbeF1pLfs1c5SPmYHrEpTuuRhxMwvKDwqdKiGJS9XFKzUsAF" - ], - [ - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", - "legal winner thank year wave sausage worth useful legal winner thank yellow", - "2e8905819b8723fe2c1d161860e5ee1830318dbf49a83bd451cfb8440c28bd6fa457fe1296106559a3c80937a1c1069be3a3a5bd381ee6260e8d9739fce1f607", - "xprv9s21ZrQH143K2gA81bYFHqU68xz1cX2APaSq5tt6MFSLeXnCKV1RVUJt9FWNTbrrryem4ZckN8k4Ls1H6nwdvDTvnV7zEXs2HgPezuVccsq" - ], - [ - "80808080808080808080808080808080", - "letter advice cage absurd amount doctor acoustic avoid letter advice cage above", - "d71de856f81a8acc65e6fc851a38d4d7ec216fd0796d0a6827a3ad6ed5511a30fa280f12eb2e47ed2ac03b5c462a0358d18d69fe4f985ec81778c1b370b652a8", - "xprv9s21ZrQH143K2shfP28KM3nr5Ap1SXjz8gc2rAqqMEynmjt6o1qboCDpxckqXavCwdnYds6yBHZGKHv7ef2eTXy461PXUjBFQg6PrwY4Gzq" - ], - [ - "ffffffffffffffffffffffffffffffff", - "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong", - "ac27495480225222079d7be181583751e86f571027b0497b5b5d11218e0a8a13332572917f0f8e5a589620c6f15b11c61dee327651a14c34e18231052e48c069", - "xprv9s21ZrQH143K2V4oox4M8Zmhi2Fjx5XK4Lf7GKRvPSgydU3mjZuKGCTg7UPiBUD7ydVPvSLtg9hjp7MQTYsW67rZHAXeccqYqrsx8LcXnyd" - ], - [ - "000000000000000000000000000000000000000000000000", - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent", - "035895f2f481b1b0f01fcf8c289c794660b289981a78f8106447707fdd9666ca06da5a9a565181599b79f53b844d8a71dd9f439c52a3d7b3e8a79c906ac845fa", - "xprv9s21ZrQH143K3mEDrypcZ2usWqFgzKB6jBBx9B6GfC7fu26X6hPRzVjzkqkPvDqp6g5eypdk6cyhGnBngbjeHTe4LsuLG1cCmKJka5SMkmU" - ], - [ - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", - "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will", - "f2b94508732bcbacbcc020faefecfc89feafa6649a5491b8c952cede496c214a0c7b3c392d168748f2d4a612bada0753b52a1c7ac53c1e93abd5c6320b9e95dd", - "xprv9s21ZrQH143K3Lv9MZLj16np5GzLe7tDKQfVusBni7toqJGcnKRtHSxUwbKUyUWiwpK55g1DUSsw76TF1T93VT4gz4wt5RM23pkaQLnvBh7" - ], - [ - "808080808080808080808080808080808080808080808080", - "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter always", - "107d7c02a5aa6f38c58083ff74f04c607c2d2c0ecc55501dadd72d025b751bc27fe913ffb796f841c49b1d33b610cf0e91d3aa239027f5e99fe4ce9e5088cd65", - "xprv9s21ZrQH143K3VPCbxbUtpkh9pRG371UCLDz3BjceqP1jz7XZsQ5EnNkYAEkfeZp62cDNj13ZTEVG1TEro9sZ9grfRmcYWLBhCocViKEJae" - ], - [ - "ffffffffffffffffffffffffffffffffffffffffffffffff", - "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when", - "0cd6e5d827bb62eb8fc1e262254223817fd068a74b5b449cc2f667c3f1f985a76379b43348d952e2265b4cd129090758b3e3c2c49103b5051aac2eaeb890a528", - "xprv9s21ZrQH143K36Ao5jHRVhFGDbLP6FCx8BEEmpru77ef3bmA928BxsqvVM27WnvvyfWywiFN8K6yToqMaGYfzS6Db1EHAXT5TuyCLBXUfdm" - ], - [ - "0000000000000000000000000000000000000000000000000000000000000000", - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art", - "bda85446c68413707090a52022edd26a1c9462295029f2e60cd7c4f2bbd3097170af7a4d73245cafa9c3cca8d561a7c3de6f5d4a10be8ed2a5e608d68f92fcc8", - "xprv9s21ZrQH143K32qBagUJAMU2LsHg3ka7jqMcV98Y7gVeVyNStwYS3U7yVVoDZ4btbRNf4h6ibWpY22iRmXq35qgLs79f312g2kj5539ebPM" - ], - [ - "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f", - "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title", - "bc09fca1804f7e69da93c2f2028eb238c227f2e9dda30cd63699232578480a4021b146ad717fbb7e451ce9eb835f43620bf5c514db0f8add49f5d121449d3e87", - "xprv9s21ZrQH143K3Y1sd2XVu9wtqxJRvybCfAetjUrMMco6r3v9qZTBeXiBZkS8JxWbcGJZyio8TrZtm6pkbzG8SYt1sxwNLh3Wx7to5pgiVFU" - ], - [ - "8080808080808080808080808080808080808080808080808080808080808080", - "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic bless", - "c0c519bd0e91a2ed54357d9d1ebef6f5af218a153624cf4f2da911a0ed8f7a09e2ef61af0aca007096df430022f7a2b6fb91661a9589097069720d015e4e982f", - "xprv9s21ZrQH143K3CSnQNYC3MqAAqHwxeTLhDbhF43A4ss4ciWNmCY9zQGvAKUSqVUf2vPHBTSE1rB2pg4avopqSiLVzXEU8KziNnVPauTqLRo" - ], - [ - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo vote", - "dd48c104698c30cfe2b6142103248622fb7bb0ff692eebb00089b32d22484e1613912f0a5b694407be899ffd31ed3992c456cdf60f5d4564b8ba3f05a69890ad", - "xprv9s21ZrQH143K2WFF16X85T2QCpndrGwx6GueB72Zf3AHwHJaknRXNF37ZmDrtHrrLSHvbuRejXcnYxoZKvRquTPyp2JiNG3XcjQyzSEgqCB" - ], - [ - "9e885d952ad362caeb4efe34a8e91bd2", - "ozone drill grab fiber curtain grace pudding thank cruise elder eight picnic", - "274ddc525802f7c828d8ef7ddbcdc5304e87ac3535913611fbbfa986d0c9e5476c91689f9c8a54fd55bd38606aa6a8595ad213d4c9c9f9aca3fb217069a41028", - "xprv9s21ZrQH143K2oZ9stBYpoaZ2ktHj7jLz7iMqpgg1En8kKFTXJHsjxry1JbKH19YrDTicVwKPehFKTbmaxgVEc5TpHdS1aYhB2s9aFJBeJH" - ], - [ - "6610b25967cdcca9d59875f5cb50b0ea75433311869e930b", - "gravity machine north sort system female filter attitude volume fold club stay feature office ecology stable narrow fog", - "628c3827a8823298ee685db84f55caa34b5cc195a778e52d45f59bcf75aba68e4d7590e101dc414bc1bbd5737666fbbef35d1f1903953b66624f910feef245ac", - "xprv9s21ZrQH143K3uT8eQowUjsxrmsA9YUuQQK1RLqFufzybxD6DH6gPY7NjJ5G3EPHjsWDrs9iivSbmvjc9DQJbJGatfa9pv4MZ3wjr8qWPAK" - ], - [ - "68a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc74e6ce7c", - "hamster diagram private dutch cause delay private meat slide toddler razor book happy fancy gospel tennis maple dilemma loan word shrug inflict delay length", - "64c87cde7e12ecf6704ab95bb1408bef047c22db4cc7491c4271d170a1b213d20b385bc1588d9c7b38f1b39d415665b8a9030c9ec653d75e65f847d8fc1fc440", - "xprv9s21ZrQH143K2XTAhys3pMNcGn261Fi5Ta2Pw8PwaVPhg3D8DWkzWQwjTJfskj8ofb81i9NP2cUNKxwjueJHHMQAnxtivTA75uUFqPFeWzk" - ], - [ - "c0ba5a8e914111210f2bd131f3d5e08d", - "scheme spot photo card baby mountain device kick cradle pact join borrow", - "ea725895aaae8d4c1cf682c1bfd2d358d52ed9f0f0591131b559e2724bb234fca05aa9c02c57407e04ee9dc3b454aa63fbff483a8b11de949624b9f1831a9612", - "xprv9s21ZrQH143K3FperxDp8vFsFycKCRcJGAFmcV7umQmcnMZaLtZRt13QJDsoS5F6oYT6BB4sS6zmTmyQAEkJKxJ7yByDNtRe5asP2jFGhT6" - ], - [ - "6d9be1ee6ebd27a258115aad99b7317b9c8d28b6d76431c3", - "horn tenant knee talent sponsor spell gate clip pulse soap slush warm silver nephew swap uncle crack brave", - "fd579828af3da1d32544ce4db5c73d53fc8acc4ddb1e3b251a31179cdb71e853c56d2fcb11aed39898ce6c34b10b5382772db8796e52837b54468aeb312cfc3d", - "xprv9s21ZrQH143K3R1SfVZZLtVbXEB9ryVxmVtVMsMwmEyEvgXN6Q84LKkLRmf4ST6QrLeBm3jQsb9gx1uo23TS7vo3vAkZGZz71uuLCcywUkt" - ], - [ - "9f6a2878b2520799a44ef18bc7df394e7061a224d2c33cd015b157d746869863", - "panda eyebrow bullet gorilla call smoke muffin taste mesh discover soft ostrich alcohol speed nation flash devote level hobby quick inner drive ghost inside", - "72be8e052fc4919d2adf28d5306b5474b0069df35b02303de8c1729c9538dbb6fc2d731d5f832193cd9fb6aeecbc469594a70e3dd50811b5067f3b88b28c3e8d", - "xprv9s21ZrQH143K2WNnKmssvZYM96VAr47iHUQUTUyUXH3sAGNjhJANddnhw3i3y3pBbRAVk5M5qUGFr4rHbEWwXgX4qrvrceifCYQJbbFDems" - ], - [ - "23db8160a31d3e0dca3688ed941adbf3", - "cat swing flag economy stadium alone churn speed unique patch report train", - "deb5f45449e615feff5640f2e49f933ff51895de3b4381832b3139941c57b59205a42480c52175b6efcffaa58a2503887c1e8b363a707256bdd2b587b46541f5", - "xprv9s21ZrQH143K4G28omGMogEoYgDQuigBo8AFHAGDaJdqQ99QKMQ5J6fYTMfANTJy6xBmhvsNZ1CJzRZ64PWbnTFUn6CDV2FxoMDLXdk95DQ" - ], - [ - "8197a4a47f0425faeaa69deebc05ca29c0a5b5cc76ceacc0", - "light rule cinnamon wrap drastic word pride squirrel upgrade then income fatal apart sustain crack supply proud access", - "4cbdff1ca2db800fd61cae72a57475fdc6bab03e441fd63f96dabd1f183ef5b782925f00105f318309a7e9c3ea6967c7801e46c8a58082674c860a37b93eda02", - "xprv9s21ZrQH143K3wtsvY8L2aZyxkiWULZH4vyQE5XkHTXkmx8gHo6RUEfH3Jyr6NwkJhvano7Xb2o6UqFKWHVo5scE31SGDCAUsgVhiUuUDyh" - ], - [ - "066dca1a2bb7e8a1db2832148ce9933eea0f3ac9548d793112d9a95c9407efad", - "all hour make first leader extend hole alien behind guard gospel lava path output census museum junior mass reopen famous sing advance salt reform", - "26e975ec644423f4a4c4f4215ef09b4bd7ef924e85d1d17c4cf3f136c2863cf6df0a475045652c57eb5fb41513ca2a2d67722b77e954b4b3fc11f7590449191d", - "xprv9s21ZrQH143K3rEfqSM4QZRVmiMuSWY9wugscmaCjYja3SbUD3KPEB1a7QXJoajyR2T1SiXU7rFVRXMV9XdYVSZe7JoUXdP4SRHTxsT1nzm" - ], - [ - "f30f8c1da665478f49b001d94c5fc452", - "vessel ladder alter error federal sibling chat ability sun glass valve picture", - "2aaa9242daafcee6aa9d7269f17d4efe271e1b9a529178d7dc139cd18747090bf9d60295d0ce74309a78852a9caadf0af48aae1c6253839624076224374bc63f", - "xprv9s21ZrQH143K2QWV9Wn8Vvs6jbqfF1YbTCdURQW9dLFKDovpKaKrqS3SEWsXCu6ZNky9PSAENg6c9AQYHcg4PjopRGGKmdD313ZHszymnps" - ], - [ - "c10ec20dc3cd9f652c7fac2f1230f7a3c828389a14392f05", - "scissors invite lock maple supreme raw rapid void congress muscle digital elegant little brisk hair mango congress clump", - "7b4a10be9d98e6cba265566db7f136718e1398c71cb581e1b2f464cac1ceedf4f3e274dc270003c670ad8d02c4558b2f8e39edea2775c9e232c7cb798b069e88", - "xprv9s21ZrQH143K4aERa2bq7559eMCCEs2QmmqVjUuzfy5eAeDX4mqZffkYwpzGQRE2YEEeLVRoH4CSHxianrFaVnMN2RYaPUZJhJx8S5j6puX" - ], - [ - "f585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f", - "void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold", - "01f5bced59dec48e362f2c45b5de68b9fd6c92c6634f44d6d40aab69056506f0e35524a518034ddc1192e1dacd32c1ed3eaa3c3b131c88ed8e7e54c49a5d0998", - "xprv9s21ZrQH143K39rnQJknpH1WEPFJrzmAqqasiDcVrNuk926oizzJDDQkdiTvNPr2FYDYzWgiMiC63YmfPAa2oPyNB23r2g7d1yiK6WpqaQS" - ] - ] -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7a612b9..f6d4314 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,14 +3,12 @@ jacoco = "0.8.8" kotest = "4.6.1" ktlint = "0.47.1" -moshi = "1.9.2" [libraries] -kotest-runner = { module = "io.kotest:kotest-runner-junit5-jvm", version.ref = "kotest" } -kotest-assertion = { module = "io.kotest:kotest-assertions-core-jvm", version.ref = "kotest" } -kotest-property = { module = "io.kotest:kotest-property-jvm", version.ref = "kotest" } -moshi-core = { module = "com.squareup.moshi:moshi", version.ref = "moshi" } -moshi-kotlin = { module = "com.squareup.moshi:moshi-kotlin", version.ref = "moshi" } +kotest-framework-engine = { module = "io.kotest:kotest-framework-engine", version.ref = "kotest" } +kotest-runner-junit5 = { module = "io.kotest:kotest-runner-junit5-jvm", version.ref = "kotest" } +kotest-assertion = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" } +kotest-property = { module = "io.kotest:kotest-property", version.ref = "kotest" } [plugins] detekt = "io.gitlab.arturbosch.detekt:1.21.0"