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"