secant-android-wallet/sdk-ext-lib/src/main/java/cash/z/ecc/sdk/model/SeedPhraseValidation.kt

42 lines
1.3 KiB
Kotlin
Raw Normal View History

2021-12-09 12:21:30 -08:00
package cash.z.ecc.sdk.model
import cash.z.ecc.android.bip39.Mnemonics
2023-02-17 03:05:23 -08:00
import cash.z.ecc.android.sdk.model.SeedPhrase
2021-12-09 12:21:30 -08:00
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.util.Locale
// This is a stopgap; would like to see improvements to the SeedPhrase class to have validation moved
// there as part of creating the object
sealed class SeedPhraseValidation {
object BadCount : SeedPhraseValidation()
2021-12-09 12:21:30 -08:00
object BadWord : SeedPhraseValidation()
2021-12-09 12:21:30 -08:00
object FailedChecksum : SeedPhraseValidation()
2021-12-09 12:21:30 -08:00
class Valid(val seedPhrase: SeedPhrase) : SeedPhraseValidation()
companion object {
suspend fun new(list: List<String>): SeedPhraseValidation {
if (list.size != SeedPhrase.SEED_PHRASE_SIZE) {
return BadCount
}
@Suppress("SwallowedException")
return try {
val stringified = list.joinToString(SeedPhrase.DEFAULT_DELIMITER)
2023-03-21 12:04:16 -07:00
withContext(Dispatchers.Default) {
2021-12-09 12:21:30 -08:00
Mnemonics.MnemonicCode(stringified, Locale.ENGLISH.language).validate()
}
Valid(SeedPhrase.new(stringified))
} catch (e: Mnemonics.InvalidWordException) {
BadWord
} catch (e: Mnemonics.ChecksumException) {
FailedChecksum
}
}
}
}