Updated on 2026-08-14
This commit is contained in:
parent
ce360d9c2b
commit
e78f9b8018
3 changed files with 144 additions and 0 deletions
|
|
@ -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<String> = listOf()
|
||||
|
||||
override val wordlist: List<String>
|
||||
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<Char> = ('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<String> {
|
||||
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",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.tangem.feature.onboarding.domain
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
interface SeedPhraseChecker {
|
||||
suspend fun isSeedPhraseMatch(seedPhrase: List<String>): Boolean
|
||||
suspend fun isPhraseMatch(phrase: String, source: List<String>): Boolean
|
||||
}
|
||||
|
||||
class DummySeedPhraseChecker : SeedPhraseChecker {
|
||||
|
||||
override suspend fun isSeedPhraseMatch(seedPhrase: List<String>): Boolean = false
|
||||
|
||||
override suspend fun isPhraseMatch(phrase: String, source: List<String>): Boolean = source.contains(phrase)
|
||||
}
|
||||
|
|
@ -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<String>
|
||||
}
|
||||
|
||||
class DummySeedPhraseInteractor(
|
||||
private val sdkSeedPhraseRepository: SeedPhraseRepository = DummySeedPhraseRepository(),
|
||||
private val seedPhraseChecker: SeedPhraseChecker = DummySeedPhraseChecker(),
|
||||
) : SeedPhraseInteractor, SeedPhraseChecker by seedPhraseChecker {
|
||||
|
||||
override suspend fun generateSeedPhrase(): List<String> {
|
||||
return sdkSeedPhraseRepository.getWordList().wordlist
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue