gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-kotlin] 03/04: Add SignaturePurposeBuilder and tests


From: gnunet
Subject: [taler-wallet-kotlin] 03/04: Add SignaturePurposeBuilder and tests
Date: Wed, 24 Jun 2020 22:53:59 +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.

commit f6d37f2b3c5465ab445469a08509352eed4b6449
Author: Torsten Grote <t@grobox.de>
AuthorDate: Wed Jun 24 15:48:17 2020 -0300

    Add SignaturePurposeBuilder and tests
---
 .../net/taler/wallet/kotlin/crypto/Signature.kt    |  46 ++++++
 .../taler/wallet/kotlin/crypto/SignatureTest.kt    | 184 +++++++++++++++++++++
 2 files changed, 230 insertions(+)

diff --git a/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/Signature.kt 
b/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/Signature.kt
new file mode 100644
index 0000000..881ace2
--- /dev/null
+++ b/src/commonMain/kotlin/net/taler/wallet/kotlin/crypto/Signature.kt
@@ -0,0 +1,46 @@
+package net.taler.wallet.kotlin.crypto
+
+import net.taler.wallet.kotlin.crypto.CryptoImpl.Companion.toByteArray
+
+class Signature {
+
+    internal enum class Purpose(val num: Int) {
+        RESERVE_WITHDRAW(1200),
+        WALLET_COIN_DEPOSIT(1201),
+        MASTER_DENOMINATION_KEY_VALIDITY(1025),
+        MASTER_WIRE_FEES(1028),
+        MASTER_WIRE_DETAILS(1030),
+        WALLET_COIN_MELT(1202),
+        TEST(4242),
+        MERCHANT_PAYMENT_OK(1104),
+        WALLET_COIN_RECOUP(1203),
+        WALLET_COIN_LINK(1204),
+        EXCHANGE_CONFIRM_RECOUP(1039),
+        EXCHANGE_CONFIRM_RECOUP_REFRESH(1041)
+    }
+
+    internal class PurposeBuilder(private val purposeNum: Int) {
+        private val chunks = ArrayList<ByteArray>()
+
+        fun put(bytes: ByteArray): PurposeBuilder {
+            chunks.add(bytes)
+            return this
+        }
+
+        fun build(): ByteArray {
+            var payloadLen = 0
+            for (c in chunks) payloadLen += c.size
+            val size = 4 + 4 + payloadLen
+            val bytes = ByteArray(size)
+            size.toByteArray().copyInto(bytes, 0)
+            purposeNum.toByteArray().copyInto(bytes, 4)
+            var offset = 8
+            for (c in chunks) {
+                c.copyInto(bytes, offset)
+                offset += c.size
+            }
+            return bytes
+        }
+    }
+
+}
diff --git 
a/src/commonTest/kotlin/net/taler/wallet/kotlin/crypto/SignatureTest.kt 
b/src/commonTest/kotlin/net/taler/wallet/kotlin/crypto/SignatureTest.kt
new file mode 100644
index 0000000..1326cc4
--- /dev/null
+++ b/src/commonTest/kotlin/net/taler/wallet/kotlin/crypto/SignatureTest.kt
@@ -0,0 +1,184 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2020 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under 
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
FOR
+ * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet.kotlin.crypto
+
+import net.taler.wallet.kotlin.Base32Crockford
+import net.taler.wallet.kotlin.crypto.Signature.PurposeBuilder
+import kotlin.test.Test
+import kotlin.test.assertEquals
+
+class SignatureTest {
+
+    private class PurposeBuilderVector(val purposeNum: Int, val chunks: 
List<String>, val result: String)
+
+    @Test
+    fun testSignaturePurposeBuilder() {
+        val vectors = listOf(
+            PurposeBuilderVector(42, listOf("46D6FNS4VAFW0"), 
"000004000002M8CTCZBJ9PMZR0"),
+            PurposeBuilderVector(
+                1375883724,
+                listOf("7H2ENBHG1AVRD5QVKYCXKAZQQQGCSEAAZ4"),
+                "000007AJ098WRF24XAQ302NQGTBFQ7WSV6NZFFF0SJWMNY8"
+            ),
+            PurposeBuilderVector(251873401, listOf("KVSRVCV6J7QGYR0"), 
"0000048F0D47K7QKHPSPD4FF1XG0"),
+            PurposeBuilderVector(
+                2126178285,
+                listOf("EJN927GRT1HNS0K53TBPWYB4", 
"QGSXW3NGHPJCVTBX3KHGW7GBC1SJWPK0", "XK7GA"),
+                
"00000BKYQBKYTX5AJ4F1HM33BJ16A7MQDSWP9F1KVR7B13D4SQMQT7731RF0PR3K5SD61V6F0M"
+            ),
+            PurposeBuilderVector(
+                871975602,
+                listOf("JC26GG7M", "D5GER58NSW3MX3AB2EA0", 
"HVB81PFV0YYQ2170H77TQPZTB21T314P9B1N3VSXEHZ88VEPHW"),
+                
"00000E1KZ55B54R4D10F8TB0XGAHBKR79T6MP4WMHVB81PFV0YYQ2170H77TQPZTB21T314P9B1N3VSXEHZ88VEPHW"
+            ),
+            PurposeBuilderVector(
+                366986877,
+                listOf("28", "48213TXMKY8H8EGRJ9XP00D9MHRHQG5N02W5GG0", 
"VR4CDW7WQ2FYQF3WBG60"),
+                
"00000B8NVZ37T4H20G8YQD4ZJ4A3M64JFDG03AD4E4DW1D80Q1C41QG8RVRFSE4ZXEY7RQ0C"
+            ),
+            PurposeBuilderVector(
+                1369171164,
+                listOf(
+                    
"SJTSKNX7W7CAP848GCESA09HQQQYQN50G1GY5AHPP12D4GMZJCXMCFPYECGEBF8",
+                    "J70SVFRH8WN1DP7DZ60BZW0",
+                    
"275VB93D2MV6NN7V97QXC16VMX07JNCC5R3HBH1TSWTW5V72G1E66HP73ANWFXE6NG"
+                ),
+                
"00000SJHKFJDSK5NK7BTFRERNCG8H0RXJM0K3FFFXFAA1031WAN3DC24T919Z4SV8RZDWWS0WPYS3GCXQW8MEAGPV3PZK05ZY08WQDD4DMAKCTPMZD4YZNG4VEKM0YANHGQ0E5E47B7KBGQCWA05RRT6RWDAQHZNRTP0"
+            ),
+            PurposeBuilderVector(
+                2115762114,
+                listOf("Z7A3PQ7BV5G5D1P3F2EY9KN4GKVEG95KZD50", 
"SZ3PA4BSWF8T22TJMDZN5877Z9DQFC67K9E0"),
+                
"00000D3Y3FVW5YEM7DEEQPB0AT3C6Y4XWK7A917PX0JB7YTASZ3PA4BSWF8T22TJMDZN5877Z9DQFC67K9E0"
+            ),
+            PurposeBuilderVector(
+                1382722498,
+                listOf("0WEEY7GRA8Q8ZWS2NRP0", "FQ5YY3ZWJ64014A0SPWMCE4B58", 
"G03C6M9PZ45D99G4M2HZJ"),
+                
"00000CAJDANW41RWXWF1GMHEHZSJ5BHCFQ5YY3ZWJ64014A0SPWMCE4B5A00DGTH6VWGNN560JGA7Y8"
+            ),
+            PurposeBuilderVector(
+                1557782497,
+                listOf(
+                    "CEB9E7Q87X12R172RZ8DAHSGGS60",
+                    "M17JXQ290P209Q7EH759PW558FYZYTEHR40J18M81W",
+                    "B918DJVWTERCHS54S0G93DFPVK9TV383DMRJR43ZTFZBAE3CVSFG"
+                ),
+                
"00000MTWV7FY2RWPJWFEGFT25G2E5HYGTN3K11JCM17JXQ290P209Q7EH759PW558FYZYTEHR40J18M81XD451PBFK9V1J74MK4214DNYVED7BCD0DPK2B0GFZ9ZXD9RDKF5Y"
+            ),
+            PurposeBuilderVector(1662106597, listOf("621Y24CA3ZCHJJ8"), 
"000004B326XYAC43W48RM7YS354G"),
+            PurposeBuilderVector(
+                393436430,
+                listOf(
+                    "6WMDVK6XKGEAX152ZM4SHQ77DCRQB4RYJX0MGCZFVVK3XTG",
+                    "8TKEY2F1PMAT396GC3E191182F34FXXR12MR7Z6WMG4S10GZX7RJG"
+                ),
+                
"00000HGQEDEGWDS8VQ6DV70WNT2A5Z89K3EEETSHEP9HX5T190SYZQQ67VN4D9QF17GVA5D1MK861Q0MGGM17HJ7YYW0HAC3ZKEA82CGG8FYKW98"
+            ),
+            PurposeBuilderVector(
+                1616746709,
+                
listOf("ZQT1F901YWFDX6XZZB6R8PSQ1QJANCPF63T8RE09HRK2XQ7EE2K0F74GERH4GQ0"),
+                
"00000BV0BPCDBZFM2YJ03XRYVTDVZYPDGHDKE3F4NASCYC7MHGW0K3H65VEEWW560YE90XH291E0"
+            ),
+            PurposeBuilderVector(
+                691857007,
+                listOf("5JT5DM7KWVW7A7P764NTG0FJDWEQTQAGB253J547GXWX93204NM0"),
+                
"00000A197KK6YB5MAV8F7SQREMFCEC9BN00Z4VRXFNEN0P4A74A8F1VSTJ6409B8"
+            ),
+            PurposeBuilderVector(
+                582885064,
+                listOf("W5P2HP14MCNSKX4CZ4FZ0BDPSX2SV7MCE45V8PF7DW9EXAGK3TC0"),
+                
"00000A12QRFCHRBC53C298SBK7T8SY8ZY0PVDKT5KPF8RW8BPHCYEVRJXTN167MR"
+            ),
+            PurposeBuilderVector(
+                480383332,
+                listOf(
+                    "49DZJY0K1WJFDK7P86Q1R2F150S50JQR8HQW059HBG9CR615N4V82",
+                    "D0XXQKX9BB0HVJK34TKCZJ1E2JQKF06EQVXRRD2ZKX4QGXG",
+                    "99JY6SS2HJ1J29GS1793CGE5BKSG"
+                ),
+                
"00000NRWM88P88JVZ5W163S4YV6FCGDE3G4Y2A1JA15FGH3FR0AK2Q0JSGC2BA9PG5M3QPYFN5DC27EACCKADKY85RAAYDW0STZFQ31MBYFMJY3P99JY6SS2HJ1J29GS1793CGE5BKSG"
+            ),
+            PurposeBuilderVector(
+                877078324,
+                listOf("RC", "K1PKX78BPGNQSSZCVRB3B6PJYR", "74"),
+                "000006HM8WKK9GWRDMZ9T2XM5DYEFV6Y2RTSNMQP74"
+            ),
+            PurposeBuilderVector(
+                25488155,
+                listOf(
+                    
"FNG58X0W2A4HV4ZY5TKS73RGNHA8KZ3B4WWDJS2V1B27F3G6G08FNHM8NYBZ45Q8",
+                    "NQGNDPDNW4G9AEHXB1BKXQXK84"
+                ),
+                
"00000G01GKNHPZB0AHT1R4M93P9ZWBN7JE7H1B2MH7Y6P9SRV5J5P2P4EY70D00GZB38HBWQY8BEHBF1AVCVBR90JMX3TP2Q7VFV6G8"
+            ),
+            PurposeBuilderVector(
+                749389285,
+                listOf(
+                    
"FVD8X18A3S2KHJ7143TCEHE3K083DRBG2CA0D766NMRVHX7MSN78NSYHZSWNH9V2DM",
+                    "1TSPZ4VBKEBKCQEB2673H2FJHCZ6M19R2691NY79A0",
+                    
"P9VW044VY2TGKNNF4ZWZ1S2ACM4VJYCWP7ZGWRKR1264ZS2CQZGSXZ775AC41X5778"
+                ),
+                
"00000X1CNB2YAZPTHT2GM7J5734E287MRX2W760G6VGQ04RM0TECDB9HQ3TF9KAEHBKX3ZKSB2KP4V8EPDQS6TWVJWV5VJRHHRW8KWMB7SN0AE0HJ8DFHTAGP9VW044VY2TGKNNF4ZWZ1S2ACM4VJYCWP7ZGWRKR1264ZS2CQZGSXZ775AC41X5778"
+            ),
+            PurposeBuilderVector(
+                434249902,
+                listOf(
+                    "VFERBNSH7X70",
+                    "T5DWNBWMF3BPAGWSESKF7WGTTS3JHVKAAR3DR",
+                    
"SMCA0184DN3WE934BGFE4MCE14279NYCFF0PJDQ20JRHFZXSGXE6CP1BSMGR479HAC"
+                ),
+                
"00000KRSW8GAXPYXGQBK2FTET5DWNBWMF3BPAGWSESKF7WGTTS3JHVKAAR3DSK8RM02G8VA7RWJ68Q0YW98RW284EKBWRYY1D4VE415H2ZZVK1TWCSC2QK91G8EK2MR"
+            ),
+            PurposeBuilderVector(
+                1710327887,
+                listOf("S64XB965NEAQQ5287XHNT126BW"),
+                "00000635Y644ZJC9TPJCBAWNFEA4GFV3BM24CQR"
+            ),
+            PurposeBuilderVector(
+                1247371119,
+                
listOf("CSXX5W59E3S03412M29J0HG0R67BW4B3X946GS2T0TVYPH9HFP9FC0M7", 
"931KSGS0ZJG4A79BT55G0Q4Q"),
+                
"00000EJAB5FPYSKVTBRAJW7J0682584K41301GCEQR8P7TJ8D1J5M1NQXD2K2ZCJYR18EJ637K1J1Z508MEJQMAB01E9E"
+            ),
+            PurposeBuilderVector(
+                2024386767,
+                listOf(
+                    "R2WZA0FKD57D418NB2KK84PJKHAVPEC6219X2KQJ78JFB76F0R",
+                    "CNYD5TAC7Y3N58CN6VK9F7NBKD2NJJK3VJ91CZKBFZWDVVZB28",
+                    "G7WQJVXXYT4JHA1NK22RXS45BM0W5H5JD7JNX3PWD2WZ27Y5Y1FB4"
+                ),
+                
"00000SVRN6RCZG5SYM0Z6TAET82HAP576G9D572NQCWRC42KT57F4EH4YPECY1K5FK9EJK1ZGX9A359PWTBSXAWV8NCMMRYWJ8B7WTVZZ3EYZTRJG7WQJVXXYT4JHA1NK22RXS45BM0W5H5JD7JNX3PWD2WZ27Y5Y1FB4"
+            ),
+            PurposeBuilderVector(1182512118, listOf("KH32THSNNZGJPC0"), 
"000004A6FESZD7265N3KBBZ15CR0"),
+            PurposeBuilderVector(
+                2029783771,
+                listOf("N7468QH02K49BTD16S1F6FB4NKNXB0Q410"),
+                "000007BRZG5DQAE8CHF20568JQMT2DJ2YCYP9B7BTP1E820"
+            ),
+            PurposeBuilderVector(
+                1111140596,
+                listOf("6BN45PA2RCVRR8PJ6XKRJ9ZER2BR3MY9RQ290FADAG"),
+                "000008J27AMF8CQA8BCM5GSQHGHD4DV7H4KYXG4QG79WKHE4J0YMTN0"
+            )
+        )
+        for (v in vectors) {
+            val builder = PurposeBuilder(v.purposeNum)
+            for (chunk in v.chunks) builder.put(Base32Crockford.decode(chunk))
+            val encodedBytes = Base32Crockford.encode(builder.build())
+            assertEquals(v.result, encodedBytes)
+        }
+    }
+
+}

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]