2021-02-19 13:08:51 -08:00
package cash.z.ecc.android.sdk.jni
2021-04-09 19:29:29 -07:00
import androidx.test.filters.SmallTest
2021-02-19 13:08:51 -08:00
import cash.z.ecc.android.bip39.Mnemonics.MnemonicCode
import cash.z.ecc.android.bip39.toSeed
2021-04-09 19:29:29 -07:00
import cash.z.ecc.android.sdk.annotation.MaintainedTest
import cash.z.ecc.android.sdk.annotation.TestPurpose
2021-10-13 07:20:13 -07:00
import cash.z.ecc.android.sdk.internal.TroubleshootingTwig
import cash.z.ecc.android.sdk.internal.Twig
2021-02-19 13:08:51 -08:00
import cash.z.ecc.android.sdk.tool.DerivationTool
2021-04-09 19:29:29 -07:00
import cash.z.ecc.android.sdk.type.ZcashNetwork
2021-10-21 13:05:02 -07:00
import kotlinx.coroutines.runBlocking
2021-02-19 13:08:51 -08:00
import org.junit.Assert.assertEquals
import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith
2021-05-07 01:00:32 -07:00
import org.junit.runners.Parameterized
2021-02-19 13:08:51 -08:00
2021-04-09 19:29:29 -07:00
@MaintainedTest ( TestPurpose . REGRESSION )
2021-05-07 01:00:32 -07:00
@RunWith ( Parameterized :: class )
2021-04-09 19:29:29 -07:00
@SmallTest
2021-05-07 01:00:32 -07:00
class TransparentTest ( val expected : Expected , val network : ZcashNetwork ) {
2021-02-19 13:08:51 -08:00
@Test
2021-10-21 13:05:02 -07:00
fun deriveTransparentSecretKeyTest ( ) = runBlocking {
2021-04-09 18:43:07 -07:00
assertEquals ( expected . tskCompressed , DerivationTool . deriveTransparentSecretKey ( SEED , network = network ) )
2021-02-19 13:08:51 -08:00
}
@Test
2021-10-21 13:05:02 -07:00
fun deriveTransparentAddressTest ( ) = runBlocking {
2021-04-09 18:43:07 -07:00
assertEquals ( expected . tAddr , DerivationTool . deriveTransparentAddress ( SEED , network = network ) )
2021-02-19 13:08:51 -08:00
}
@Test
2021-10-21 13:05:02 -07:00
fun deriveTransparentAddressFromSecretKeyTest ( ) = runBlocking {
2021-05-07 01:00:32 -07:00
val pk = DerivationTool . deriveTransparentSecretKey ( SEED , network = network )
assertEquals ( expected . tAddr , DerivationTool . deriveTransparentAddressFromPrivateKey ( pk , network = network ) )
2021-03-31 23:23:41 -07:00
}
@Test
2021-10-21 13:05:02 -07:00
fun deriveUnifiedViewingKeysFromSeedTest ( ) = runBlocking {
2021-04-09 18:43:07 -07:00
val uvks = DerivationTool . deriveUnifiedViewingKeys ( SEED , network = network )
2021-03-31 23:23:41 -07:00
assertEquals ( 1 , uvks . size )
val uvk = uvks . first ( )
2021-04-09 18:43:07 -07:00
assertEquals ( expected . zAddr , DerivationTool . deriveShieldedAddress ( uvk . extfvk , network = network ) )
assertEquals ( expected . tAddr , DerivationTool . deriveTransparentAddressFromPublicKey ( uvk . extpub , network = network ) )
2021-02-19 13:08:51 -08:00
}
companion object {
2021-05-07 01:00:32 -07:00
const val PHRASE = " deputy visa gentle among clean scout farm drive comfort patch skin salt ranch cool ramp warrior drink narrow normal lunch behind salt deal person "
2021-02-19 13:08:51 -08:00
val MNEMONIC = MnemonicCode ( PHRASE )
val SEED = MNEMONIC . toSeed ( )
2021-03-31 23:23:41 -07:00
object ExpectedMainnet : Expected {
override val tAddr = " t1PKtYdJJHhc3Pxowmznkg7vdTwnhEsCvR4 "
override val zAddr = " zs1yc4sgtfwwzz6xfsy2xsradzr6m4aypgxhfw2vcn3hatrh5ryqsr08sgpemlg39vdh9kfupx20py "
override val tskCompressed = " L4BvDC33yLjMRxipZvdiUmdYeRfZmR8viziwsVwe72zJdGbiJPv2 "
override val tpk = " 03b1d7fb28d17c125b504d06b1530097e0a3c76ada184237e3bc0925041230a5af "
}
2021-02-19 13:08:51 -08:00
2021-03-31 23:23:41 -07:00
object ExpectedTestnet : Expected {
override val tAddr = " tm9v3KTsjXK8XWSqiwFjic6Vda6eHY9Mjjq "
override val zAddr = " ztestsapling1wn3tw9w5rs55x5yl586gtk72e8hcfdq8zsnjzcu8p7ghm8lrx54axc74mvm335q7lmy3g0sqje6 "
override val tskCompressed = " KzVugoXxR7AtTMdR5sdJtHxCNvMzQ4H196k7ATv4nnjoummsRC9G "
override val tpk = " 03b1d7fb28d17c125b504d06b1530097e0a3c76ada184237e3bc0925041230a5af "
2021-02-19 13:08:51 -08:00
}
@BeforeClass
@JvmStatic
fun startup ( ) {
2021-03-10 19:04:39 -08:00
Twig . plant ( TroubleshootingTwig ( formatter = { " @TWIG $it " } ) )
2021-02-19 13:08:51 -08:00
}
2021-05-07 01:00:32 -07:00
@JvmStatic
@Parameterized . Parameters
fun data ( ) = listOf (
arrayOf ( ExpectedTestnet , ZcashNetwork . Testnet ) ,
2022-06-23 05:31:02 -07:00
arrayOf ( ExpectedMainnet , ZcashNetwork . Mainnet )
2021-05-07 01:00:32 -07:00
)
2021-02-19 13:08:51 -08:00
}
2021-03-31 23:23:41 -07:00
interface Expected {
val tAddr : String
val zAddr : String
val tskCompressed : String
val tpk : String
}
2021-03-10 19:04:39 -08:00
}