From e78f9b8018cb4058482b2d1eef780b31b01d8cdc Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 3 Apr 2023 08:06:12 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../onboarding/data/SeedPhraseRepository.kt | 107 ++++++++++++++++++ .../onboarding/domain/SeedPhraseChecker.kt | 16 +++ .../onboarding/domain/SeedPhraseInteractor.kt | 21 ++++ 3 files changed, 144 insertions(+) create mode 100644 features/onboarding/src/main/java/com/tangem/feature/onboarding/data/SeedPhraseRepository.kt create mode 100644 features/onboarding/src/main/java/com/tangem/feature/onboarding/domain/SeedPhraseChecker.kt create mode 100644 features/onboarding/src/main/java/com/tangem/feature/onboarding/domain/SeedPhraseInteractor.kt diff --git a/features/onboarding/src/main/java/com/tangem/feature/onboarding/data/SeedPhraseRepository.kt b/features/onboarding/src/main/java/com/tangem/feature/onboarding/data/SeedPhraseRepository.kt new file mode 100644 index 0000000000..017d0e1b7d --- /dev/null +++ b/features/onboarding/src/main/java/com/tangem/feature/onboarding/data/SeedPhraseRepository.kt @@ -0,0 +1,107 @@ +package com.tangem.feature.onboarding.data + +import com.tangem.crypto.bip39.EntropyLength +import com.tangem.crypto.bip39.Wordlist + +/** +[REDACTED_AUTHOR] + */ +interface SeedPhraseRepository { + fun getWordList(): Wordlist +} + +class DummySeedPhraseRepository : SeedPhraseRepository { + override fun getWordList(): Wordlist = DummyWordlist() +} + +class DummyWordlist( + entropyLength: EntropyLength = EntropyLength.Bits128Length, + random: Boolean = false, +) : Wordlist { + + private var _wordlist: List = listOf() + + override val wordlist: List + get() = _wordlist + + init { + if (random) regenerateRandom() else regenerate(entropyLength) + } + + fun regenerateRandom(entropyLength: EntropyLength = EntropyLength.Bits128Length) { + val minWordLength = 4 + val maxWordLength = 10 + _wordlist = (0 until entropyLength.wordCount()) + .map { + randomString(maxLength = randomInt(minWordLength, maxWordLength)) + } + } + + fun regenerate(entropyLength: EntropyLength = EntropyLength.Bits128Length) { + _wordlist = getStaticWordlist().subList(0, entropyLength.wordCount() - 1) + } + + private fun randomString(maxLength: Int): String { + val charPool: List = ('a'..'z') + ('A'..'Z') + ('0'..'9') + return (0..maxLength) + .map { randomInt(0, charPool.size) } + .map(charPool::get) + .joinToString("") + } + + private fun randomInt(from: Int, to: Int): Int = kotlin.random.Random.nextInt(from, to) + + private fun getStaticWordlist(): List { + return listOf( + "lorem", + "ipsum", + "dolor", + "amet", + "consectetur", + "adipiscing", + "elit", + "eiusmod", + "tempor", + "incididunt", + "labore", + "dolore", + "magna", + "aliqua", + "enim", + "minim", + "veniam", + "quis", + "nostrud", + "exercitation", + "ullamco", + "laboris", + "nisi", + "aliquip", + "commodo", + "consequat", + "duis", + "aute", + "irure", + "reprehenderit", + "voluptate", + "velit", + "esse", + "cillum", + "fugiat", + "nulla", + "pariatur", + "excepteur", + "sint", + "occaecat", + "cupidatat", + "proident", + "sunt", + "culpa", + "officia", + "deserunt", + "mollit", + "anim", + "laborum", + ) + } +} \ No newline at end of file diff --git a/features/onboarding/src/main/java/com/tangem/feature/onboarding/domain/SeedPhraseChecker.kt b/features/onboarding/src/main/java/com/tangem/feature/onboarding/domain/SeedPhraseChecker.kt new file mode 100644 index 0000000000..e7aa5c0315 --- /dev/null +++ b/features/onboarding/src/main/java/com/tangem/feature/onboarding/domain/SeedPhraseChecker.kt @@ -0,0 +1,16 @@ +package com.tangem.feature.onboarding.domain + +/** +[REDACTED_AUTHOR] + */ +interface SeedPhraseChecker { + suspend fun isSeedPhraseMatch(seedPhrase: List): Boolean + suspend fun isPhraseMatch(phrase: String, source: List): Boolean +} + +class DummySeedPhraseChecker : SeedPhraseChecker { + + override suspend fun isSeedPhraseMatch(seedPhrase: List): Boolean = false + + override suspend fun isPhraseMatch(phrase: String, source: List): Boolean = source.contains(phrase) +} \ No newline at end of file diff --git a/features/onboarding/src/main/java/com/tangem/feature/onboarding/domain/SeedPhraseInteractor.kt b/features/onboarding/src/main/java/com/tangem/feature/onboarding/domain/SeedPhraseInteractor.kt new file mode 100644 index 0000000000..fef12f2d0d --- /dev/null +++ b/features/onboarding/src/main/java/com/tangem/feature/onboarding/domain/SeedPhraseInteractor.kt @@ -0,0 +1,21 @@ +package com.tangem.feature.onboarding.domain + +import com.tangem.feature.onboarding.data.DummySeedPhraseRepository +import com.tangem.feature.onboarding.data.SeedPhraseRepository + +/** +[REDACTED_AUTHOR] + */ +interface SeedPhraseInteractor : SeedPhraseChecker { + suspend fun generateSeedPhrase(): List +} + +class DummySeedPhraseInteractor( + private val sdkSeedPhraseRepository: SeedPhraseRepository = DummySeedPhraseRepository(), + private val seedPhraseChecker: SeedPhraseChecker = DummySeedPhraseChecker(), +) : SeedPhraseInteractor, SeedPhraseChecker by seedPhraseChecker { + + override suspend fun generateSeedPhrase(): List { + return sdkSeedPhraseRepository.getWordList().wordlist + } +} \ No newline at end of file