lsd0009

LSD0009: The GNU Taler Protocol
Log | Files | Refs | README

commit 33e8242f0c0d4db84f57b292e91c43d4dda039a4
parent ba33758e6f7ab5020785634ad4ba026c89443c9c
Author: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Date:   Sat, 25 Jan 2025 16:17:20 +0100

-update to changes for struct TALER_WithdrawRequestPS

Diffstat:
Mdraft-guetschow-taler-protocol.md | 14++++++++------
Mdraft-guetschow-taler-protocol.xml | 175++++++++++++++++++++++++++++++++++++++++---------------------------------------
2 files changed, 96 insertions(+), 93 deletions(-)

diff --git a/draft-guetschow-taler-protocol.md b/draft-guetschow-taler-protocol.md @@ -340,6 +340,8 @@ out = (data == exp) # The Taler Crypto Protocol +// todo: explain persist, check + ## Withdrawal The wallet creates `n > 0` coins and requests `n` signatures from the Exchange, @@ -385,14 +387,14 @@ persist *(coin, blind_secret, coin_sig) where `msg` is formed as follows: ~~~ -msg = bigEndian(32, 145) | bigEndian(32, 1200) /* TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW */ - | bigEndianAmount(sum(*denom.value)) | bigEndianAmount(sum(*denom.fee_withdrawal)) - | SHA-512( *SHA-512(SHA-512(denom.pub) | SHA-512(bigEndian(32, 0x1) | b | bytes(b))) ) - | bigEndian(8, 0x00) | bigEndian(32, 0x00) +commit = reserve.pub + | bigEndianAmount(sum(*denom.value)) | bigEndianAmount(sum(*denom.fee_withdrawal)) + | SHA-512( *SHA-512(SHA-512(denom.pub) | SHA-512(bigEndian(32, 0x1) | b | bytes(b))) ) + | bigEndian(32, 0x00) | bigEndian(32, 0x00) +msg = bigEndian(32, 40) | bigEndian(32, 1200) /* TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW */ + | SHA-512(commit) ~~~ -// todo: do we really want a uint8_t before a uint32_t? - (for RSA, without age-restriction) ### Implementation Details diff --git a/draft-guetschow-taler-protocol.xml b/draft-guetschow-taler-protocol.xml @@ -29,7 +29,7 @@ </address> </author> - <date year="2025" month="January" day="24"/> + <date year="2025" month="January" day="25"/> <workgroup>independent</workgroup> @@ -371,6 +371,8 @@ out = (data == exp) </section> <section anchor="the-taler-crypto-protocol"><name>The Taler Crypto Protocol</name> +<t>// todo: explain persist, check</t> + <section anchor="withdrawal"><name>Withdrawal</name> <t>The wallet creates <spanx style="verb">n &gt; 0</spanx> coins and requests <spanx style="verb">n</spanx> signatures from the Exchange, @@ -416,14 +418,14 @@ persist *(coin, blind_secret, coin_sig) <t>where <spanx style="verb">msg</spanx> is formed as follows:</t> <figure><artwork><![CDATA[ -msg = bigEndian(32, 145) | bigEndian(32, 1200) /* TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW */ - | bigEndianAmount(sum(*denom.value)) | bigEndianAmount(sum(*denom.fee_withdrawal)) - | SHA-512( *SHA-512(SHA-512(denom.pub) | SHA-512(bigEndian(32, 0x1) | b | bytes(b))) ) - | bigEndian(8, 0x00) | bigEndian(32, 0x00) +commit = reserve.pub + | bigEndianAmount(sum(*denom.value)) | bigEndianAmount(sum(*denom.fee_withdrawal)) + | SHA-512( *SHA-512(SHA-512(denom.pub) | SHA-512(bigEndian(32, 0x1) | b | bytes(b))) ) + | bigEndian(32, 0x00) | bigEndian(32, 0x00) +msg = bigEndian(32, 40) | bigEndian(32, 1200) /* TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW */ + | SHA-512(commit) ]]></artwork></figure> -<t>// todo: do we really want a uint8_t before a uint32_t?</t> - <t>(for RSA, without age-restriction)</t> <section anchor="implementation-details"><name>Implementation Details</name> @@ -551,7 +553,7 @@ for coinIdx in 0..n-1: -<?line 423?> +<?line 425?> <section anchor="change-log"><name>Change log</name> @@ -569,88 +571,87 @@ Education and Research (BMBF) within the project Concrete Contracts.</t> </back> <!-- ##markdown-source: -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 -pfx/AG6OOdPaKgAA +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 -->