[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-kotlin] branch master updated: Add test for setting up ref
From: |
gnunet |
Subject: |
[taler-wallet-kotlin] branch master updated: Add test for setting up refresh planchets |
Date: |
Mon, 08 Jun 2020 18:29:09 +0200 |
This is an automated email from the git hooks/post-receive script.
torsten-grote pushed a commit to branch master
in repository wallet-kotlin.
The following commit(s) were added to refs/heads/master by this push:
new ba115f8 Add test for setting up refresh planchets
ba115f8 is described below
commit ba115f8af0936bb05e924ce42592cbdb7df67761
Author: Torsten Grote <t@grobox.de>
AuthorDate: Mon Jun 8 13:28:51 2020 -0300
Add test for setting up refresh planchets
---
.idea/dictionaries/user.xml | 1 +
.../net/taler/wallet/kotlin/crypto/Crypto.kt | 19 ++++-
.../net/taler/wallet/kotlin/crypto/CryptoImpl.kt | 5 +-
.../wallet/kotlin/crypto/RefreshPlanchetTest.kt | 96 ++++++++++++++++++++++
4 files changed, 117 insertions(+), 4 deletions(-)
diff --git a/.idea/dictionaries/user.xml b/.idea/dictionaries/user.xml
index a7b3027..02282e7 100644
--- a/.idea/dictionaries/user.xml
+++ b/.idea/dictionaries/user.xml
@@ -6,6 +6,7 @@
<w>hmac</w>
<w>nacl</w>
<w>planchet</w>
+ <w>planchets</w>
</words>
</dictionary>
</component>
\ No newline at end of file
diff --git a/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/Crypto.kt
b/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/Crypto.kt
index ba43c18..620dd84 100644
--- a/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/Crypto.kt
+++ b/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/Crypto.kt
@@ -20,7 +20,24 @@ internal interface Crypto {
class EddsaKeyPair(val privateKey: ByteArray, val publicKey: ByteArray)
class EcdheKeyPair(val privateKey: ByteArray, val publicKey: ByteArray)
-class FreshCoin(val coinPublicKey: ByteArray, coinPrivateKey: ByteArray, bks:
ByteArray)
+data class FreshCoin(val coinPublicKey: ByteArray, val coinPrivateKey:
ByteArray, val bks: ByteArray) {
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other == null || this::class != other::class) return false
+ other as FreshCoin
+ if (!coinPublicKey.contentEquals(other.coinPublicKey)) return false
+ if (!coinPrivateKey.contentEquals(other.coinPrivateKey)) return false
+ if (!bks.contentEquals(other.bks)) return false
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = coinPublicKey.contentHashCode()
+ result = 31 * result + coinPrivateKey.contentHashCode()
+ result = 31 * result + bks.contentHashCode()
+ return result
+ }
+}
internal expect object CryptoFactory {
internal fun getCrypto(): Crypto
diff --git a/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/CryptoImpl.kt
b/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/CryptoImpl.kt
index a21c156..98ee656 100644
--- a/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/CryptoImpl.kt
+++ b/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/CryptoImpl.kt
@@ -10,12 +10,11 @@ abstract class CryptoImpl : Crypto {
val info = "taler-coin-derivation".encodeToByteArray()
val salt = coinNumber.toByteArray()
val out = kdf(64, secretSeed, salt, info)
- val coinPriv = out.copyOfRange(0, 32)
+ val coinPrivateKey = out.copyOfRange(0, 32)
val bks = out.copyOfRange(32, 64)
- return FreshCoin(bks, coinPriv, eddsaGetPublic(coinPriv))
+ return FreshCoin(eddsaGetPublic(coinPrivateKey), coinPrivateKey, bks)
}
- // TODO check if this is the correct coinNumber to ByteArray conversion
private fun Int.toByteArray(): ByteArray {
val bytes = ByteArray(4)
bytes[3] = (this and 0xFFFF).toByte()
diff --git
a/src/commonTest/kotlin/net/taler/wallet/kotlin/crypto/RefreshPlanchetTest.kt
b/src/commonTest/kotlin/net/taler/wallet/kotlin/crypto/RefreshPlanchetTest.kt
new file mode 100644
index 0000000..69d3169
--- /dev/null
+++
b/src/commonTest/kotlin/net/taler/wallet/kotlin/crypto/RefreshPlanchetTest.kt
@@ -0,0 +1,96 @@
+package net.taler.wallet.kotlin.crypto
+
+import net.taler.wallet.kotlin.Base32Crockford
+import kotlin.test.Test
+import kotlin.test.assertEquals
+
+class RefreshPlanchetTest {
+
+ private val crypto = CryptoFactory.getCrypto()
+
+ private val vectors = listOf(
+ TestVector(
+
"A9M953G6CJWBD21S82784Q3ZFEZYYWWKB9M6K4WQTTJZ8VTHPTTSHN8W3RMJQCCEKAFM04QD1PAQEN80DR6K0MNKYP404KMYW494D6R",
+ 27,
+ FreshCoin(
+
Base32Crockford.decode("JR124F1W9Q984Y01Y323CN88MVCJN7D8BJHYHCST5NWJTNCJMCQG"),
+
Base32Crockford.decode("YQS09P0FGBWS2FYY4NE5EDB93MKAYATNT8GZ33GSM34KF9PW6YWG"),
+
Base32Crockford.decode("KMWCX1W2HDKQM55ZRDZ630JE75YNDP8S8X8J02F9VSVZMNBWQ70G")
+ )
+ ),
+ TestVector(
+
"MRQ6KTFKJ5JMQS8QV5Z189W110V7F6BJJQMDHVKY17HDMTY7MYSB1MKRJY0ZGF0SC1TSZQNT7NJPJVJE17VBSBH05MJ26SQVPXCM9R8",
+ 65,
+ FreshCoin(
+
Base32Crockford.decode("W6BVA4JQKDJ294HFBDQGZK0VGGKRRXG820WWPJ1Y2TJ9SQYEXZWG"),
+
Base32Crockford.decode("FKH9KW7F73V8F4KEYME899RTKED2DVRM3A74MJJ5YT3P3CCGFS60"),
+
Base32Crockford.decode("BNDT4TPMV2R7HJVJAA8ZPF9J3Q0V1ZHY1JQ76723CBBQ99RX0GR0")
+ )
+ ),
+ TestVector(
+
"SCHMBND9ZMHDHTWQTSF1M41W4WPF9GM3FR5PJHC5JTZM25XEEC7CWC5SEN8FEWM54MSH27B9DJG91AKZ2YZ7ZMERG14QTBYJC02K21G",
+ 89,
+ FreshCoin(
+
Base32Crockford.decode("J75FF26KDZPBQW960SBG81W24BAY0YA04ZJ6PKQ1V0NQ7K62XNC0"),
+
Base32Crockford.decode("QS7BMWNG7SAEX7Z4H6QF66J5Q8GAX7JWHD4JTM9A656N43RH66C0"),
+
Base32Crockford.decode("JTNY89C0Y69X0NGMK2KB2JGGQZXX41GASPBN1YRS7KKV0MTP84CG")
+ )
+ ),
+ TestVector(
+
"S8DC2D6N1TW1TJQFRVDM5Q2HZ9G66MWVS4651GB2ST49TPFK2KWCRSADH51YNCMNGWK4JFT2SKQNWVA17XAR7EC18Z0X214PM1RF2MG",
+ 37,
+ FreshCoin(
+
Base32Crockford.decode("QWP8560H613GSNR2A1NGVQ023V2BP8ZYBVJJ0E2Y66ZGSHCX92K0"),
+
Base32Crockford.decode("XF58PHSGFDC30CBWQ55KDFWBDSZJMQ3AA6DF4V9SQ4E2DEFBS7N0"),
+
Base32Crockford.decode("KQT2K5HDKVVBHD188XS0KFBM63B4MAWM42HABT9FH806GME1QXHG")
+ )
+ ),
+ TestVector(
+
"THX83Y6G26CYMF186V6GPP5A4DQ6624D9EGCA6R7DVW6T32P6E6Q0TDW0S9MJSRG84SR2AMK1KKS6D627EJ02XSNH0BXDNWD1W35BWR",
+ 31,
+ FreshCoin(
+
Base32Crockford.decode("QWCD3DMV7NX87SPHYFWE3STBZQ02Q1NMXJ8GQGAA6WZ4GF7B3C80"),
+
Base32Crockford.decode("7J26RGBJFRGAYX8XDZZZ8PE9PCW3DH5KFA7564WZ6F5ADC159KB0"),
+
Base32Crockford.decode("M0A1EPG9WFB02Y7R6YYE6V6Q8DRJ466XCD6N99YFDAGN1QVA62NG")
+ )
+ ),
+ TestVector(
+
"D949HYZA6MWNKBKGTRRP1SGFA4X7AZK7HG5XX9YBVMWA05B884WAYY7MRDQNQYMRGA7AE01V6EEWZDF9JXMQKSYG0G1FVSZG4096JV8",
+ 26,
+ FreshCoin(
+
Base32Crockford.decode("BXRTK601B5NRJV9BAE88SAVPSMA20ZWDH5P0T6WFY7BSM3SZD930"),
+
Base32Crockford.decode("5N4WJWFR1J1SDNJGC8G9AV3ET4MPF6TGA4S1PJNQRJ5BRDHEEJN0"),
+
Base32Crockford.decode("P7XFE4W0H444XBYPRHB9VBTHKAZHNJE4E0R7P4D5FT90W3JJRE20")
+ )
+ ),
+ TestVector(
+
"7CXEEDABFD2FM802314FE91J2DS7ZHCHDGX27SJHJWWJWJZ1NGZBNZJ8T55W1P9ZEBPVYCHDNKQWRG68K3EJD069723857R06XDYE00",
+ 2147483647,
+ FreshCoin(
+
Base32Crockford.decode("QCAK6CA31KJ7HX4V3QEFK9CENT3E6DVE76M4VY9ZQ030CM8TZQJG"),
+
Base32Crockford.decode("2V7HAFK2ATBB9MDWRR8P9PSPXBWMGFXW5G75WVGYCRZB0G5PDG9G"),
+
Base32Crockford.decode("6C02KA6496FG5X0SDSWTS4JJHH87GYNSW9FZE6S34AWG5RJGPWQ0")
+ )
+ ),
+ TestVector(
+
"9F65N3N1BZW7TT6EB4X2GCDC5BN3J2R33R7H0NWPZENN6B4Y41XYTVC9SA5NP0E4WQFQEJ63WNC5R0C8KBMKDA5JCXEKEGJYVMTR7VG",
+ 0,
+ FreshCoin(
+
Base32Crockford.decode("S6RM093DHGG882T39KWC48807CFC36SRGGX54DBB1Z6NDAMT875G"),
+
Base32Crockford.decode("2DY3KVKA978S85ERF6QYF73Q95KQ0YVE89KKQ8JYR0FX161PV1S0"),
+
Base32Crockford.decode("PCY47EC1APBKBG9HWQCTJN6FWNJPGGC6XDJTYWBHTJ9A952AGCK0")
+ )
+ )
+ )
+
+ @Test
+ fun testRefreshPlanchets() {
+ for (v in vectors) {
+ val freshCoin =
crypto.setupRefreshPlanchet(Base32Crockford.decode(v.seed), v.coinNumber)
+ assertEquals(v.freshCoin, freshCoin)
+ }
+ }
+
+ private class TestVector(val seed: String, val coinNumber: Int, val
freshCoin: FreshCoin)
+
+}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-wallet-kotlin] branch master updated: Add test for setting up refresh planchets,
gnunet <=