forked from hush/SilentDragonAndroid
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.1 KiB
90 lines
2.1 KiB
package cash.z.ecc.android.util
|
|
|
|
import cash.z.android.plugin.MnemonicPlugin
|
|
import cash.z.ecc.kotlin.mnemonic.Mnemonics
|
|
import org.junit.Assert.assertEquals
|
|
import org.junit.Before
|
|
import org.junit.Test
|
|
import java.lang.Math.max
|
|
import java.util.*
|
|
|
|
|
|
class MnemonicTest {
|
|
|
|
lateinit var mnemonics: MnemonicPlugin
|
|
|
|
@Before
|
|
fun start() {
|
|
mnemonics = Mnemonics()
|
|
}
|
|
|
|
@Test
|
|
fun testSeed_fromMnemonic() {
|
|
val seed = mnemonics.run {
|
|
toSeed(nextMnemonic())
|
|
}
|
|
assertEquals(64, seed.size)
|
|
}
|
|
|
|
@Test
|
|
fun testMnemonic_create() {
|
|
val words = String(mnemonics.nextMnemonic()).split(' ')
|
|
assertEquals(24, words.size)
|
|
validate(words)
|
|
}
|
|
|
|
@Test
|
|
fun testMnemonic_createList() {
|
|
val words = mnemonics.nextMnemonicList()
|
|
assertEquals(24, words.size)
|
|
validate(words.map { String(it) })
|
|
}
|
|
|
|
@Test
|
|
fun testMnemonic_toList() {
|
|
val words = mnemonics.run {
|
|
toWordList(nextMnemonic())
|
|
}
|
|
assertEquals(24, words.size)
|
|
validate(words.map { String(it) })
|
|
}
|
|
|
|
@Test
|
|
fun testMnemonic_longestWord() {
|
|
var max = 0
|
|
val englishWordList = mnemonics.fullWordList(Locale.ENGLISH.language)
|
|
repeat(2048) {
|
|
max = max(max, englishWordList[it].length)
|
|
}
|
|
assertEquals(8, max)
|
|
}
|
|
|
|
private fun validate(words: List<String>) {
|
|
val englishWordList = mnemonics.fullWordList(Locale.ENGLISH.language)
|
|
// return or crash!
|
|
words.forEach { word ->
|
|
var i = 0
|
|
while (true) {
|
|
if (englishWordList[i++] == word) {
|
|
println(word)
|
|
break
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun CharSequence.toWords(): List<CharSequence> {
|
|
return mutableListOf<CharSequence>().let { result ->
|
|
var index = 0
|
|
repeat(length) {
|
|
if (this[it] == ' ') {
|
|
result.add(subSequence(index, it))
|
|
index = it + 1
|
|
}
|
|
}
|
|
result.add(subSequence(index, length))
|
|
result
|
|
}
|
|
}
|
|
|