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:
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 > 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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
+H4sIAAAAAAAAA81aW3fbyA1+56/AOi+UK8qS7HgTNcqp40vsE1vZYzubh6wb
+UeRIYk2RKi++bNb7y/rWP9YPmCFFykrsNNl2dRKLGmIADPABAwzpOI511aNN
+y8qCLFQ9WjufKno9eEfnbqgS+imJs9iLwzXLj73InYHCT9xx5kxylaXeNL52
+MiZ05obQ8txMTeLktkdBNI4tK5gnPcqSPM267fbzdte6jpPLSRLnc6bw1Vzh
+T5RZaZYod1Yfu1S3oPZ7FpFDIkeuvOR2nsWTxJ1Pb2VAeW46lau5ezvDzNSy
+nlypKFc96wlRouZxj6ZZNk97GxuTIGtNojxSWStOJhth6rehWAvDG0wcQv80
+W5Dj/gryDcty82waJ9DNgWQibZyT4DIO3YBe//tf2jxyDxN7dP5uj/YSlWJl
+9C4KrlSSBtktxWM6V940isN4civU7miUqCueUNDLMBtIQbFDFc6mcZj9ioEW
+ddpy0wOrXo3ci33os+e0O+3t52YkjzJ2zGuVzNxIC1MzNwh7NNN6t0q3/i3L
+HV+za/nKsqIYczJozc44PdjttouLTnvLXD59tv3cXG53N2X08M3eAbR4e9Tq
+tPGv/ePG8x+fOZvO9lbX6WyByvnx4+YWCM8Oz0q67Xb32cbg6Oy8dXD001mr
+86ztbAFIgFOpg2U5jgNLwQaul1nWLx/o/NV7+uVC35gFvh9C6yd0hCXHfu5l
+QRzVyF6pazdRlE3dDH+ClADwnLFDuE6zIAyJkeoEEWN7AlOk5EY+zdxbWDLK
+3CAilSRxkrasd6kisLmN84Ti64iSIL38gaUP4szVkh0arrkjb21IsGgMiEGo
+ojDIVOKG7NsgmtAQFENSEfvOJzelnbPdoyP6IPa+YB4u/UajOg8owzEXiSCG
k0vXQTalEdOPgiy1bxr1GbMgCmaQGuWzEWIcU5iMIuVhkW5yS1nMMYMlszlk
-Rh5mwTxUhEEvSFlQECHOMftGxNyC92PkMN03CQome5EfuJHd2W7SssDONoXK
+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
-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
-pfx/AG6OOdPaKgAA
+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
-->