lsd0009

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

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:
Mdraft-guetschow-taler-protocol.xml | 199++++++++++++++++++++++++++++++++++++++++---------------------------------------
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 &lt;= *? &lt;= n</spanx>.</t> +where <spanx style="verb">?*</spanx> denotes the index number <spanx style="verb">0 &lt;= ?* &lt; 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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 -->