taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit 5f7654d5ba3524e039d18792e2a00a4df63c0a0a
parent 2dcc36867561729c7b8bad2ead694ab0931d5cfe
Author: Bohdan Potuzhnyi <bohdan.potuzhnyi@gmail.com>
Date:   Wed,  8 Oct 2025 10:07:11 +0200

[donau-verificator] sha512 to sha256

Diffstat:
Mdonau-verificator/README.md | 5++---
Mdonau-verificator/src/main/cpp/verification.cpp | 24++++++++----------------
Mdonau-verificator/src/main/java/net/taler/donauverificator/MainActivity.java | 2+-
Mdonau-verificator/src/main/java/net/taler/donauverificator/Results.java | 6+++---
Mdonau-verificator/src/main/java/net/taler/donauverificator/network/DonauNetworkClient.java | 23+----------------------
5 files changed, 15 insertions(+), 45 deletions(-)

diff --git a/donau-verificator/README.md b/donau-verificator/README.md @@ -6,7 +6,7 @@ The app verifies the donation statement made by a Donau. 2. For test purposes, a string of a valid donation statement is already hard coded. 3. With the defined URI scheme following command can be used (developer mode must be enabled for `donau+http` URIs): ```bash -adb shell am start -a android.intent.action.VIEW -d "donau://example.com/megacharity/1234/2024/7560001010000/1234?total=EUR:15&sig=ED25519:SAAM5BA1F9H4VT6T78CFC3X63HAMY2TXB597XBVZ0EMXEZ90QPJ3000BXDBJ3ECHGB8AEX9FFQ5BAXVSF6X6NXM98PY353F2R99PP1R&pub=E24CDJHGSPZG20ZSSTMTBREGCCP495WKETQYCYA9C93EPMZN4FEG" +adb shell am start -a android.intent.action.VIEW -d "donau://example.com/megacharity/1234/2025/7560001010000/1234?total=EUR:15&sig=ED25519:H9PM3BW3P8MEKB34GZ0G1F7JSNVX7B8AHXRFFMS37QZM7TXZ5MWPXTEDZZGN1QRB1AFPKNCFXJB39NJHP3BAFGCZSCXHEYPHA1YJY28&pub=K641W1CZM7DRSV184M8CPM3Z8MZRBYYJMNYMJK70FTYJHBPX21J0" ``` ## Future Work The public key should be requested directly from the Donau over HTTPS, @@ -23,4 +23,4 @@ Mac OS, Linux: Windows: - gradlew.bat -0 -\ No newline at end of file +0 diff --git a/donau-verificator/src/main/cpp/verification.cpp b/donau-verificator/src/main/cpp/verification.cpp @@ -23,6 +23,7 @@ // needed for libsodium #include <sodium/crypto_sign.h> +#include <sodium/crypto_hash_sha256.h> /** * Maximum legal 'value' for an amount, based on IEEE double (for JavaScript compatibility). @@ -379,19 +380,11 @@ TALER_string_to_amount_nbo (const char *str, } /** - * @brief A 512-bit hashcode. These are the default length for GNUnet, using SHA-512. - */ -struct GNUNET_HashCode -{ - uint32_t bits[512 / 8 / sizeof(uint32_t)]; /* = 16 */ -}; - -/** * Donor's hashed and salted unique donation identifier. */ struct DONAU_HashDonorTaxId { - unsigned char hash[512/8]; + unsigned char hash[256 / 8]; }; @@ -585,18 +578,18 @@ Java_net_taler_donauverificator_Results_ed25519_1verify( struct DONAU_DonauSignatureP sig; struct DONAU_HashDonorTaxId h_donor_tax_id; - crypto_hash_sha512_state state; - crypto_hash_sha512_init(&state); + crypto_hash_sha256_state state; + crypto_hash_sha256_init(&state); unsigned int tax_length; for (tax_length = 0; tax_id[tax_length]!= '\0'; ++tax_length); unsigned int salt_length; for (salt_length = 0; salt[salt_length]!= '\0'; ++salt_length); - crypto_hash_sha512_update(&state, tax_id, tax_length); - crypto_hash_sha512_update(&state, salt, salt_length); + crypto_hash_sha256_update(&state, tax_id, tax_length); + crypto_hash_sha256_update(&state, salt, salt_length); - crypto_hash_sha512_final(&state, h_donor_tax_id.hash); + crypto_hash_sha256_final(&state, h_donor_tax_id.hash); struct DONAU_DonationStatementConfirmationPS confirm = { .purpose.purpose = htonl (1500), @@ -630,4 +623,4 @@ Java_net_taler_donauverificator_Results_ed25519_1verify( const unsigned char *eddsa_pub = (const unsigned char*) &pub.eddsa_pub.q_y; //verify function from libsodium (also used by GNUNET) return crypto_sign_verify_detached (s, m, mlen, eddsa_pub); -} -\ No newline at end of file +} diff --git a/donau-verificator/src/main/java/net/taler/donauverificator/MainActivity.java b/donau-verificator/src/main/java/net/taler/donauverificator/MainActivity.java @@ -43,7 +43,7 @@ import net.taler.donauverificator.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity { private static final String DEBUG_DONATION_STATEMENT = - "donau://example.com/megacharity/1234/2024/7560001010000/1234?total=EUR:15&sig=ED25519:SAAM5BA1F9H4VT6T78CFC3X63HAMY2TXB597XBVZ0EMXEZ90QPJ3000BXDBJ3ECHGB8AEX9FFQ5BAXVSF6X6NXM98PY353F2R99PP1R&pub=E24CDJHGSPZG20ZSSTMTBREGCCP495WKETQYCYA9C93EPMZN4FEG"; + "donau://example.com/megacharity/1234/2025/7560001010000/1234?total=EUR:15&sig=ED25519:H9PM3BW3P8MEKB34GZ0G1F7JSNVX7B8AHXRFFMS37QZM7TXZ5MWPXTEDZZGN1QRB1AFPKNCFXJB39NJHP3BAFGCZSCXHEYPHA1YJY28&pub=K641W1CZM7DRSV184M8CPM3Z8MZRBYYJMNYMJK70FTYJHBPX21J0"; private int PERMISSIONS_REQUEST_CAMERA = 0; private ActivityMainBinding binding; private CodeScanner mCodeScanner; diff --git a/donau-verificator/src/main/java/net/taler/donauverificator/Results.java b/donau-verificator/src/main/java/net/taler/donauverificator/Results.java @@ -503,9 +503,9 @@ public class Results extends AppCompatActivity { DonauNetworkClient client = getNetworkClient(); int donationYear = parseYearOrDefault(year); DonationStatement statement = client.fetchDonationStatement(donationYear, donorHash); - String statementTotal = statement.getTotal(); - String statementSignature = statement.getSignature(); - String statementPublicKey = statement.getPublicKey(); + String statementTotal = statement.total(); + String statementSignature = statement.signature(); + String statementPublicKey = statement.publicKey(); if (isEmpty(statementTotal) || isEmpty(statementSignature) || isEmpty(statementPublicKey)) { Log.e(TAG, "Donation statement response missing required fields"); return SignatureStatus.DONATION_STATEMENT_INVALID; diff --git a/donau-verificator/src/main/java/net/taler/donauverificator/network/DonauNetworkClient.java b/donau-verificator/src/main/java/net/taler/donauverificator/network/DonauNetworkClient.java @@ -208,28 +208,7 @@ public final class DonauNetworkClient { return trimmed.isEmpty() ? null : trimmed; } - public static final class DonationStatement { - private final String total; - private final String signature; - private final String publicKey; - - public DonationStatement(String total, String signature, String publicKey) { - this.total = total; - this.signature = signature; - this.publicKey = publicKey; - } - - public String getTotal() { - return total; - } - - public String getSignature() { - return signature; - } - - public String getPublicKey() { - return publicKey; - } + public record DonationStatement(String total, String signature, String publicKey) { } public static final class HttpStatusException extends IOException {