commit f7b4c68be6c17c8bc68937fe82b3409e74bce15d
parent 9bb8956b87665e1fecb6fc571c945f4e57264521
Author: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Date: Mon, 26 May 2025 10:56:42 +0200
-update xml
Diffstat:
1 file changed, 100 insertions(+), 99 deletions(-)
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="27"/>
+ <date year="2025" month="February" day="03"/>
<workgroup>independent</workgroup>
@@ -376,8 +376,7 @@ out = (data == exp)
</section>
<section anchor="the-taler-crypto-protocol"><name>The Taler Crypto Protocol</name>
-<t>// todo: explain persist, check
-// todo: add KYC check</t>
+<t>// todo: explain persist, check</t>
<section anchor="withdrawal"><name>Withdrawal</name>
@@ -386,7 +385,7 @@ attributing value to the coins according to <spanx style="verb">n</spanx> chosen
The total value and withdrawal fee (defined by the Exchange per denomination)
must be smaller or equal to the amount stored in the single reserve used for withdrawal.
The symbol <spanx style="verb">*</spanx> in front of a certain part means that it is repeated <spanx style="verb">n</spanx> times for the <spanx style="verb">n</spanx> coins,
-where <spanx style="verb">*?</spanx> denotes the index number <spanx style="verb">0 <= *? <= n</spanx>.</t>
+where <spanx style="verb">?*</spanx> denotes the index number <spanx style="verb">0 <= ?* < n</spanx>.</t>
<figure><artwork><![CDATA[
Wallet Exchange
@@ -399,9 +398,10 @@ persist (reserve, value) |
| (subject: reserve.pub, amount: value) |
| |
| persist (reserve.pub, value)
+ | |
master_secret = random(256) |
persist master_secret |
-*(coin, blind_secret) = GenerateCoin(master_secret, *?) |
+*(coin, blind_secret) = GenerateCoin(master_secret, ?*) |
*blind_coin = RSA-FDH-Blind(SHA-512(coin.pub), blind_secret, denom.pub)
sig = EdDSA-Sign(reserve.priv, msg) |
| |
@@ -410,6 +410,7 @@ sig = EdDSA-Sign(reserve.priv, msg) |
| |
| check *denom.pub known and not withdrawal-expired
| check EdDSA-Verify(reserve.pub, msg, sig)
+ | check reserve KYC status ok or not needed
| check reserve.balance >= sum(*denom.valueAndFee)
| reserve.balance -= sum(*denom.valueAndFee)
| *blind_sig = RSA-FDH-Sign(b, denom.priv)
@@ -427,7 +428,7 @@ persist *(coin, blind_secret, coin_sig)
<figure><artwork><![CDATA[
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))) )
+ | SHA-512( *SHA-512(SHA-512(denom.pub) | bigEndian(32, 0x1) | b) )
| bigEndian(32, 0x00) | bigEndian(32, 0x00)
msg = bigEndian(32, 40) | bigEndian(32, 1200) /* TALER_SIGNATURE_WALLET_RESERVE_WITHDRAW */
| SHA-512(commit)
@@ -454,7 +455,7 @@ Output:
<t><spanx style="verb">coin</spanx> and <spanx style="verb">blind_secret</spanx> are calculated as follows:</t>
<figure><artwork><![CDATA[
-tmp = HKDF(bigEndian(32, *?), master_secret, "taler-withdrawal-coin-derivation", 64)
+tmp = HKDF(bigEndian(32, idx), master_secret, "taler-withdrawal-coin-derivation", 64)
(coin.priv, bks) = (tmp[:32], tmp[32:])
coin.pub = EdDSA-GetPub(coin.priv)
]]></artwork></figure>
@@ -569,7 +570,7 @@ coin.pub = EdDSA-GetPub(coin.priv)
-<?line 442?>
+<?line 443?>
<section anchor="change-log"><name>Change log</name>
@@ -587,97 +588,97 @@ Education and Research (BMBF) within the project Concrete Contracts.</t>
</back>
<!-- ##markdown-source:
-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
-GbApIOdZSnk9zYnMpOiBt6ZR3/4bOR2SA+ouAAA=
+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
-->