Compare commits
44 Commits
71af4c539e
...
7624db4efd
Author | SHA1 | Date | |
---|---|---|---|
7624db4efd | |||
4978b1e966 | |||
b20ddf0c8a | |||
e9eb00e285 | |||
![]() |
3716592add | ||
![]() |
b4f7fef224 | ||
![]() |
0eed0c0de2 | ||
![]() |
afb1b5f902 | ||
![]() |
e24a6369aa | ||
![]() |
a8d9e7e0a6 | ||
![]() |
3d4e580699 | ||
![]() |
ee79f31275 | ||
![]() |
0efc7fd524 | ||
![]() |
23bc09fe3c | ||
![]() |
8f77bda2e0 | ||
![]() |
d7bbf934a0 | ||
![]() |
58eb3d95fc | ||
![]() |
99dd36f7f6 | ||
![]() |
f11cab90ff | ||
![]() |
3d52f52164 | ||
![]() |
fd9ba53c49 | ||
![]() |
10b9023575 | ||
![]() |
5e5004020e | ||
![]() |
e253a5b055 | ||
b244e23859 | |||
7910ca183f | |||
![]() |
fbdc1996a6 | ||
![]() |
900b2d6fd9 | ||
26158fc725 | |||
![]() |
0141a82161 | ||
3cd6156513 | |||
![]() |
544ba42f44 | ||
![]() |
19624fd776 | ||
![]() |
dbc5adba7f | ||
![]() |
bc150693de | ||
![]() |
e02c850acf | ||
![]() |
82bdb6b1aa | ||
![]() |
4db0f22159 | ||
![]() |
6e0e5c9a9d | ||
![]() |
d00456fac7 | ||
![]() |
3f23bede87 | ||
![]() |
bc3ec56373 | ||
![]() |
bccdf7e452 | ||
![]() |
917b2f373e |
6
README
6
README
@ -24,7 +24,7 @@ works fine. that does not work yet. This package also only includes
|
||||
the Taler exchange, not the other components of the system.
|
||||
|
||||
Documentation about Taler can be found at https://taler.net/.
|
||||
Our bug tracker is at https://gnunet.org/bugs/.
|
||||
Our bug tracker is at https://bugs.taler.net/.
|
||||
|
||||
|
||||
Joining GNU
|
||||
@ -43,9 +43,9 @@ Dependencies:
|
||||
|
||||
These are the direct dependencies for running a Taler exchange:
|
||||
|
||||
- GNUnet >= 0.15.4
|
||||
- GNUnet >= 0.16.0
|
||||
- GNU libmicrohttpd >= 0.9.71
|
||||
- Postgres >= 9.5
|
||||
- PostgreSQL >= 13.0
|
||||
|
||||
|
||||
|
||||
|
@ -335,7 +335,7 @@ AS_IF([test $jansson = 0],
|
||||
|
||||
|
||||
# test for postgres
|
||||
AX_LIB_POSTGRESQL([9.3])
|
||||
AX_LIB_POSTGRESQL([13.0])
|
||||
AS_IF([test "x$found_postgresql" = "xyes"],[postgres=true])
|
||||
|
||||
TALER_LIB_LDFLAGS="-export-dynamic -no-undefined"
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit f0deccc31022f5aa0eecfe4c9c173625f4a6d848
|
||||
Subproject commit 24eb905bac48869b4184801571c0728c772b299c
|
2
debian/taler-exchange.install
vendored
2
debian/taler-exchange.install
vendored
@ -2,6 +2,7 @@ usr/bin/taler-exchange-aggregator
|
||||
usr/bin/taler-exchange-closer
|
||||
usr/bin/taler-exchange-dbinit
|
||||
usr/bin/taler-exchange-httpd
|
||||
usr/bin/taler-exchange-secmod-cs
|
||||
usr/bin/taler-exchange-secmod-eddsa
|
||||
usr/bin/taler-exchange-secmod-rsa
|
||||
usr/bin/taler-exchange-transfer
|
||||
@ -13,6 +14,7 @@ usr/share/man/man1/taler-exchange-dbinit*
|
||||
usr/share/man/man1/taler-exchange-httpd*
|
||||
usr/share/man/man1/taler-exchange-secmod-eddsa*
|
||||
usr/share/man/man1/taler-exchange-secmod-rsa*
|
||||
usr/share/man/man1/taler-exchange-secmod-cs*
|
||||
usr/share/man/man1/taler-exchange-transfer*
|
||||
usr/share/man/man1/taler-exchange-wirewatch*
|
||||
usr/share/man/man1/taler-bank*
|
||||
|
4
debian/taler-exchange.postinst
vendored
4
debian/taler-exchange.postinst
vendored
@ -9,6 +9,7 @@ _GROUPNAME=taler-exchange-secmod
|
||||
_DBGROUPNAME=taler-exchange-db
|
||||
_EUSERNAME=taler-exchange-httpd
|
||||
_CLOSERUSERNAME=taler-exchange-closer
|
||||
_CSECUSERNAME=taler-exchange-secmod-cs
|
||||
_RSECUSERNAME=taler-exchange-secmod-rsa
|
||||
_ESECUSERNAME=taler-exchange-secmod-eddsa
|
||||
_AGGRUSERNAME=taler-exchange-aggregator
|
||||
@ -33,6 +34,9 @@ configure)
|
||||
if ! getent passwd ${_RSECUSERNAME} >/dev/null; then
|
||||
adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${TALER_HOME} ${_RSECUSERNAME}
|
||||
fi
|
||||
if ! getent passwd ${_CSECUSERNAME} >/dev/null; then
|
||||
adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${TALER_HOME} ${_CSECUSERNAME}
|
||||
fi
|
||||
if ! getent passwd ${_ESECUSERNAME} >/dev/null; then
|
||||
adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${TALER_HOME} ${_ESECUSERNAME}
|
||||
fi
|
||||
|
@ -1,8 +1,8 @@
|
||||
[Unit]
|
||||
Description=GNU Taler payment system exchange REST API
|
||||
AssertPathExists=/run/taler/exchange-httpd
|
||||
Requires=taler-exchange-httpd.socket taler-exchange-secmod-rsa.service taler-exchange-secmod-eddsa.service
|
||||
After=postgres.service network.target taler-exchange-secmod-rsa.service taler-exchange-secmod-eddsa.service
|
||||
Requires=taler-exchange-httpd.socket taler-exchange-secmod-cs.service taler-exchange-secmod-rsa.service taler-exchange-secmod-eddsa.service
|
||||
After=postgres.service network.target taler-exchange-secmod-cs.service taler-exchange-secmod-rsa.service taler-exchange-secmod-eddsa.service
|
||||
PartOf=taler-exchange.target
|
||||
|
||||
[Service]
|
||||
|
16
debian/taler-exchange.taler-exchange-secmod-cs.service
vendored
Normal file
16
debian/taler-exchange.taler-exchange-secmod-cs.service
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=GNU Taler payment system exchange CS security module
|
||||
AssertPathExists=/run/taler/exchange-secmod-cs
|
||||
PartOf=taler-exchange.target
|
||||
|
||||
[Service]
|
||||
User=taler-exchange-secmod-cs
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=100ms
|
||||
ExecStart=/usr/bin/taler-exchange-secmod-cs -c /etc/taler/taler.conf
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
PrivateTmp=no
|
||||
PrivateDevices=yes
|
||||
ProtectSystem=full
|
@ -111,12 +111,12 @@ The denomination key was chosen because it has the recopu protocol in place that
|
||||
\\\text{generate withdraw secret:}
|
||||
\\ \omega := randombytes(32)
|
||||
\\ \text{persist } \langle \omega, D_p \rangle
|
||||
\\ n_w := \text{HKDF}(256, \omega,\text{"n"})
|
||||
\\ n_w := \text{HKDF}(256, \omega, \text{"n"})
|
||||
\\ & \xrightarrow[\rule{2.5cm}{0pt}]{n_w, D_p} &
|
||||
% generate R
|
||||
\\ & & \text{verify if } D_p \text{ is valid}
|
||||
\\ & & r_0 := \text{HKDF}(256,n_w || d_s, \text{"r0"})
|
||||
\\ & & r_1 := \text{HKDF}(256,n_w || d_s, \text{"r1"})
|
||||
\\ & & r_0 := \text{HKDF}(256,n_w || d_s, \text{"wr0"})
|
||||
\\ & & r_1 := \text{HKDF}(256,n_w || d_s, \text{"wr1"})
|
||||
\\ & & R_0 := r_0G
|
||||
\\ & & R_1 := r_1G
|
||||
\\ & \xleftarrow[\rule{2.5cm}{0pt}]{R_0, R_1} &
|
||||
@ -169,13 +169,13 @@ The denomination key was chosen because it has the recopu protocol in place that
|
||||
\\ & & b := \text{HKDF}(1,n_w || d_s, \text{"b"})
|
||||
\\ & & s \leftarrow \text{GetWithdraw}(n_w, D_p)
|
||||
\\ & & \textbf{if } s = \bot
|
||||
\\ & & \textbf{check !} \text{NonceReuse} (n_w, D_p)
|
||||
\\ & & \textbf{check !} \text{NonceReuse} (n_w, D_p, \rho_W)
|
||||
\\ & & r_b := \text{HKDF}(256,n_w || d_s, \text{"r}b\text{"})
|
||||
% sign coin
|
||||
\\ & & s := r_b + c_b d_s \mod p
|
||||
% the following db operations are atomic
|
||||
\\ & & \text{decrease balance if sufficient and}
|
||||
\\ & & \text{persist NonceUse } \langle n_w, D_p, s \rangle
|
||||
\\ & & \text{persist NonceUse } \langle n_w, D_p, \rho_W \rangle
|
||||
\\ & & \text{persist } \langle D_p, s \rangle
|
||||
\\ & & \textbf{endif}
|
||||
\\ & \xleftarrow[\rule{2.5cm}{0pt}]{b,s} &
|
||||
@ -265,23 +265,21 @@ In the reveal phase, the RSA signing and unblinding is exchanged with Schnorr's
|
||||
\\ \text{coin}_0 = \langle D_{p(0)}, c_s^{(0)}, C_p^{(0)}, \sigma_c^{(0)} \rangle && \text{new denomination keys } d_s, D_P
|
||||
% request r
|
||||
\\ & &
|
||||
\\ \omega := randombytes(32)
|
||||
\\ \text{persist } \langle \omega, D_p \rangle
|
||||
%\\ s_w := \text{HKDF}(256, c_s^{(0)},\text{"n"})
|
||||
\\ n_r := \text{HKDF}(256, \omega,\text{"n"})
|
||||
\\ n_r := randombytes(32)
|
||||
\\ \text{persist } \langle n_r, D_p \rangle
|
||||
% sign with reserve sk
|
||||
\\ & \xrightarrow[\rule{2.5cm}{0pt}]{n_r, D_p} &
|
||||
% generate R
|
||||
\\ & & \text{verify if } D_p \text{ is valid}
|
||||
\\ & & r_0 := \text{HKDF}(256,n_r || d_s, \text{"r0"})
|
||||
\\ & & r_1 := \text{HKDF}(256,n_r || d_s, \text{"r1"})
|
||||
\\ & & r_0 := \text{HKDF}(256, n_r || d_s, \text{"mr0"})
|
||||
\\ & & r_1 := \text{HKDF}(256, n_r || d_s, \text{"mr1"})
|
||||
\\ & & R_0 := r_0G
|
||||
\\ & & R_1 := r_1G
|
||||
\\ & \xleftarrow[\rule{2cm}{0pt}]{R_0, R_1} &
|
||||
% refresh request
|
||||
\\ \textbf{for } i = 1, \dots, \kappa: % generate k derives
|
||||
%\\ s_i \leftarrow \{0,1\}^{256} % seed generation
|
||||
\\ t_i := \text{HKDF}(256, \omega || R_0 || R_1,\text{"t} i \text{"} ) % seed generation
|
||||
\\ t_i := \text{HKDF}(256, c_s^{(0)}, n_r || R_0 || R_1,\text{"t} i \text{"} ) % seed generation
|
||||
\\ X_i := \text{RefreshDerive}(t_i, D_p, C_p^{(0)}, R_0, R_1)
|
||||
\\ (T_i, c_s^{(i)}, C_p^{(i)}, \overline{c_0}, \overline{c_1}):= X_i
|
||||
\\ \textbf{endfor}
|
||||
@ -293,7 +291,7 @@ In the reveal phase, the RSA signing and unblinding is exchanged with Schnorr's
|
||||
\\ \rho_{RC} := \langle h_C, D_p, \text{ } D_{p(0)}, C_p^{(0)}, \sigma_C^{(0)} \rangle
|
||||
\\ \sigma_{RC} := \text{Ed25519.Sign}(c_s^{(0)}, \rho_{RC})
|
||||
\\ \text{Persist refresh-request}
|
||||
\\ \langle \omega, R_0, R_1, \rho_{RC}, \sigma_{RC} \rangle
|
||||
\\ \langle n_r, R_0, R_1, \rho_{RC}, \sigma_{RC} \rangle
|
||||
\\
|
||||
\\ & \textit{Continued in figure \ref{fig:refresh-commit-part2}} &
|
||||
\end{array}$
|
||||
@ -324,7 +322,7 @@ In the reveal phase, the RSA signing and unblinding is exchanged with Schnorr's
|
||||
\\ & & v := \text{Denomination}(D_p)
|
||||
\\ & & \textbf{check } \text{IsOverspending}(C_p^{(0)}, D_ {p(0)}, v)
|
||||
\\ & & \text{verify if } D_p \text{ is valid}
|
||||
\\ & & \textbf{check !} \text{NonceReuse} (n_r, D_p)
|
||||
\\ & & \textbf{check !} \text{NonceReuse} (n_r, D_p, \rho_{RC})
|
||||
\\ & & \textbf{check } \text{Schnorr.Verify}(D_{p(0)}, C_p^{(0)}, \sigma_C^{(0)})
|
||||
\\ & & \text{MarkFractionalSpend}(C_p^{(0)}, v)
|
||||
\\ & & \gamma \leftarrow \{1, \dots, \kappa\}
|
||||
@ -366,7 +364,7 @@ In the reveal phase, the RSA signing and unblinding is exchanged with Schnorr's
|
||||
\\ & & \langle T'_\gamma, \overline{c_0}_\gamma, \overline{c_1}_\gamma, S \rangle := \rho_{RR}
|
||||
\\ & & \langle t_1,\dots,t_{\gamma-1},t_{\gamma+1},\dots,t_\kappa \rangle := S
|
||||
\\ & & \textbf{check } \text{Ed25519.Verify}(C_p^{(0)}, \sigma_L, \rho_L)
|
||||
\\ & & b := \text{HKDF}(1,n_r || d_{s(i)}, \text{"b"})
|
||||
\\ & & b := \text{HKDF}(1, n_r || d_{s(i)}, \text{"b"})
|
||||
\\ & & \textbf{for } i = 1,\dots, \gamma-1, \gamma+1,\dots, \kappa
|
||||
\\ & & X_i := \text{RefreshDerive}(t_i, D_p, C_p^{(0)} \\ &&, R_0, R_1)
|
||||
\\ & & \langle T_i, c_s^{(i)}, C_p^{(i)}, \overline{c_1}_i, \overline{c_2}_i \rangle := X_i
|
||||
@ -377,7 +375,7 @@ In the reveal phase, the RSA signing and unblinding is exchanged with Schnorr's
|
||||
\\ & & h_{\overline{c}}' := H(h_{\overline{c_0}}, h_{\overline{c_1}}, n_r)
|
||||
\\ & & h_C' = H(h_T', h_{\overline{c}}')
|
||||
\\ & & \textbf{check } h_C = h_C'
|
||||
\\ & & r_b := \text{HKDF}(256,n_r || d_s, \text{"r}b\text{"})
|
||||
\\ & & r_b := \text{HKDF}(256, n_r || d_s, \text{"mr}b\text{"})
|
||||
\\ & & \overline{s}_{C_p}^{(\gamma)} = r_b + \overline{c_{b_\gamma}} d_s \mod p
|
||||
\\ & & \text{persist } \langle \rho_L, \sigma_L, S \rangle
|
||||
\\ & \xleftarrow[\rule{2.5cm}{0pt}]{b, \overline{s}_C^{(\gamma)}} &
|
||||
|
177
m4/ax_compare_version.m4
Normal file
177
m4/ax_compare_version.m4
Normal file
@ -0,0 +1,177 @@
|
||||
# ===========================================================================
|
||||
# https://www.gnu.org/software/autoconf-archive/ax_compare_version.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro compares two version strings. Due to the various number of
|
||||
# minor-version numbers that can exist, and the fact that string
|
||||
# comparisons are not compatible with numeric comparisons, this is not
|
||||
# necessarily trivial to do in a autoconf script. This macro makes doing
|
||||
# these comparisons easy.
|
||||
#
|
||||
# The six basic comparisons are available, as well as checking equality
|
||||
# limited to a certain number of minor-version levels.
|
||||
#
|
||||
# The operator OP determines what type of comparison to do, and can be one
|
||||
# of:
|
||||
#
|
||||
# eq - equal (test A == B)
|
||||
# ne - not equal (test A != B)
|
||||
# le - less than or equal (test A <= B)
|
||||
# ge - greater than or equal (test A >= B)
|
||||
# lt - less than (test A < B)
|
||||
# gt - greater than (test A > B)
|
||||
#
|
||||
# Additionally, the eq and ne operator can have a number after it to limit
|
||||
# the test to that number of minor versions.
|
||||
#
|
||||
# eq0 - equal up to the length of the shorter version
|
||||
# ne0 - not equal up to the length of the shorter version
|
||||
# eqN - equal up to N sub-version levels
|
||||
# neN - not equal up to N sub-version levels
|
||||
#
|
||||
# When the condition is true, shell commands ACTION-IF-TRUE are run,
|
||||
# otherwise shell commands ACTION-IF-FALSE are run. The environment
|
||||
# variable 'ax_compare_version' is always set to either 'true' or 'false'
|
||||
# as well.
|
||||
#
|
||||
# Examples:
|
||||
#
|
||||
# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8])
|
||||
# AX_COMPARE_VERSION([3.15],[lt],[3.15.8])
|
||||
#
|
||||
# would both be true.
|
||||
#
|
||||
# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8])
|
||||
# AX_COMPARE_VERSION([3.15],[gt],[3.15.8])
|
||||
#
|
||||
# would both be false.
|
||||
#
|
||||
# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8])
|
||||
#
|
||||
# would be true because it is only comparing two minor versions.
|
||||
#
|
||||
# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15])
|
||||
#
|
||||
# would be true because it is only comparing the lesser number of minor
|
||||
# versions of the two values.
|
||||
#
|
||||
# Note: The characters that separate the version numbers do not matter. An
|
||||
# empty string is the same as version 0. OP is evaluated by autoconf, not
|
||||
# configure, so must be a string, not a variable.
|
||||
#
|
||||
# The author would like to acknowledge Guido Draheim whose advice about
|
||||
# the m4_case and m4_ifvaln functions make this macro only include the
|
||||
# portions necessary to perform the specific comparison specified by the
|
||||
# OP argument in the final configure script.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Tim Toolan <toolan@ele.uri.edu>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 13
|
||||
|
||||
dnl #########################################################################
|
||||
AC_DEFUN([AX_COMPARE_VERSION], [
|
||||
AC_REQUIRE([AC_PROG_AWK])
|
||||
|
||||
# Used to indicate true or false condition
|
||||
ax_compare_version=false
|
||||
|
||||
# Convert the two version strings to be compared into a format that
|
||||
# allows a simple string comparison. The end result is that a version
|
||||
# string of the form 1.12.5-r617 will be converted to the form
|
||||
# 0001001200050617. In other words, each number is zero padded to four
|
||||
# digits, and non digits are removed.
|
||||
AS_VAR_PUSHDEF([A],[ax_compare_version_A])
|
||||
A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
|
||||
-e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
|
||||
-e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
|
||||
-e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
|
||||
-e 's/[[^0-9]]//g'`
|
||||
|
||||
AS_VAR_PUSHDEF([B],[ax_compare_version_B])
|
||||
B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
|
||||
-e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
|
||||
-e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
|
||||
-e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
|
||||
-e 's/[[^0-9]]//g'`
|
||||
|
||||
dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary
|
||||
dnl # then the first line is used to determine if the condition is true.
|
||||
dnl # The sed right after the echo is to remove any indented white space.
|
||||
m4_case(m4_tolower($2),
|
||||
[lt],[
|
||||
ax_compare_version=`echo "x$A
|
||||
x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"`
|
||||
],
|
||||
[gt],[
|
||||
ax_compare_version=`echo "x$A
|
||||
x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"`
|
||||
],
|
||||
[le],[
|
||||
ax_compare_version=`echo "x$A
|
||||
x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"`
|
||||
],
|
||||
[ge],[
|
||||
ax_compare_version=`echo "x$A
|
||||
x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"`
|
||||
],[
|
||||
dnl Split the operator from the subversion count if present.
|
||||
m4_bmatch(m4_substr($2,2),
|
||||
[0],[
|
||||
# A count of zero means use the length of the shorter version.
|
||||
# Determine the number of characters in A and B.
|
||||
ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'`
|
||||
ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'`
|
||||
|
||||
# Set A to no more than B's length and B to no more than A's length.
|
||||
A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"`
|
||||
B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"`
|
||||
],
|
||||
[[0-9]+],[
|
||||
# A count greater than zero means use only that many subversions
|
||||
A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
|
||||
B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
|
||||
],
|
||||
[.+],[
|
||||
AC_WARNING(
|
||||
[invalid OP numeric parameter: $2])
|
||||
],[])
|
||||
|
||||
# Pad zeros at end of numbers to make same length.
|
||||
ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`"
|
||||
B="$B`echo $A | sed 's/./0/g'`"
|
||||
A="$ax_compare_version_tmp_A"
|
||||
|
||||
# Check for equality or inequality as necessary.
|
||||
m4_case(m4_tolower(m4_substr($2,0,2)),
|
||||
[eq],[
|
||||
test "x$A" = "x$B" && ax_compare_version=true
|
||||
],
|
||||
[ne],[
|
||||
test "x$A" != "x$B" && ax_compare_version=true
|
||||
],[
|
||||
AC_WARNING([invalid OP parameter: $2])
|
||||
])
|
||||
])
|
||||
|
||||
AS_VAR_POPDEF([A])dnl
|
||||
AS_VAR_POPDEF([B])dnl
|
||||
|
||||
dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE.
|
||||
if test "$ax_compare_version" = "true" ; then
|
||||
m4_ifvaln([$4],[$4],[:])dnl
|
||||
m4_ifvaln([$5],[else $5])dnl
|
||||
fi
|
||||
]) dnl AX_COMPARE_VERSION
|
@ -1,10 +1,10 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_lib_postgresql.html
|
||||
# https://www.gnu.org/software/autoconf-archive/ax_lib_postgresql.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_LIB_POSTGRESQL([MINIMUM-VERSION])
|
||||
# AX_LIB_POSTGRESQL([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
@ -23,28 +23,132 @@
|
||||
# should be in the PATH)
|
||||
#
|
||||
# path - complete path to pg_config utility, use this option if pg_config
|
||||
# can't be found in the PATH
|
||||
# can't be found in the PATH (You could set also PG_CONFIG variable)
|
||||
#
|
||||
# This macro calls:
|
||||
#
|
||||
# AC_SUBST(POSTGRESQL_CPPFLAGS)
|
||||
# AC_SUBST(POSTGRESQL_LDFLAGS)
|
||||
# AC_SUBST(POSTGRESQL_LIBS)
|
||||
# AC_SUBST(POSTGRESQL_VERSION)
|
||||
#
|
||||
# And sets:
|
||||
#
|
||||
# HAVE_POSTGRESQL
|
||||
#
|
||||
# It execute if found ACTION-IF-FOUND (empty by default) and
|
||||
# ACTION-IF-NOT-FOUND (AC_MSG_FAILURE by default) if not found.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Mateusz Loskot <mateusz@loskot.net>
|
||||
# Copyright (c) 2014 Sree Harsha Totakura <sreeharsha@totakura.in>
|
||||
# Copyright (c) 2018 Bastien Roucaries <rouca@debian.org>
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification, are
|
||||
# permitted in any medium without royalty provided the copyright notice
|
||||
# and this notice are preserved. This file is offered as-is, without any
|
||||
# warranty.
|
||||
|
||||
#serial 9
|
||||
#serial 22
|
||||
|
||||
AC_DEFUN([_AX_LIB_POSTGRESQL_OLD],[
|
||||
found_postgresql="no"
|
||||
_AX_LIB_POSTGRESQL_OLD_fail="no"
|
||||
while true; do
|
||||
AC_CACHE_CHECK([for the pg_config program], [ac_cv_path_PG_CONFIG],
|
||||
[AC_PATH_PROGS_FEATURE_CHECK([PG_CONFIG], [pg_config],
|
||||
[[ac_cv_path_PG_CONFIG="";$ac_path_PG_CONFIG --includedir > /dev/null \
|
||||
&& ac_cv_path_PG_CONFIG=$ac_path_PG_CONFIG ac_path_PG_CONFIG_found=:]],
|
||||
[ac_cv_path_PG_CONFIG=""])])
|
||||
PG_CONFIG=$ac_cv_path_PG_CONFIG
|
||||
AS_IF([test "X$PG_CONFIG" = "X"],[break])
|
||||
|
||||
AC_CACHE_CHECK([for the PostgreSQL libraries CPPFLAGS],[ac_cv_POSTGRESQL_CPPFLAGS],
|
||||
[ac_cv_POSTGRESQL_CPPFLAGS="-I`$PG_CONFIG --includedir`" || _AX_LIB_POSTGRESQL_OLD_fail=yes])
|
||||
AS_IF([test "X$_AX_LIB_POSTGRESQL_OLD_fail" = "Xyes"],[break])
|
||||
POSTGRESQL_CPPFLAGS="$ac_cv_POSTGRESQL_CPPFLAGS"
|
||||
|
||||
AC_CACHE_CHECK([for the PostgreSQL libraries LDFLAGS],[ac_cv_POSTGRESQL_LDFLAGS],
|
||||
[ac_cv_POSTGRESQL_LDFLAGS="-L`$PG_CONFIG --libdir`" || _AX_LIB_POSTGRESQL_OLD_fail=yes])
|
||||
AS_IF([test "X$_AX_LIB_POSTGRESQL_OLD_fail" = "Xyes"],[break])
|
||||
POSTGRESQL_LDFLAGS="$ac_cv_POSTGRESQL_LDFLAGS"
|
||||
|
||||
AC_CACHE_CHECK([for the PostgreSQL libraries LIBS],[ac_cv_POSTGRESQL_LIBS],
|
||||
[ac_cv_POSTGRESQL_LIBS="-lpq"])
|
||||
POSTGRESQL_LIBS="$ac_cv_POSTGRESQL_LIBS"
|
||||
|
||||
AC_CACHE_CHECK([for the PostgreSQL version],[ac_cv_POSTGRESQL_VERSION],
|
||||
[
|
||||
ac_cv_POSTGRESQL_VERSION=`$PG_CONFIG --version | sed "s/^PostgreSQL[[[:space:]]][[[:space:]]]*\([[0-9.]][[0-9.]]*\).*/\1/"` \
|
||||
|| _AX_LIB_POSTGRESQL_OLD_fail=yes
|
||||
])
|
||||
AS_IF([test "X$_AX_LIB_POSTGRESQL_OLD_fail" = "Xyes"],[break])
|
||||
POSTGRESQL_VERSION="$ac_cv_POSTGRESQL_VERSION"
|
||||
|
||||
|
||||
dnl
|
||||
dnl Check if required version of PostgreSQL is available
|
||||
dnl
|
||||
AS_IF([test X"$postgresql_version_req" != "X"],[
|
||||
AC_MSG_CHECKING([if PostgreSQL version $POSTGRESQL_VERSION is >= $postgresql_version_req])
|
||||
AX_COMPARE_VERSION([$POSTGRESQL_VERSION],[ge],[$postgresql_version_req],
|
||||
[found_postgresql_req_version=yes],[found_postgresql_req_version=no])
|
||||
AC_MSG_RESULT([$found_postgresql_req_version])
|
||||
])
|
||||
AS_IF([test "Xfound_postgresql_req_version" = "Xno"],[break])
|
||||
|
||||
found_postgresql="yes"
|
||||
break
|
||||
done
|
||||
])
|
||||
|
||||
AC_DEFUN([_AX_LIB_POSTGRESQL_PKG_CONFIG],
|
||||
[
|
||||
AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||
found_postgresql=no
|
||||
|
||||
while true; do
|
||||
PKG_PROG_PKG_CONFIG
|
||||
AS_IF([test X$PKG_CONFIG = X],[break])
|
||||
|
||||
_AX_LIB_POSTGRESQL_PKG_CONFIG_fail=no;
|
||||
AS_IF([test "X$postgresql_version_req" = "X"],
|
||||
[PKG_CHECK_EXISTS([libpq],[found_postgresql_pkg_config=yes],[found_postgresql=no])],
|
||||
[PKG_CHECK_EXISTS([libpq >= "$postgresql_version_req"],
|
||||
[found_postgresql=yes],[found_postgresql=no])])
|
||||
AS_IF([test "X$found_postgresql" = "no"],[break])
|
||||
|
||||
AC_CACHE_CHECK([for the PostgreSQL libraries CPPFLAGS],[ac_cv_POSTGRESQL_CPPFLAGS],
|
||||
[ac_cv_POSTGRESQL_CPPFLAGS="`$PKG_CONFIG libpq --cflags-only-I`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=yes])
|
||||
AS_IF([test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes"],[break])
|
||||
POSTGRESQL_CPPFLAGS="$ac_cv_POSTGRESQL_CPPFLAGS"
|
||||
|
||||
|
||||
AC_CACHE_CHECK([for the PostgreSQL libraries LDFLAGS],[ac_cv_POSTGRESQL_LDFLAGS],
|
||||
[ac_cv_POSTGRESQL_LDFLAGS="`$PKG_CONFIG libpq --libs-only-L --libs-only-other`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=yes])
|
||||
AS_IF([test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes"],[break])
|
||||
POSTGRESQL_LDFLAGS="$ac_cv_POSTGRESQL_LDFLAGS"
|
||||
|
||||
|
||||
AC_CACHE_CHECK([for the PostgreSQL libraries LIBS],[ac_cv_POSTGRESQL_LIBS],
|
||||
[ac_cv_POSTGRESQL_LIBS="`$PKG_CONFIG libpq --libs-only-l`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=ye])
|
||||
AS_IF([test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes"],[break])
|
||||
POSTGRESQL_LIBS="$ac_cv_POSTGRESQL_LIBS"
|
||||
|
||||
dnl already checked by exist but need to be recovered
|
||||
AC_CACHE_CHECK([for the PostgreSQL version],[ac_cv_POSTGRESQL_VERSION],
|
||||
[ac_cv_POSTGRESQL_VERSION="`$PKG_CONFIG libpq --modversion`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=yes])
|
||||
AS_IF([test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes"],[break])
|
||||
POSTGRESQL_VERSION="$ac_cv_POSTGRESQL_VERSION"
|
||||
|
||||
found_postgresql=yes
|
||||
break;
|
||||
done
|
||||
|
||||
])
|
||||
|
||||
|
||||
|
||||
AC_DEFUN([AX_LIB_POSTGRESQL],
|
||||
[
|
||||
@ -53,103 +157,91 @@ AC_DEFUN([AX_LIB_POSTGRESQL],
|
||||
[use PostgreSQL library @<:@default=yes@:>@, optionally specify path to pg_config]
|
||||
),
|
||||
[
|
||||
if test "$withval" = "no"; then
|
||||
want_postgresql="no"
|
||||
elif test "$withval" = "yes"; then
|
||||
want_postgresql="yes"
|
||||
else
|
||||
AS_CASE([$withval],
|
||||
[[[nN]][[oO]]],[want_postgresql="no"],
|
||||
[[[yY]][[eE]][[sS]]],[want_postgresql="yes"],
|
||||
[
|
||||
want_postgresql="yes"
|
||||
PG_CONFIG="$withval"
|
||||
fi
|
||||
])
|
||||
],
|
||||
[want_postgresql="yes"]
|
||||
)
|
||||
|
||||
POSTGRESQL_CPPFLAGS=""
|
||||
POSTGRESQL_LDFLAGS=""
|
||||
AC_ARG_VAR([POSTGRESQL_CPPFLAGS],[cpp flags for PostgreSQL overriding detected flags])
|
||||
AC_ARG_VAR([POSTGRESQL_LIBFLAGS],[libs for PostgreSQL overriding detected flags])
|
||||
AC_ARG_VAR([POSTGRESQL_LDFLAGS],[linker flags for PostgreSQL overriding detected flags])
|
||||
|
||||
# populate cache
|
||||
AS_IF([test "X$POSTGRESQL_CPPFLAGS" != X],[ac_cv_POSTGRESQL_CPPFLAGS="$POSTGRESQL_CPPFLAGS"])
|
||||
AS_IF([test "X$POSTGRESQL_LDFLAGS" != X],[ac_cv_POSTGRESQL_LDFLAGS="$POSTGRESQL_LDFLAGS"])
|
||||
AS_IF([test "X$POSTGRESQL_LIBS" != X],[ac_cv_POSTGRESQL_LIBS="$POSTGRESQL_LIBS"])
|
||||
|
||||
postgresql_version_req=ifelse([$1], [], [], [$1])
|
||||
found_postgresql="no"
|
||||
|
||||
POSTGRESQL_VERSION=""
|
||||
|
||||
dnl
|
||||
dnl Check PostgreSQL libraries (libpq)
|
||||
dnl
|
||||
AS_IF([test X"$want_postgresql" = "Xyes"],[
|
||||
_AX_LIB_POSTGRESQL_PKG_CONFIG
|
||||
|
||||
if test "$want_postgresql" = "yes"; then
|
||||
|
||||
if test -z "$PG_CONFIG" -o test; then
|
||||
AC_PATH_PROG([PG_CONFIG], [pg_config], [])
|
||||
fi
|
||||
AS_IF([test X"$found_postgresql" = "Xno"],
|
||||
[_AX_LIB_POSTGRESQL_OLD])
|
||||
|
||||
if test ! -x "$PG_CONFIG"; then
|
||||
dnl AC_MSG_ERROR([$PG_CONFIG does not exist or it is not an exectuable file])
|
||||
PG_CONFIG="no"
|
||||
found_postgresql="no"
|
||||
fi
|
||||
AS_IF([test X"$found_postgresql" = Xyes],[
|
||||
_AX_LIB_POSTGRESQL_OLD_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $POSTGRESQL_CPPFLAGS"
|
||||
_AX_LIB_POSTGRESQL_OLD_LDFLAGS="$LDFLAGS"
|
||||
LDFLAGS="$LDFLAGS $POSTGRESQL_LDFLAGS"
|
||||
_AX_LIB_POSTGRESQL_OLD_LIBS="$LIBS"
|
||||
LIBS="$LIBS $POSTGRESQL_LIBS"
|
||||
while true; do
|
||||
dnl try to compile
|
||||
AC_CHECK_HEADER([libpq-fe.h],[],[found_postgresql=no])
|
||||
AS_IF([test "X$found_postgresql" = "Xno"],[break])
|
||||
dnl try now to link
|
||||
AC_CACHE_CHECK([for the PostgreSQL library linking is working],[ac_cv_postgresql_found],
|
||||
[
|
||||
AC_LINK_IFELSE([
|
||||
AC_LANG_PROGRAM(
|
||||
[
|
||||
#include <libpq-fe.h>
|
||||
],
|
||||
[[
|
||||
char conninfo[]="dbname = postgres";
|
||||
PGconn *conn;
|
||||
conn = PQconnectdb(conninfo);
|
||||
]]
|
||||
)
|
||||
],[ac_cv_postgresql_found=yes],
|
||||
[ac_cv_postgresql_found=no])
|
||||
])
|
||||
found_postgresql="$ac_cv_postgresql_found"
|
||||
AS_IF([test "X$found_postgresql" = "Xno"],[break])
|
||||
break
|
||||
done
|
||||
CPPFLAGS="$_AX_LIB_POSTGRESQL_OLD_CPPFLAGS"
|
||||
LDFLAGS="$_AX_LIB_POSTGRESQL_OLD_LDFLAGS"
|
||||
LIBS="$_AX_LIB_POSTGRESQL_OLD_LIBS"
|
||||
])
|
||||
|
||||
if test "$PG_CONFIG" != "no"; then
|
||||
AC_MSG_CHECKING([for PostgreSQL libraries])
|
||||
|
||||
POSTGRESQL_CPPFLAGS="-I`$PG_CONFIG --includedir`"
|
||||
POSTGRESQL_LDFLAGS="-L`$PG_CONFIG --libdir`"
|
||||
|
||||
POSTGRESQL_VERSION=`$PG_CONFIG --version | sed -e 's#PostgreSQL ##' | awk '{print $1}'`
|
||||
|
||||
AS_IF([test "x$found_postgresql" = "xyes"],[
|
||||
AC_DEFINE([HAVE_POSTGRESQL], [1],
|
||||
[Define to 1 if PostgreSQL libraries are available])
|
||||
|
||||
found_postgresql="yes"
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
found_postgresql="no"
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl Check if required version of PostgreSQL is available
|
||||
dnl
|
||||
|
||||
|
||||
postgresql_version_req=ifelse([$1], [], [], [$1])
|
||||
|
||||
if test "$found_postgresql" = "yes" -a -n "$postgresql_version_req"; then
|
||||
|
||||
AC_MSG_CHECKING([if PostgreSQL version $POSTGRESQL_VERSION is >= $postgresql_version_req])
|
||||
|
||||
dnl Decompose required version string of PostgreSQL
|
||||
dnl and calculate its number representation
|
||||
postgresql_version_req_major=`expr $postgresql_version_req : '\([[0-9]]*\)'`
|
||||
postgresql_version_req_minor=`expr $postgresql_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
|
||||
postgresql_version_req_micro=`expr $postgresql_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
|
||||
if test "x$postgresql_version_req_micro" = "x"; then
|
||||
postgresql_version_req_micro="0"
|
||||
fi
|
||||
|
||||
postgresql_version_req_number=`expr $postgresql_version_req_major \* 1000000 \
|
||||
\+ $postgresql_version_req_minor \* 1000 \
|
||||
\+ $postgresql_version_req_micro`
|
||||
|
||||
dnl Decompose version string of installed PostgreSQL
|
||||
dnl and calculate its number representation
|
||||
postgresql_version_major=`expr $POSTGRESQL_VERSION : '\([[0-9]]*\)'`
|
||||
postgresql_version_minor=`expr $POSTGRESQL_VERSION : '[[0-9]]*\.\([[0-9]]*\)'`
|
||||
postgresql_version_micro=`expr $POSTGRESQL_VERSION : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
|
||||
if test "x$postgresql_version_micro" = "x"; then
|
||||
postgresql_version_micro="0"
|
||||
fi
|
||||
|
||||
postgresql_version_number=`expr $postgresql_version_major \* 1000000 \
|
||||
\+ $postgresql_version_minor \* 1000 \
|
||||
\+ $postgresql_version_micro`
|
||||
|
||||
postgresql_version_check=`expr $postgresql_version_number \>\= $postgresql_version_req_number`
|
||||
if test "$postgresql_version_check" = "1"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
fi
|
||||
[Define to 1 if PostgreSQL libraries are available])])
|
||||
])
|
||||
|
||||
AC_SUBST([POSTGRESQL_VERSION])
|
||||
AC_SUBST([POSTGRESQL_CPPFLAGS])
|
||||
AC_SUBST([POSTGRESQL_LDFLAGS])
|
||||
AC_SUBST([POSTGRESQL_LIBS])
|
||||
|
||||
AS_IF([test "x$found_postgresql" = "xyes"],
|
||||
[ifelse([$2], , :, [$2])],
|
||||
[ifelse([$3], , AS_IF([test X"$want_postgresql" = "Xyes"],[AC_MSG_ERROR([Library requirements (PostgreSQL) not met.])],[:]), [$3])])
|
||||
|
||||
])
|
||||
|
@ -193,14 +193,16 @@ check_SCRIPTS = \
|
||||
test-sync.sh
|
||||
|
||||
.NOTPARALLEL:
|
||||
# Disabled for now: need working wallet first!
|
||||
# revocation test disabled for now: need working wallet first!
|
||||
# TESTS = $(check_SCRIPTS)
|
||||
TESTS = \
|
||||
test-auditor.sh \
|
||||
test-sync.sh
|
||||
|
||||
EXTRA_DIST = \
|
||||
taler-auditor.in \
|
||||
taler-helper-auditor-render.py \
|
||||
auditor.conf \
|
||||
test-auditor.conf \
|
||||
test-sync-in.conf \
|
||||
test-sync-out.conf \
|
||||
generate-auditor-basedb.sh \
|
||||
@ -209,8 +211,10 @@ EXTRA_DIST = \
|
||||
generate-auditor-basedb-template.conf \
|
||||
$(check_SCRIPTS) \
|
||||
auditor-basedb.age \
|
||||
auditor-basedb.conf \
|
||||
auditor-basedb.sql \
|
||||
auditor-basedb.mpub \
|
||||
revoke-basedb.age \
|
||||
revoke-basedb.conf \
|
||||
revoke-basedb.sql \
|
||||
revoke-basedb.mpub
|
||||
|
@ -1 +1 @@
|
||||
1638356946
|
||||
1646042841
|
||||
|
186
src/auditor/auditor-basedb.conf
Normal file
186
src/auditor/auditor-basedb.conf
Normal file
@ -0,0 +1,186 @@
|
||||
[arm]
|
||||
CONFIG = /research/taler/exchange/src/auditor/auditor-basedb.conf
|
||||
|
||||
[benchmark]
|
||||
MERCHANT_DETAILS = merchant_details.json
|
||||
BANK_DETAILS = bank_details.json
|
||||
|
||||
[coin_kudos_10]
|
||||
rsa_keysize = 1024
|
||||
CIPHER = RSA
|
||||
fee_refund = TESTKUDOS:0.01
|
||||
fee_refresh = TESTKUDOS:0.03
|
||||
fee_deposit = TESTKUDOS:0.01
|
||||
fee_withdraw = TESTKUDOS:0.01
|
||||
duration_legal = 3 years
|
||||
duration_spend = 2 years
|
||||
duration_withdraw = 7 days
|
||||
value = TESTKUDOS:10
|
||||
|
||||
[coin_kudos_8]
|
||||
rsa_keysize = 1024
|
||||
CIPHER = RSA
|
||||
fee_refund = TESTKUDOS:0.04
|
||||
fee_refresh = TESTKUDOS:0.03
|
||||
fee_deposit = TESTKUDOS:0.02
|
||||
fee_withdraw = TESTKUDOS:0.05
|
||||
duration_legal = 3 years
|
||||
duration_spend = 2 years
|
||||
duration_withdraw = 7 days
|
||||
value = TESTKUDOS:8
|
||||
|
||||
[coin_kudos_5]
|
||||
rsa_keysize = 1024
|
||||
CIPHER = RSA
|
||||
fee_refund = TESTKUDOS:0.01
|
||||
fee_refresh = TESTKUDOS:0.03
|
||||
fee_deposit = TESTKUDOS:0.01
|
||||
fee_withdraw = TESTKUDOS:0.01
|
||||
duration_legal = 3 years
|
||||
duration_spend = 2 years
|
||||
duration_withdraw = 7 days
|
||||
value = TESTKUDOS:5
|
||||
|
||||
[coin_kudos_4]
|
||||
rsa_keysize = 1024
|
||||
CIPHER = RSA
|
||||
fee_refund = TESTKUDOS:0.02
|
||||
fee_refresh = TESTKUDOS:0.04
|
||||
fee_deposit = TESTKUDOS:0.03
|
||||
fee_withdraw = TESTKUDOS:0.03
|
||||
duration_legal = 3 years
|
||||
duration_spend = 2 years
|
||||
duration_withdraw = 7 days
|
||||
value = TESTKUDOS:4
|
||||
|
||||
[coin_kudos_2]
|
||||
rsa_keysize = 1024
|
||||
CIPHER = RSA
|
||||
fee_refund = TESTKUDOS:0.02
|
||||
fee_refresh = TESTKUDOS:0.04
|
||||
fee_deposit = TESTKUDOS:0.03
|
||||
fee_withdraw = TESTKUDOS:0.03
|
||||
duration_legal = 3 years
|
||||
duration_spend = 2 years
|
||||
duration_withdraw = 7 days
|
||||
value = TESTKUDOS:2
|
||||
|
||||
[coin_kudos_1]
|
||||
rsa_keysize = 1024
|
||||
CIPHER = RSA
|
||||
fee_refund = TESTKUDOS:0.01
|
||||
fee_refresh = TESTKUDOS:0.03
|
||||
fee_deposit = TESTKUDOS:0.02
|
||||
fee_withdraw = TESTKUDOS:0.02
|
||||
duration_legal = 3 years
|
||||
duration_spend = 2 years
|
||||
duration_withdraw = 7 days
|
||||
value = TESTKUDOS:1
|
||||
|
||||
[coin_kudos_ct_10]
|
||||
rsa_keysize = 1024
|
||||
CIPHER = RSA
|
||||
fee_refund = TESTKUDOS:0.01
|
||||
fee_refresh = TESTKUDOS:0.03
|
||||
fee_deposit = TESTKUDOS:0.01
|
||||
fee_withdraw = TESTKUDOS:0.01
|
||||
duration_legal = 3 years
|
||||
duration_spend = 2 years
|
||||
duration_withdraw = 7 days
|
||||
value = TESTKUDOS:0.10
|
||||
|
||||
[coin_kudos_ct_1]
|
||||
rsa_keysize = 1024
|
||||
CIPHER = RSA
|
||||
fee_refund = TESTKUDOS:0.01
|
||||
fee_refresh = TESTKUDOS:0.01
|
||||
fee_deposit = TESTKUDOS:0.01
|
||||
fee_withdraw = TESTKUDOS:0.01
|
||||
duration_legal = 3 years
|
||||
duration_spend = 2 years
|
||||
duration_withdraw = 7 days
|
||||
value = TESTKUDOS:0.01
|
||||
|
||||
[payments-generator]
|
||||
exchange = http://localhost:8081/
|
||||
exchange-admin = http://localhost:18080/
|
||||
exchange_admin = http://localhost:18080/
|
||||
merchant = http://localhost:9966/
|
||||
bank = http://localhost:8082/
|
||||
instance = default
|
||||
currency = TESTKUDOS
|
||||
|
||||
[merchant-exchange-default]
|
||||
CURRENCY = TESTKUDOS
|
||||
EXCHANGE_BASE_URL = http://localhost:8081/
|
||||
MASTER_KEY = TMQ09D9G18Z8TFEABD833SDJ6JQWRYKFHPTWT6DMPQS54ZC66RDG
|
||||
|
||||
[merchant-account-merchant]
|
||||
ACTIVE_default = YES
|
||||
HONOR_default = YES
|
||||
PAYTO_URI = payto://x-taler-bank/localhost/42
|
||||
|
||||
[exchange-accountcredentials-1]
|
||||
PASSWORD = x
|
||||
USERNAME = Exchange
|
||||
WIRE_GATEWAY_AUTH_METHOD = basic
|
||||
WIRE_GATEWAY_URL = http://localhost:8082/taler-wire-gateway/Exchange/
|
||||
|
||||
[exchange-account-1]
|
||||
enable_credit = yes
|
||||
enable_debit = yes
|
||||
PAYTO_URI = payto://x-taler-bank/localhost/Exchange
|
||||
|
||||
[instance-default]
|
||||
NAME = Merchant Inc.
|
||||
KEYFILE = ${TALER_DATA_HOME}/merchant/default.priv
|
||||
|
||||
[taler]
|
||||
CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
|
||||
CURRENCY = TESTKUDOS
|
||||
|
||||
[merchantdb-postgres]
|
||||
CONFIG = postgres:///auditor-basedb
|
||||
|
||||
[merchant]
|
||||
DEFAULT_MAX_WIRE_FEE = TESTKUDOS:0.10
|
||||
KEYFILE = ${TALER_DATA_HOME}/merchant/merchant.priv
|
||||
DEFAULT_MAX_DEPOSIT_FEE = TESTKUDOS:0.1
|
||||
WIREFORMAT = default
|
||||
WIRE_TRANSFER_DELAY = 1 minute
|
||||
FORCE_AUDIT = YES
|
||||
UNIXPATH = ${TALER_RUNTIME_DIR}/merchant.http
|
||||
|
||||
[exchangedb-postgres]
|
||||
CONFIG = postgres:///auditor-basedb
|
||||
|
||||
[exchange]
|
||||
LOOKAHEAD_SIGN = 32 weeks 1 day
|
||||
SIGNKEY_DURATION = 4 weeks
|
||||
MASTER_PUBLIC_KEY = TMQ09D9G18Z8TFEABD833SDJ6JQWRYKFHPTWT6DMPQS54ZC66RDG
|
||||
SIGNKEY_LEGAL_DURATION = 4 weeks
|
||||
UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
|
||||
|
||||
[bank]
|
||||
SERVE = http
|
||||
ALLOW_REGISTRATIONS = YES
|
||||
SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost/2
|
||||
SUGGESTED_EXCHANGE = http://localhost:8081/
|
||||
HTTP_PORT = 8082
|
||||
MAX_DEBT_BANK = TESTKUDOS:100000.0
|
||||
MAX_DEBT = TESTKUDOS:50.0
|
||||
DATABASE = postgres:///taler-auditor-basedb
|
||||
|
||||
[auditordb-postgres]
|
||||
CONFIG = postgres:///taler-auditor-basedb
|
||||
|
||||
[auditor]
|
||||
PUBLIC_KEY = 95FVPHMW4110HTPVSGMT2YMDE2BSGXZEV5WSV0TD1DXMF2RQ5HN0
|
||||
TINY_AMOUNT = TESTKUDOS:0.01
|
||||
BASE_URL = http://localhost:8083/
|
||||
|
||||
[PATHS]
|
||||
TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
|
||||
TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
|
||||
TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
|
||||
TALER_HOME = ${PWD}/generate_auditordb_home/
|
@ -1 +1 @@
|
||||
R8JBA9089F3YRRSQDPWB92CZ5V1V0J1BPVW8J1B0P8VCVH71CYY0
|
||||
TMQ09D9G18Z8TFEABD833SDJ6JQWRYKFHPTWT6DMPQS54ZC66RDG
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -41,9 +41,9 @@ BASEDB=${1:-"auditor-basedb"}
|
||||
# Name of the Postgres database we will use for the script.
|
||||
# Will be dropped, do NOT use anything that might be used
|
||||
# elsewhere
|
||||
TARGET_DB=taler-auditor-basedb
|
||||
export TARGET_DB=${BASEDB}
|
||||
|
||||
WALLET_DB=${BASEDB:-"wallet"}.wdb
|
||||
export WALLET_DB=${BASEDB:-"wallet"}.wdb
|
||||
|
||||
# delete existing wallet database
|
||||
rm -f $WALLET_DB
|
||||
@ -51,7 +51,7 @@ rm -f $WALLET_DB
|
||||
|
||||
# Configuration file will be edited, so we create one
|
||||
# from the template.
|
||||
CONF=generate-auditor-basedb-prod.conf
|
||||
CONF=${BASEDB}.conf
|
||||
cp generate-auditor-basedb-template.conf $CONF
|
||||
|
||||
|
||||
@ -92,8 +92,11 @@ mkdir -p $AUDITOR_PRIV_DIR
|
||||
gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null
|
||||
AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE`
|
||||
|
||||
echo "AUDITOR PUB is $AUDITOR_PUB using file $AUDITOR_PRIV_FILE"
|
||||
|
||||
# patch configuration
|
||||
taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB
|
||||
taler-config -c $CONF -s auditor -o PUBLIC_KEY -V $AUDITOR_PUB
|
||||
taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB
|
||||
taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB
|
||||
taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB
|
||||
@ -120,6 +123,7 @@ TBINPFX=`dirname $TFN`
|
||||
TLIBEXEC=${TBINPFX}/../lib/taler/libexec/
|
||||
taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log &
|
||||
taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log &
|
||||
taler-exchange-secmod-cs -c $CONF 2> taler-exchange-secmod-cs.log &
|
||||
taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
|
||||
taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
|
||||
taler-exchange-wirewatch -c $CONF 2> taler-exchange-wirewatch.log &
|
||||
@ -237,7 +241,6 @@ echo "Final clean up"
|
||||
dropdb $TARGET_DB
|
||||
|
||||
rm -rf $DATA_DIR || true
|
||||
rm $CONF
|
||||
|
||||
echo "====================================="
|
||||
echo " Finished generation of $BASEDB"
|
||||
|
@ -32,7 +32,7 @@ export BASEDB=${1:-"revoke-basedb"}
|
||||
# Name of the Postgres database we will use for the script.
|
||||
# Will be dropped, do NOT use anything that might be used
|
||||
# elsewhere
|
||||
export TARGET_DB=taler-auditor-revokedb
|
||||
export TARGET_DB=${BASEDB}
|
||||
TMP_DIR=`mktemp -d revocation-tmp-XXXXXX`
|
||||
export WALLET_DB=wallet-revocation.json
|
||||
rm -f $WALLET_DB
|
||||
@ -109,7 +109,9 @@ TLIBEXEC=${TBINPFX}/../lib/taler/libexec/
|
||||
taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log &
|
||||
SIGNKEY_HELPER_PID=$!
|
||||
taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log &
|
||||
DENOM_HELPER_PID=$!
|
||||
RSA_DENOM_HELPER_PID=$!
|
||||
taler-exchange-secmod-cs -c $CONF 2> taler-exchange-secmod-cs.log &
|
||||
CS_DENOM_HELPER_PID=$!
|
||||
taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
|
||||
EXCHANGE_PID=$!
|
||||
taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
|
||||
@ -277,12 +279,15 @@ export TIMETRAVEL="--timetravel=604800000000"
|
||||
|
||||
echo "Launching exchange 1 week in the future"
|
||||
kill -TERM $EXCHANGE_PID
|
||||
kill -TERM $DENOM_HELPER_PID
|
||||
kill -TERM $RSA_DENOM_HELPER_PID
|
||||
kill -TERM $CS_DENOM_HELPER_PID
|
||||
kill -TERM $SIGNKEY_HELPER_PID
|
||||
taler-exchange-secmod-eddsa $TIMETRAVEL -c $CONF 2> taler-exchange-secmod-eddsa.log &
|
||||
SIGNKEY_HELPER_PID=$!
|
||||
taler-exchange-secmod-rsa $TIMETRAVEL -c $CONF 2> taler-exchange-secmod-rsa.log &
|
||||
DENOM_HELPER_PID=$!
|
||||
RSA_DENOM_HELPER_PID=$!
|
||||
taler-exchange-secmod-cs $TIMETRAVEL -c $CONF 2> taler-exchange-secmod-cs.log &
|
||||
CS_DENOM_HELPER_PID=$!
|
||||
taler-exchange-httpd $TIMETRAVEL -c $CONF 2> taler-exchange-httpd.log &
|
||||
export EXCHANGE_PID=$!
|
||||
|
||||
|
@ -172,7 +172,7 @@ add_denomination (
|
||||
|
||||
enum GNUNET_DB_QueryStatus
|
||||
TALER_ARL_get_denomination_info_by_hash (
|
||||
const struct TALER_DenominationHash *dh,
|
||||
const struct TALER_DenominationHashP *dh,
|
||||
const struct TALER_DenominationKeyValidityPS **issue)
|
||||
{
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
@ -186,6 +186,7 @@ TALER_ARL_get_denomination_info_by_hash (
|
||||
NULL);
|
||||
if (0 > qs)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
*issue = NULL;
|
||||
return qs;
|
||||
}
|
||||
@ -211,6 +212,7 @@ TALER_ARL_get_denomination_info_by_hash (
|
||||
&issue);
|
||||
if (qs <= 0)
|
||||
{
|
||||
GNUNET_break (qs >= 0);
|
||||
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||
"Denomination %s not found\n",
|
||||
@ -245,9 +247,9 @@ enum GNUNET_DB_QueryStatus
|
||||
TALER_ARL_get_denomination_info (
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_DenominationKeyValidityPS **issue,
|
||||
struct TALER_DenominationHash *dh)
|
||||
struct TALER_DenominationHashP *dh)
|
||||
{
|
||||
struct TALER_DenominationHash hc;
|
||||
struct TALER_DenominationHashP hc;
|
||||
|
||||
if (NULL == dh)
|
||||
dh = &hc;
|
||||
@ -558,7 +560,7 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
|
||||
"BASE_URL");
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
if (GNUNET_YES == GNUNET_is_zero (&TALER_ARL_master_pub))
|
||||
if (GNUNET_is_zero (&TALER_ARL_master_pub))
|
||||
{
|
||||
/* -m option not given, try configuration */
|
||||
char *master_public_key_str;
|
||||
@ -596,47 +598,16 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
|
||||
"Taler auditor running for exchange master public key %s\n",
|
||||
TALER_B2S (&TALER_ARL_master_pub));
|
||||
|
||||
if (GNUNET_YES == GNUNET_is_zero (&TALER_ARL_auditor_pub))
|
||||
if (GNUNET_is_zero (&TALER_ARL_auditor_pub))
|
||||
{
|
||||
/* try loading private key and deriving public key */
|
||||
char *fn;
|
||||
|
||||
if (GNUNET_OK ==
|
||||
GNUNET_CONFIGURATION_get_value_filename (c,
|
||||
"auditor",
|
||||
"AUDITOR_PRIV_FILE",
|
||||
&fn))
|
||||
{
|
||||
struct TALER_AuditorPrivateKeyP auditor_priv;
|
||||
|
||||
if (GNUNET_OK ==
|
||||
GNUNET_CRYPTO_eddsa_key_from_file (fn,
|
||||
GNUNET_NO, /* do NOT create it! */
|
||||
&auditor_priv.eddsa_priv))
|
||||
{
|
||||
GNUNET_CRYPTO_eddsa_key_get_public (&auditor_priv.eddsa_priv,
|
||||
&TALER_ARL_auditor_pub.eddsa_pub);
|
||||
}
|
||||
GNUNET_free (fn);
|
||||
}
|
||||
}
|
||||
|
||||
if (GNUNET_YES == GNUNET_is_zero (&TALER_ARL_auditor_pub))
|
||||
{
|
||||
/* private key not available, try configuration for public key */
|
||||
char *auditor_public_key_str;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
if (GNUNET_OK ==
|
||||
GNUNET_CONFIGURATION_get_value_string (c,
|
||||
"auditor",
|
||||
"PUBLIC_KEY",
|
||||
&auditor_public_key_str))
|
||||
{
|
||||
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
||||
"auditor",
|
||||
"PUBLIC_KEY");
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_CRYPTO_eddsa_public_key_from_string (
|
||||
auditor_public_key_str,
|
||||
@ -652,6 +623,44 @@ TALER_ARL_init (const struct GNUNET_CONFIGURATION_Handle *c)
|
||||
}
|
||||
GNUNET_free (auditor_public_key_str);
|
||||
}
|
||||
}
|
||||
|
||||
if (GNUNET_is_zero (&TALER_ARL_auditor_pub))
|
||||
{
|
||||
/* public key not configured */
|
||||
/* try loading private key and deriving public key */
|
||||
char *fn;
|
||||
|
||||
if (GNUNET_OK ==
|
||||
GNUNET_CONFIGURATION_get_value_filename (c,
|
||||
"auditor",
|
||||
"AUDITOR_PRIV_FILE",
|
||||
&fn))
|
||||
{
|
||||
struct TALER_AuditorPrivateKeyP auditor_priv;
|
||||
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||
"Loading offline private key from `%s' to get auditor public key\n",
|
||||
fn);
|
||||
if (GNUNET_OK ==
|
||||
GNUNET_CRYPTO_eddsa_key_from_file (fn,
|
||||
GNUNET_NO, /* do NOT create it! */
|
||||
&auditor_priv.eddsa_priv))
|
||||
{
|
||||
GNUNET_CRYPTO_eddsa_key_get_public (&auditor_priv.eddsa_priv,
|
||||
&TALER_ARL_auditor_pub.eddsa_pub);
|
||||
}
|
||||
GNUNET_free (fn);
|
||||
}
|
||||
}
|
||||
|
||||
if (GNUNET_is_zero (&TALER_ARL_auditor_pub))
|
||||
{
|
||||
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_INFO,
|
||||
"auditor",
|
||||
"PUBLIC_KEY/AUDITOR_PRIV_FILE");
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
|
||||
if (GNUNET_OK !=
|
||||
TALER_config_get_currency (TALER_ARL_cfg,
|
||||
|
@ -101,7 +101,7 @@ TALER_ARL_report (json_t *array,
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
TALER_ARL_get_denomination_info_by_hash (
|
||||
const struct TALER_DenominationHash *dh,
|
||||
const struct TALER_DenominationHashP *dh,
|
||||
const struct TALER_DenominationKeyValidityPS **issue);
|
||||
|
||||
|
||||
@ -118,7 +118,7 @@ enum GNUNET_DB_QueryStatus
|
||||
TALER_ARL_get_denomination_info (
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_DenominationKeyValidityPS **issue,
|
||||
struct TALER_DenominationHash *dh);
|
||||
struct TALER_DenominationHashP *dh);
|
||||
|
||||
|
||||
/**
|
||||
|
@ -91,6 +91,7 @@ struct Table
|
||||
static struct Table tables[] = {
|
||||
{ .rt = TALER_EXCHANGEDB_RT_DENOMINATIONS},
|
||||
{ .rt = TALER_EXCHANGEDB_RT_DENOMINATION_REVOCATIONS},
|
||||
{ .rt = TALER_EXCHANGEDB_RT_WIRE_TARGETS},
|
||||
{ .rt = TALER_EXCHANGEDB_RT_RESERVES},
|
||||
{ .rt = TALER_EXCHANGEDB_RT_RESERVES_IN},
|
||||
{ .rt = TALER_EXCHANGEDB_RT_RESERVES_CLOSE},
|
||||
@ -202,20 +203,16 @@ transact (void)
|
||||
src->lookup_serial_by_table (src->cls,
|
||||
tables[i].rt,
|
||||
&tables[i].end_serial);
|
||||
if (0 >
|
||||
src->commit (src->cls))
|
||||
return GNUNET_SYSERR;
|
||||
src->rollback (src->cls);
|
||||
if (GNUNET_OK !=
|
||||
dst->start (src->cls,
|
||||
dst->start (dst->cls,
|
||||
"lookup dst serials"))
|
||||
return GNUNET_SYSERR;
|
||||
for (unsigned int i = 0; ! tables[i].end; i++)
|
||||
dst->lookup_serial_by_table (dst->cls,
|
||||
tables[i].rt,
|
||||
&tables[i].start_serial);
|
||||
if (0 >
|
||||
dst->commit (dst->cls))
|
||||
return GNUNET_SYSERR;
|
||||
dst->rollback (dst->cls);
|
||||
for (unsigned int i = 0; ! tables[i].end; i++)
|
||||
{
|
||||
struct Table *table = &tables[i];
|
||||
|
@ -390,10 +390,10 @@ struct WireCheckContext
|
||||
* @param[out] deposit_gain amount the coin contributes excluding refunds
|
||||
* @return #GNUNET_OK on success, #GNUNET_SYSERR if the transaction must fail (hard error)
|
||||
*/
|
||||
static int
|
||||
static enum GNUNET_GenericReturnValue
|
||||
check_transaction_history_for_deposit (
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const struct TALER_DenominationKeyValidityPS *issue,
|
||||
const struct TALER_EXCHANGEDB_TransactionList *tl_head,
|
||||
@ -683,6 +683,7 @@ check_transaction_history_for_deposit (
|
||||
* @param rowid which row in the table is the information from (for diagnostics)
|
||||
* @param merchant_pub public key of the merchant (should be same for all callbacks with the same @e cls)
|
||||
* @param account_pay_uri where did we transfer the funds?
|
||||
* @param h_payto hash over @a account_payto_uri as it is in the DB
|
||||
* @param exec_time execution time of the wire transfer (should be same for all callbacks with the same @e cls)
|
||||
* @param h_contract_terms which proposal was this payment about
|
||||
* @param denom_pub denomination of @a coin_pub
|
||||
@ -698,8 +699,9 @@ wire_transfer_information_cb (
|
||||
uint64_t rowid,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const char *account_pay_uri,
|
||||
const struct TALER_PaytoHashP *h_payto,
|
||||
struct GNUNET_TIME_Timestamp exec_time,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *coin_value,
|
||||
@ -712,7 +714,18 @@ wire_transfer_information_cb (
|
||||
struct TALER_EXCHANGEDB_TransactionList *tl;
|
||||
struct TALER_CoinPublicInfo coin;
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
struct TALER_PaytoHashP hpt;
|
||||
|
||||
TALER_payto_hash (account_pay_uri,
|
||||
&hpt);
|
||||
if (0 !=
|
||||
GNUNET_memcmp (&hpt,
|
||||
h_payto))
|
||||
{
|
||||
report_row_inconsistency ("wire_targets",
|
||||
rowid,
|
||||
"h-payto does not match payto URI");
|
||||
}
|
||||
/* Obtain coin's transaction history */
|
||||
qs = TALER_ARL_edb->get_coin_transactions (TALER_ARL_edb->cls,
|
||||
coin_pub,
|
||||
|
@ -673,7 +673,7 @@ struct CoinContext
|
||||
* @return transaction status code
|
||||
*/
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
init_denomination (const struct TALER_DenominationHash *denom_hash,
|
||||
init_denomination (const struct TALER_DenominationHashP *denom_hash,
|
||||
struct DenominationSummary *ds)
|
||||
{
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
@ -760,7 +760,7 @@ init_denomination (const struct TALER_DenominationHash *denom_hash,
|
||||
static struct DenominationSummary *
|
||||
get_denomination_summary (struct CoinContext *cc,
|
||||
const struct TALER_DenominationKeyValidityPS *issue,
|
||||
const struct TALER_DenominationHash *dh)
|
||||
const struct TALER_DenominationHashP *dh)
|
||||
{
|
||||
struct DenominationSummary *ds;
|
||||
|
||||
@ -802,7 +802,7 @@ sync_denomination (void *cls,
|
||||
void *value)
|
||||
{
|
||||
struct CoinContext *cc = cls;
|
||||
struct TALER_DenominationHash denom_h = {
|
||||
struct TALER_DenominationHashP denom_h = {
|
||||
.hash = *denom_hash
|
||||
};
|
||||
struct DenominationSummary *ds = value;
|
||||
@ -963,7 +963,7 @@ sync_denomination (void *cls,
|
||||
static enum GNUNET_GenericReturnValue
|
||||
withdraw_cb (void *cls,
|
||||
uint64_t rowid,
|
||||
const struct TALER_BlindedCoinHash *h_blind_ev,
|
||||
const struct TALER_BlindedCoinHashP *h_blind_ev,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_ReservePublicKeyP *reserve_pub,
|
||||
const struct TALER_ReserveSignatureP *reserve_sig,
|
||||
@ -972,7 +972,7 @@ withdraw_cb (void *cls,
|
||||
{
|
||||
struct CoinContext *cc = cls;
|
||||
struct DenominationSummary *ds;
|
||||
struct TALER_DenominationHash dh;
|
||||
struct TALER_DenominationHashP dh;
|
||||
const struct TALER_DenominationKeyValidityPS *issue;
|
||||
struct TALER_Amount value;
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
@ -1275,7 +1275,7 @@ refresh_session_cb (void *cls,
|
||||
|
||||
/* verify melt signature */
|
||||
{
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct TALER_Amount fee_refresh;
|
||||
|
||||
TALER_denom_pub_hash (denom_pub,
|
||||
@ -1611,8 +1611,8 @@ deposit_cb (void *cls,
|
||||
|
||||
/* Verify deposit signature */
|
||||
{
|
||||
struct TALER_MerchantWireHash h_wire;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_MerchantWireHashP h_wire;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct TALER_Amount deposit_fee;
|
||||
|
||||
TALER_denom_pub_hash (denom_pub,
|
||||
@ -1761,7 +1761,7 @@ refund_cb (void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const struct TALER_MerchantSignatureP *merchant_sig,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
uint64_t rtransaction_id,
|
||||
const struct TALER_Amount *amount_with_fee)
|
||||
{
|
||||
@ -2089,7 +2089,7 @@ recoup_refresh_cb (void *cls,
|
||||
struct GNUNET_TIME_Timestamp timestamp,
|
||||
const struct TALER_Amount *amount,
|
||||
const struct TALER_CoinSpendPublicKeyP *old_coin_pub,
|
||||
const struct TALER_DenominationHash *old_denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *old_denom_pub_hash,
|
||||
const struct TALER_CoinPublicInfo *coin,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_CoinSpendSignatureP *coin_sig,
|
||||
@ -2194,7 +2194,12 @@ check_denomination (
|
||||
&issue->denom_hash,
|
||||
&TALER_ARL_auditor_pub,
|
||||
&auditor_sig);
|
||||
if (0 >= qs)
|
||||
if (0 > qs)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return; /* skip! */
|
||||
}
|
||||
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
|
||||
"Encountered denomination `%s' (%s) valid from %s (%llu-%llu) that this auditor is not auditing!\n",
|
||||
|
@ -491,7 +491,7 @@ handle_reserve_in (void *cls,
|
||||
static enum GNUNET_GenericReturnValue
|
||||
handle_reserve_out (void *cls,
|
||||
uint64_t rowid,
|
||||
const struct TALER_BlindedCoinHash *h_blind_ev,
|
||||
const struct TALER_BlindedCoinHashP *h_blind_ev,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_ReservePublicKeyP *reserve_pub,
|
||||
const struct TALER_ReserveSignatureP *reserve_sig,
|
||||
@ -508,7 +508,7 @@ handle_reserve_out (void *cls,
|
||||
struct GNUNET_TIME_Timestamp valid_start;
|
||||
struct GNUNET_TIME_Timestamp expire_withdraw;
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/* should be monotonically increasing */
|
||||
GNUNET_assert (rowid >= ppr.last_reserve_out_serial_id);
|
||||
|
@ -866,10 +866,10 @@ function test_13() {
|
||||
|
||||
echo "===========13: wrong melt signature ==========="
|
||||
# Modify denom_sig, so it is wrong
|
||||
COIN_ID=`echo "SELECT old_known_coin_id FROM refresh_commitments LIMIT 1;" | psql $DB -Aqt`
|
||||
OLD_SIG=`echo "SELECT old_coin_sig FROM refresh_commitments WHERE old_known_coin_id='$COIN_ID';" | psql $DB -Aqt`
|
||||
COIN_PUB=`echo "SELECT old_coin_pub FROM refresh_commitments LIMIT 1;" | psql $DB -Aqt`
|
||||
OLD_SIG=`echo "SELECT old_coin_sig FROM refresh_commitments WHERE old_known_pub='$COIN_PUB';" | psql $DB -Aqt`
|
||||
NEW_SIG="\xba588af7c13c477dca1ac458f65cc484db8fba53b969b873f4353ecbd815e6b4c03f42c0cb63a2b609c2d726e612fd8e0c084906a41f409b6a23a08a83c89a02"
|
||||
echo "UPDATE refresh_commitments SET old_coin_sig='$NEW_SIG' WHERE old_known_coin_id='$COIN_ID'" | psql -Aqt $DB
|
||||
echo "UPDATE refresh_commitments SET old_coin_sig='$NEW_SIG' WHERE old_coin_pub='$COIN_PUB'" | psql -Aqt $DB
|
||||
|
||||
run_audit
|
||||
|
||||
@ -943,42 +943,27 @@ fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Test where h_wire in the deposit table is wrong
|
||||
# Test where salt in the deposit table is wrong
|
||||
function test_15() {
|
||||
echo "===========15: deposit wire hash wrong================="
|
||||
echo "===========15: deposit wire salt wrong================="
|
||||
|
||||
# Check wire transfer lag reported (no aggregator!)
|
||||
# Modify wire_salt hash, so it is inconsistent
|
||||
SALT=`echo "SELECT wire_salt FROM deposits WHERE deposit_serial_id=1;" | psql -Aqt $DB`
|
||||
echo "UPDATE deposits SET wire_salt='\x1197cd7f7b0e13ab1905fedb36c536a2' WHERE deposit_serial_id=1;" | psql -Aqt $DB
|
||||
|
||||
# NOTE: This test is EXPECTED to fail for ~1h after
|
||||
# re-generating the test database as we do not
|
||||
# report lag of less than 1h (see GRACE_PERIOD in
|
||||
# taler-helper-auditor-wire.c)
|
||||
if [ $DATABASE_AGE -gt 3600 ]
|
||||
run_audit
|
||||
|
||||
echo -n "Testing inconsistency detection... "
|
||||
OP=`jq -r .bad_sig_losses[0].operation < test-audit-coins.json`
|
||||
if test "x$OP" != "xdeposit"
|
||||
then
|
||||
|
||||
# Modify h_wire hash, so it is inconsistent with 'wire'
|
||||
echo "UPDATE deposits SET h_wire='\x973e52d193a357940be9ef2939c19b0575ee1101f52188c3c01d9005b7d755c397e92624f09cfa709104b3b65605fe5130c90d7e1b7ee30f8fc570f39c16b853' WHERE deposit_serial_id=1" | psql -Aqt $DB
|
||||
|
||||
# The auditor checks h_wire consistency only for
|
||||
# coins where the wire transfer has happened, hence
|
||||
# run aggregator first to get this test to work.
|
||||
run_audit aggregator
|
||||
|
||||
echo -n "Testing inconsistency detection... "
|
||||
TABLE=`jq -r .row_inconsistencies[0].table < test-audit-aggregation.json`
|
||||
if test "x$TABLE" != "xaggregation" -a "x$TABLE" != "xdeposits"
|
||||
then
|
||||
exit_fail "Reported table wrong: $TABLE"
|
||||
fi
|
||||
echo PASS
|
||||
|
||||
# cannot easily undo aggregator, hence full reload
|
||||
full_reload
|
||||
|
||||
else
|
||||
echo "Test skipped (database too new)"
|
||||
exit_fail "Reported operation wrong: $OP"
|
||||
fi
|
||||
echo PASS
|
||||
|
||||
# Restore DB
|
||||
echo "UPDATE deposits SET wire_salt='$SALT' WHERE deposit_serial_id=1;" | psql -Aqt $DB
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1181,14 +1166,14 @@ then
|
||||
|
||||
OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
RES_UUID=`echo "SELECT reserve_uuid FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_uuid='${RES_UUID}';" | psql $DB -Aqt`
|
||||
RES_PUB=`echo "SELECT reserve_pub FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_pub='${RES_PUB}';" | psql $DB -Aqt`
|
||||
VAL_DELTA=1
|
||||
NEW_TIME=`expr $OLD_TIME - 3024000000000 || true` # 5 weeks
|
||||
NEW_EXP=`expr $OLD_EXP - 3024000000000 || true` # 5 weeks
|
||||
NEW_CREDIT=`expr $OLD_VAL + $VAL_DELTA || true`
|
||||
echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
|
||||
echo "UPDATE reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_uuid='${RES_UUID}';" | psql -Aqt $DB
|
||||
echo "UPDATE reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
|
||||
|
||||
# Need to run with the aggregator so the reserve closure happens
|
||||
run_audit aggregator
|
||||
@ -1219,11 +1204,11 @@ echo "===========20: reserve closure missing ================="
|
||||
|
||||
OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
RES_UUID=`echo "SELECT reserve_uuid FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
RES_PUB=`echo "SELECT reserve_pub FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
NEW_TIME=`expr $OLD_TIME - 3024000000000 || true` # 5 weeks
|
||||
NEW_CREDIT=`expr $OLD_VAL + 100 || true`
|
||||
echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
|
||||
echo "UPDATE reserves SET current_balance_val=100+current_balance_val WHERE reserve_uuid='${RES_UUID}';" | psql -Aqt $DB
|
||||
echo "UPDATE reserves SET current_balance_val=100+current_balance_val WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
|
||||
|
||||
# This time, run without the aggregator so the reserve closure is skipped!
|
||||
run_audit
|
||||
@ -1240,7 +1225,7 @@ fi
|
||||
|
||||
# Undo
|
||||
echo "UPDATE reserves_in SET execution_date='${OLD_TIME}',credit_val=${OLD_VAL} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
|
||||
echo "UPDATE reserves SET current_balance_val=current_balance_val-100 WHERE reserve_uuid='${RES_UUID}';" | psql -Aqt $DB
|
||||
echo "UPDATE reserves SET current_balance_val=current_balance_val-100 WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
|
||||
|
||||
}
|
||||
|
||||
@ -1259,19 +1244,18 @@ then
|
||||
|
||||
OLD_TIME=`echo "SELECT execution_date FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
OLD_VAL=`echo "SELECT credit_val FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
RES_UUID=`echo "SELECT reserve_uuid FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_uuid='${RES_UUID}';" | psql $DB -Aqt`
|
||||
RES_PUB=`echo "SELECT reserve_pub FROM reserves_in WHERE reserve_in_serial_id=1;" | psql $DB -Aqt`
|
||||
OLD_EXP=`echo "SELECT expiration_date FROM reserves WHERE reserve_pub='${RES_PUB}';" | psql $DB -Aqt`
|
||||
VAL_DELTA=1
|
||||
NEW_TIME=`expr $OLD_TIME - 3024000000000 || true` # 5 weeks
|
||||
NEW_EXP=`expr $OLD_EXP - 3024000000000 || true` # 5 weeks
|
||||
NEW_CREDIT=`expr $OLD_VAL + $VAL_DELTA || true`
|
||||
echo "UPDATE reserves_in SET execution_date='${NEW_TIME}',credit_val=${NEW_CREDIT} WHERE reserve_in_serial_id=1;" | psql -Aqt $DB
|
||||
echo "UPDATE reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_uuid='${RES_UUID}';" | psql -Aqt $DB
|
||||
echo "UPDATE reserves SET current_balance_val=${VAL_DELTA}+current_balance_val,expiration_date='${NEW_EXP}' WHERE reserve_pub='${RES_PUB}';" | psql -Aqt $DB
|
||||
|
||||
# Need to first run the aggregator so the transfer is marked as done exists
|
||||
pre_audit aggregator
|
||||
|
||||
|
||||
# remove transaction from bank DB
|
||||
echo "DELETE FROM app_banktransaction WHERE debit_account_id=2 AND amount='TESTKUDOS:${VAL_DELTA}';" | psql -Aqt $DB
|
||||
|
||||
@ -1312,7 +1296,7 @@ S_DENOM=`echo 'SELECT denominations_serial FROM reserves_out LIMIT 1;' | psql $D
|
||||
OLD_START=`echo "SELECT valid_from FROM denominations WHERE denominations_serial='${S_DENOM}';" | psql $DB -Aqt`
|
||||
OLD_WEXP=`echo "SELECT expire_withdraw FROM denominations WHERE denominations_serial='${S_DENOM}';" | psql $DB -Aqt`
|
||||
# Basically expires 'immediately', so that the withdraw must have been 'invalid'
|
||||
NEW_WEXP=`expr $OLD_START + 1 || true`
|
||||
NEW_WEXP=$OLD_START
|
||||
|
||||
echo "UPDATE denominations SET expire_withdraw=${NEW_WEXP} WHERE denominations_serial='${S_DENOM}';" | psql -Aqt $DB
|
||||
|
||||
@ -1320,7 +1304,7 @@ echo "UPDATE denominations SET expire_withdraw=${NEW_WEXP} WHERE denominations_s
|
||||
run_audit
|
||||
|
||||
echo -n "Testing inconsistency detection... "
|
||||
jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Denomination key withdraw inconsistency not detected"
|
||||
jq -e .denomination_key_validity_withdraw_inconsistencies[0] < test-audit-reserves.json > /dev/null || exit_fail "Denomination key withdraw inconsistency for $S_DENOM not detected"
|
||||
|
||||
echo PASS
|
||||
|
||||
@ -1793,6 +1777,50 @@ fi
|
||||
|
||||
|
||||
|
||||
# Test where h_payto in the wire_targets table is wrong
|
||||
function test_33() {
|
||||
echo "===========33: h_payto wrong================="
|
||||
|
||||
# Check wire transfer lag reported (no aggregator!)
|
||||
# NOTE: this test is BRAND NEW and expected
|
||||
# to fail until we implement the check in the auditor!
|
||||
|
||||
# NOTE: This test is EXPECTED to fail for ~1h after
|
||||
# re-generating the test database as we do not
|
||||
# report lag of less than 1h (see GRACE_PERIOD in
|
||||
# taler-helper-auditor-wire.c)
|
||||
if [ $DATABASE_AGE -gt 3600 ]
|
||||
then
|
||||
|
||||
# Modify h_payto hash, so it is inconsistent with 'wire'
|
||||
WTSID=`echo "SELECT wire_target_serial_id FROM deposits WHERE deposit_serial_id=1;" | psql -Aqt $DB`
|
||||
echo "UPDATE wire_targets SET h_payto='\x973e52d193a357940be9ef2939c19b0575ee1101f52188c3c01d9005b7d755c397e92624f09cfa709104b3b65605fe5130c90d7e1b7ee30f8fc570f39c16b853' WHERE wire_target_serial_id=$WTSID" | psql -Aqt $DB
|
||||
|
||||
# The auditor checks h_wire consistency only for
|
||||
# coins where the wire transfer has happened, hence
|
||||
# run aggregator first to get this test to work.
|
||||
run_audit aggregator
|
||||
|
||||
echo -n "Testing inconsistency detection... "
|
||||
TABLE=`jq -r .row_inconsistencies[0].table < test-audit-aggregation.json`
|
||||
if test "x$TABLE" != "xwire_targets"
|
||||
then
|
||||
exit_fail "Reported table wrong: $TABLE"
|
||||
fi
|
||||
echo PASS
|
||||
|
||||
# cannot easily undo aggregator, hence full reload
|
||||
full_reload
|
||||
|
||||
else
|
||||
echo "Test skipped (database too new)"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# *************** Main test loop starts here **************
|
||||
|
||||
|
||||
@ -1840,10 +1868,10 @@ check_with_database()
|
||||
|
||||
# ####### Setup globals ######
|
||||
# Postgres database to use
|
||||
DB=taler-auditor-test
|
||||
DB=auditor-basedb
|
||||
|
||||
# Configuration file to use
|
||||
CONF=test-auditor.conf
|
||||
CONF=${DB}.conf
|
||||
|
||||
# test required commands exist
|
||||
echo "Testing for jq"
|
||||
|
@ -482,11 +482,11 @@ check_with_database()
|
||||
# *************** Main logic starts here **************
|
||||
|
||||
# ####### Setup globals ######
|
||||
# Postgres database to use (must match test-auditor.conf)
|
||||
# Postgres database to use (must match revoke-basedb.conf)
|
||||
DB=taler-auditor-test
|
||||
|
||||
# Configuration file to use
|
||||
CONF=test-auditor.conf
|
||||
CONF=revoke-basedb.conf
|
||||
|
||||
# test required commands exist
|
||||
echo "Testing for jq"
|
||||
|
@ -16,9 +16,10 @@ echo -n "."
|
||||
psql talercheck-in < auditor-basedb.sql >/dev/null 2> /dev/null
|
||||
|
||||
echo -n "."
|
||||
taler-auditor-sync -s test-sync-in.conf -d test-sync-out.conf -t
|
||||
~/bin/taler-auditor-sync -s test-sync-in.conf -d test-sync-out.conf -t
|
||||
|
||||
for table in denominations denomination_revocations reserves reserves_in reserves_close reserves_out auditors auditor_denom_sigs exchange_sign_keys signkey_revocations known_coins refresh_commitments refresh_revealed_coins refresh_transfer_keys deposits refunds wire_out aggregation_tracking wire_fee recoup recoup_refresh
|
||||
# cs_nonce_locks excluded: no point
|
||||
for table in denominations denomination_revocations wire_targets reserves reserves_in reserves_close reserves_out auditors auditor_denom_sigs exchange_sign_keys signkey_revocations extensions extension_details known_coins refresh_commitments refresh_revealed_coins refresh_transfer_keys deposits refunds wire_out aggregation_tracking wire_fee recoup recoup_refresh
|
||||
do
|
||||
echo -n "."
|
||||
CIN=`echo "SELECT COUNT(*) FROM $table" | psql talercheck-in -Aqt`
|
||||
|
@ -2163,7 +2163,7 @@ postgres_get_wire_fee_summary (void *cls,
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_insert_denomination_balance (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
const struct TALER_Amount *denom_balance,
|
||||
const struct TALER_Amount *denom_loss,
|
||||
const struct TALER_Amount *denom_risk,
|
||||
@ -2203,7 +2203,7 @@ postgres_insert_denomination_balance (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_update_denomination_balance (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
const struct TALER_Amount *denom_balance,
|
||||
const struct TALER_Amount *denom_loss,
|
||||
const struct TALER_Amount *denom_risk,
|
||||
@ -2240,9 +2240,9 @@ postgres_update_denomination_balance (
|
||||
* @return transaction status code
|
||||
*/
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_get_denomination_balance (void *cls,
|
||||
const struct
|
||||
TALER_DenominationHash *denom_pub_hash,
|
||||
postgres_get_denomination_balance (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct TALER_Amount *denom_balance,
|
||||
struct TALER_Amount *denom_loss,
|
||||
struct TALER_Amount *denom_risk,
|
||||
@ -2439,7 +2439,7 @@ static enum GNUNET_DB_QueryStatus
|
||||
postgres_insert_historic_denom_revenue (
|
||||
void *cls,
|
||||
const struct TALER_MasterPublicKeyP *master_pub,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct GNUNET_TIME_Timestamp revenue_timestamp,
|
||||
const struct TALER_Amount *revenue_balance,
|
||||
const struct TALER_Amount *loss_balance)
|
||||
@ -2506,7 +2506,7 @@ historic_denom_revenue_cb (void *cls,
|
||||
|
||||
for (unsigned int i = 0; i < num_results; i++)
|
||||
{
|
||||
struct TALER_DenominationHash denom_pub_hash;
|
||||
struct TALER_DenominationHashP denom_pub_hash;
|
||||
struct GNUNET_TIME_Timestamp revenue_timestamp;
|
||||
struct TALER_Amount revenue_balance;
|
||||
struct TALER_Amount loss;
|
||||
|
@ -130,10 +130,10 @@ run (void *cls)
|
||||
|
||||
struct TALER_MasterPublicKeyP master_pub;
|
||||
struct TALER_ReservePublicKeyP reserve_pub;
|
||||
struct TALER_DenominationHash rnd_hash;
|
||||
struct TALER_DenominationHashP rnd_hash;
|
||||
struct TALER_DenominationPrivateKey denom_priv;
|
||||
struct TALER_DenominationPublicKey denom_pub;
|
||||
struct TALER_DenominationHash denom_pub_hash;
|
||||
struct TALER_DenominationHashP denom_pub_hash;
|
||||
struct GNUNET_TIME_Timestamp now;
|
||||
struct GNUNET_TIME_Timestamp past;
|
||||
struct GNUNET_TIME_Timestamp future;
|
||||
@ -488,7 +488,7 @@ run (void *cls)
|
||||
int
|
||||
select_historic_denom_revenue_result (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash2,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash2,
|
||||
struct GNUNET_TIME_Timestamp revenue_timestamp2,
|
||||
const struct TALER_Amount *revenue_balance2,
|
||||
const struct TALER_Amount *loss2)
|
||||
|
@ -23,11 +23,11 @@
|
||||
#include "bank_api_common.h"
|
||||
|
||||
|
||||
int
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_BANK_setup_auth_ (CURL *easy,
|
||||
const struct TALER_BANK_AuthenticationData *auth)
|
||||
{
|
||||
int ret;
|
||||
enum GNUNET_GenericReturnValue ret;
|
||||
|
||||
ret = GNUNET_OK;
|
||||
switch (auth->method)
|
||||
|
@ -101,7 +101,7 @@ run (void *cls,
|
||||
const struct GNUNET_CONFIGURATION_Handle *cfg)
|
||||
{
|
||||
unsigned long long port = 8082;
|
||||
unsigned long long ram = 1024 * 1024 * 128; /* 128 M entries */
|
||||
unsigned long long ram = 1024 * 128; /* 128 k entries */
|
||||
char *currency_string;
|
||||
|
||||
(void) cls;
|
||||
|
@ -37,6 +37,7 @@ taler_bank_benchmark_LDADD = \
|
||||
$(top_builddir)/src/exchangedb/libtalerexchangedb.la \
|
||||
$(top_builddir)/src/json/libtalerjson.la \
|
||||
$(top_builddir)/src/util/libtalerutil.la \
|
||||
$(top_builddir)/src/extensions/libtalerextensions.la \
|
||||
-lgnunetjson \
|
||||
-lgnunetcurl \
|
||||
-lgnunetutil \
|
||||
|
@ -76,7 +76,7 @@ static struct GNUNET_SCHEDULER_Task *task;
|
||||
/**
|
||||
* Hash of the denomination.
|
||||
*/
|
||||
static struct TALER_DenominationHash h_denom_pub;
|
||||
static struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* "signature" to use for the coin(s).
|
||||
@ -223,7 +223,7 @@ struct Merchant
|
||||
* the exchange from the detailed wire data provided by the
|
||||
* merchant.
|
||||
*/
|
||||
struct TALER_MerchantWireHash h_wire;
|
||||
struct TALER_MerchantWireHashP h_wire;
|
||||
|
||||
/**
|
||||
* Salt used when computing @e h_wire.
|
||||
@ -249,7 +249,7 @@ struct Deposit
|
||||
* Hash over the proposal data between merchant and customer
|
||||
* (remains unknown to the Exchange).
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
|
||||
};
|
||||
|
||||
@ -299,7 +299,7 @@ add_deposit (const struct Merchant *m)
|
||||
struct Deposit d;
|
||||
struct TALER_EXCHANGEDB_Deposit deposit;
|
||||
uint64_t known_coin_id;
|
||||
struct TALER_DenominationHash dph;
|
||||
struct TALER_DenominationHashP dph;
|
||||
struct TALER_AgeCommitmentHash agh;
|
||||
|
||||
RANDOMIZE (&d.coin.coin_pub);
|
||||
@ -487,7 +487,7 @@ run (void *cls,
|
||||
{
|
||||
struct TALER_DenominationPrivateKey pk;
|
||||
struct TALER_DenominationPublicKey denom_pub;
|
||||
struct TALER_CoinPubHash c_hash;
|
||||
struct TALER_CoinPubHashP c_hash;
|
||||
struct TALER_PlanchetDetail pd;
|
||||
struct TALER_BlindedDenominationSignature bds;
|
||||
struct TALER_PlanchetMasterSecretP ps;
|
||||
@ -528,23 +528,23 @@ run (void *cls,
|
||||
&bks);
|
||||
|
||||
{
|
||||
uint32_t seed;
|
||||
uint64_t seed;
|
||||
struct TALER_AgeMask mask = {
|
||||
.mask = 1 || 1 << 8 || 1 << 12 || 1 << 16 || 1 << 18
|
||||
.bits = 1 || 1 << 8 || 1 << 12 || 1 << 16 || 1 << 18
|
||||
};
|
||||
struct TALER_AgeCommitment ac = {0};
|
||||
struct TALER_AgeCommitmentProof acp = {0};
|
||||
|
||||
seed = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
|
||||
UINT32_MAX);
|
||||
seed = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK,
|
||||
UINT64_MAX);
|
||||
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
TALER_age_restriction_commit (
|
||||
&mask,
|
||||
13,
|
||||
seed,
|
||||
&ac));
|
||||
&acp));
|
||||
|
||||
TALER_age_commitment_hash (&ac, &hac);
|
||||
TALER_age_commitment_hash (&acp.commitment, &hac);
|
||||
}
|
||||
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
@ -558,6 +558,7 @@ run (void *cls,
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
TALER_denom_sign_blinded (&bds,
|
||||
&pk,
|
||||
false,
|
||||
&pd.blinded_planchet));
|
||||
TALER_blinded_planchet_free (&pd.blinded_planchet);
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
|
@ -39,6 +39,7 @@ taler_auditor_offline_LDADD = \
|
||||
$(top_builddir)/src/lib/libtalerexchange.la \
|
||||
$(top_builddir)/src/json/libtalerjson.la \
|
||||
$(top_builddir)/src/util/libtalerutil.la \
|
||||
$(top_builddir)/src/extensions/libtalerextensions.la \
|
||||
-lgnunetjson \
|
||||
-lgnunetcurl \
|
||||
-ljansson \
|
||||
|
@ -430,7 +430,7 @@ upload_denomination_add (const char *exchange_url,
|
||||
const json_t *value)
|
||||
{
|
||||
struct TALER_AuditorSignatureP auditor_sig;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct DenominationAddRequest *dar;
|
||||
const char *err_name;
|
||||
unsigned int err_line;
|
||||
@ -781,7 +781,7 @@ show_denomkeys (const json_t *denomkeys)
|
||||
GNUNET_JSON_spec_end ()
|
||||
};
|
||||
struct GNUNET_TIME_Relative duration;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_JSON_parse (value,
|
||||
@ -1066,7 +1066,7 @@ sign_denomkeys (const json_t *denomkeys)
|
||||
&master_sig),
|
||||
GNUNET_JSON_spec_end ()
|
||||
};
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_JSON_parse (value,
|
||||
|
@ -914,7 +914,7 @@ upload_denom_revocation (const char *exchange_url,
|
||||
const json_t *value)
|
||||
{
|
||||
struct TALER_MasterSignatureP master_sig;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct DenomRevocationRequest *drr;
|
||||
const char *err_name;
|
||||
unsigned int err_line;
|
||||
@ -1800,7 +1800,7 @@ upload_extensions (const char *exchange_url,
|
||||
|
||||
/* 2. Verify the signature */
|
||||
{
|
||||
struct TALER_ExtensionConfigHash h_config;
|
||||
struct TALER_ExtensionConfigHashP h_config;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
TALER_JSON_extensions_config_hash (extensions, &h_config))
|
||||
@ -2023,7 +2023,7 @@ do_upload (char *const *args)
|
||||
static void
|
||||
do_revoke_denomination_key (char *const *args)
|
||||
{
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct TALER_MasterSignatureP master_sig;
|
||||
|
||||
if (NULL != in)
|
||||
@ -2857,7 +2857,7 @@ show_denomkeys (const struct TALER_SecurityModulePublicKeyP *secm_pub_rsa,
|
||||
GNUNET_JSON_spec_end ()
|
||||
};
|
||||
struct GNUNET_TIME_Relative duration;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
enum GNUNET_GenericReturnValue ok;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
@ -3260,7 +3260,7 @@ load_age_mask (const char*section_name)
|
||||
static const struct TALER_AgeMask null_mask = {0};
|
||||
enum GNUNET_GenericReturnValue ret;
|
||||
|
||||
if (age_mask.mask == 0)
|
||||
if (age_mask.bits == 0)
|
||||
return null_mask;
|
||||
|
||||
if (GNUNET_OK != (GNUNET_CONFIGURATION_have_value (
|
||||
@ -3338,7 +3338,7 @@ sign_denomkeys (const struct TALER_SecurityModulePublicKeyP *secm_pub_rsa,
|
||||
GNUNET_JSON_spec_end ()
|
||||
};
|
||||
struct GNUNET_TIME_Relative duration;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_JSON_parse (value,
|
||||
@ -3645,7 +3645,7 @@ do_extensions_sign (char *const *args)
|
||||
{
|
||||
json_t *obj = json_object ();
|
||||
json_t *extensions = json_object ();
|
||||
struct TALER_ExtensionConfigHash h_config;
|
||||
struct TALER_ExtensionConfigHashP h_config;
|
||||
struct TALER_MasterSignatureP sig;
|
||||
const struct TALER_Extension *it;
|
||||
|
||||
|
@ -370,7 +370,7 @@ deposit_cb (void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_Amount *deposit_fee,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
uint64_t wire_target,
|
||||
const char *payto_uri)
|
||||
{
|
||||
@ -516,7 +516,7 @@ aggregate_cb (void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_Amount *deposit_fee,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms)
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms)
|
||||
{
|
||||
struct AggregationUnit *au = cls;
|
||||
struct TALER_Amount old;
|
||||
|
@ -647,7 +647,7 @@ handle_post_management (struct TEH_RequestContext *rc,
|
||||
if (0 == strcmp (args[0],
|
||||
"denominations"))
|
||||
{
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
if ( (NULL == args[0]) ||
|
||||
(NULL == args[1]) ||
|
||||
@ -794,7 +794,7 @@ handle_post_auditors (struct TEH_RequestContext *rc,
|
||||
const char *const args[])
|
||||
{
|
||||
struct TALER_AuditorPublicKeyP auditor_pub;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
if ( (NULL == args[0]) ||
|
||||
(NULL == args[1]) ||
|
||||
|
@ -45,7 +45,7 @@ struct AddAuditorDenomContext
|
||||
/**
|
||||
* Denomination this is about.
|
||||
*/
|
||||
const struct TALER_DenominationHash *h_denom_pub;
|
||||
const struct TALER_DenominationHashP *h_denom_pub;
|
||||
|
||||
/**
|
||||
* Auditor this is about.
|
||||
@ -189,7 +189,7 @@ MHD_RESULT
|
||||
TEH_handler_auditors (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const json_t *root)
|
||||
{
|
||||
struct AddAuditorDenomContext awc = {
|
||||
|
@ -39,7 +39,7 @@ MHD_RESULT
|
||||
TEH_handler_auditors (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const json_t *root);
|
||||
|
||||
|
||||
|
@ -78,12 +78,12 @@ TEH_handler_csr_melt (struct TEH_RequestContext *rc,
|
||||
|
||||
{
|
||||
struct TALER_CsNonce nonces[csr_requests_num];
|
||||
struct TALER_DenominationHash denom_pub_hashes[csr_requests_num];
|
||||
struct TALER_DenominationHashP denom_pub_hashes[csr_requests_num];
|
||||
|
||||
for (unsigned int i = 0; i < csr_requests_num; i++)
|
||||
{
|
||||
uint32_t coin_off;
|
||||
struct TALER_DenominationHash *denom_pub_hash = &denom_pub_hashes[i];
|
||||
struct TALER_DenominationHashP *denom_pub_hash = &denom_pub_hashes[i];
|
||||
struct GNUNET_JSON_Specification csr_spec[] = {
|
||||
GNUNET_JSON_spec_uint32 ("coin_offset",
|
||||
&coin_off),
|
||||
@ -112,7 +112,7 @@ TEH_handler_csr_melt (struct TEH_RequestContext *rc,
|
||||
for (unsigned int i = 0; i < csr_requests_num; i++)
|
||||
{
|
||||
const struct TALER_CsNonce *nonce = &nonces[i];
|
||||
const struct TALER_DenominationHash *denom_pub_hash =
|
||||
const struct TALER_DenominationHashP *denom_pub_hash =
|
||||
&denom_pub_hashes[i];
|
||||
struct TALER_DenominationCSPublicRPairP *r_pub
|
||||
= &ewvs[i].details.cs_values;
|
||||
@ -179,7 +179,7 @@ TEH_handler_csr_melt (struct TEH_RequestContext *rc,
|
||||
|
||||
/* derive r_pub */
|
||||
// FIXME: bundle all requests into one derivation request (TEH_keys_..., crypto helper, security module)
|
||||
ec = TEH_keys_denomination_cs_r_pub (denom_pub_hash,
|
||||
ec = TEH_keys_denomination_cs_r_pub_melt (denom_pub_hash,
|
||||
nonce,
|
||||
r_pub);
|
||||
if (TALER_EC_NONE != ec)
|
||||
@ -228,7 +228,7 @@ TEH_handler_csr_withdraw (struct TEH_RequestContext *rc,
|
||||
const char *const args[])
|
||||
{
|
||||
struct TALER_CsNonce nonce;
|
||||
struct TALER_DenominationHash denom_pub_hash;
|
||||
struct TALER_DenominationHashP denom_pub_hash;
|
||||
struct TALER_ExchangeWithdrawValues ewv = {
|
||||
.cipher = TALER_DENOMINATION_CS
|
||||
};
|
||||
@ -238,7 +238,7 @@ TEH_handler_csr_withdraw (struct TEH_RequestContext *rc,
|
||||
sizeof (struct TALER_CsNonce)),
|
||||
GNUNET_JSON_spec_fixed ("denom_pub_hash",
|
||||
&denom_pub_hash,
|
||||
sizeof (struct TALER_DenominationHash)),
|
||||
sizeof (struct TALER_DenominationHashP)),
|
||||
GNUNET_JSON_spec_end ()
|
||||
};
|
||||
struct TEH_DenominationKey *dk;
|
||||
@ -316,7 +316,7 @@ TEH_handler_csr_withdraw (struct TEH_RequestContext *rc,
|
||||
{
|
||||
enum TALER_ErrorCode ec;
|
||||
|
||||
ec = TEH_keys_denomination_cs_r_pub (&denom_pub_hash,
|
||||
ec = TEH_keys_denomination_cs_r_pub_withdraw (&denom_pub_hash,
|
||||
&nonce,
|
||||
&ewv.details.cs_values);
|
||||
if (TALER_EC_NONE != ec)
|
||||
|
@ -29,19 +29,6 @@
|
||||
#include "taler-exchange-httpd_responses.h"
|
||||
|
||||
|
||||
/**
|
||||
* How often should we retry a transaction before giving up
|
||||
* (for transactions resulting in serialization/dead locks only).
|
||||
*
|
||||
* The current value is likely too high for production. We might want to
|
||||
* benchmark good values once we have a good database setup. The code is
|
||||
* expected to work correctly with any positive value, albeit inefficiently if
|
||||
* we too aggressively force clients to retry the HTTP request merely because
|
||||
* we have database serialization issues.
|
||||
*/
|
||||
#define MAX_TRANSACTION_COMMIT_RETRIES 100
|
||||
|
||||
|
||||
enum GNUNET_DB_QueryStatus
|
||||
TEH_make_coin_known (const struct TALER_CoinPublicInfo *coin,
|
||||
struct MHD_Connection *connection,
|
||||
@ -49,7 +36,7 @@ TEH_make_coin_known (const struct TALER_CoinPublicInfo *coin,
|
||||
MHD_RESULT *mhd_ret)
|
||||
{
|
||||
enum TALER_EXCHANGEDB_CoinKnownStatus cks;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct TALER_AgeCommitmentHash age_hash;
|
||||
|
||||
/* make sure coin is 'known' in database */
|
||||
|
@ -27,6 +27,19 @@
|
||||
#include <gnunet/gnunet_mhd_compat.h>
|
||||
|
||||
|
||||
/**
|
||||
* How often should we retry a transaction before giving up
|
||||
* (for transactions resulting in serialization/dead locks only).
|
||||
*
|
||||
* The current value is likely too high for production. We might want to
|
||||
* benchmark good values once we have a good database setup. The code is
|
||||
* expected to work correctly with any positive value, albeit inefficiently if
|
||||
* we too aggressively force clients to retry the HTTP request merely because
|
||||
* we have database serialization issues.
|
||||
*/
|
||||
#define MAX_TRANSACTION_COMMIT_RETRIES 100
|
||||
|
||||
|
||||
/**
|
||||
* Ensure coin is known in the database, and handle conflicts and errors.
|
||||
*
|
||||
|
@ -59,9 +59,10 @@
|
||||
static MHD_RESULT
|
||||
reply_deposit_success (struct MHD_Connection *connection,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_ExtensionContractHash *h_extensions,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_ExtensionContractHashP *h_extensions,
|
||||
const struct
|
||||
TALER_PrivateContractHashP *h_contract_terms,
|
||||
struct GNUNET_TIME_Timestamp exchange_timestamp,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
struct GNUNET_TIME_Timestamp wire_deadline,
|
||||
@ -128,7 +129,7 @@ struct DepositContext
|
||||
/**
|
||||
* Hash of the payto URI.
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
|
||||
/**
|
||||
* Row of of the coin in the known_coins table.
|
||||
@ -254,7 +255,7 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
||||
&deposit.wire_deadline),
|
||||
GNUNET_JSON_spec_end ()
|
||||
};
|
||||
struct TALER_MerchantWireHash h_wire;
|
||||
struct TALER_MerchantWireHashP h_wire;
|
||||
|
||||
memset (&deposit,
|
||||
0,
|
||||
@ -307,6 +308,15 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
||||
TALER_EC_EXCHANGE_DEPOSIT_REFUND_DEADLINE_AFTER_WIRE_DEADLINE,
|
||||
NULL);
|
||||
}
|
||||
if (GNUNET_TIME_absolute_is_never (deposit.wire_deadline.abs_time))
|
||||
{
|
||||
GNUNET_break_op (0);
|
||||
GNUNET_JSON_parse_free (spec);
|
||||
return TALER_MHD_reply_with_error (connection,
|
||||
MHD_HTTP_BAD_REQUEST,
|
||||
TALER_EC_EXCHANGE_DEPOSIT_WIRE_DEADLINE_IS_NEVER,
|
||||
NULL);
|
||||
}
|
||||
deposit.receiver_wire_account = (char *) payto_uri;
|
||||
TALER_payto_hash (payto_uri,
|
||||
&dc.h_payto);
|
||||
@ -432,12 +442,24 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
|
||||
/* make sure coin is 'known' in database */
|
||||
for (unsigned int tries = 0; tries<MAX_TRANSACTION_COMMIT_RETRIES; tries++)
|
||||
{
|
||||
qs = TEH_make_coin_known (&deposit.coin,
|
||||
connection,
|
||||
&dc.known_coin_id,
|
||||
&mhd_ret);
|
||||
/* no transaction => no serialization failures should be possible */
|
||||
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
|
||||
if (GNUNET_DB_STATUS_SOFT_ERROR != qs)
|
||||
break;
|
||||
}
|
||||
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return TALER_MHD_reply_with_error (connection,
|
||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||
TALER_EC_GENERIC_DB_COMMIT_FAILED,
|
||||
"make_coin_known");
|
||||
}
|
||||
if (qs < 0)
|
||||
return mhd_ret;
|
||||
}
|
||||
|
@ -47,8 +47,9 @@
|
||||
*/
|
||||
static MHD_RESULT
|
||||
reply_deposit_details (struct MHD_Connection *connection,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct
|
||||
TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *coin_contribution,
|
||||
const struct TALER_WireTransferIdentifierRawP *wtid,
|
||||
|
@ -131,7 +131,7 @@ extension_update_event_cb (void *cls,
|
||||
/* Special case age restriction: Update global flag and mask */
|
||||
if (TALER_Extension_AgeRestriction == type)
|
||||
{
|
||||
TEH_age_mask.mask = 0;
|
||||
TEH_age_mask.bits = 0;
|
||||
TEH_age_restriction_enabled =
|
||||
TALER_extensions_age_restriction_is_enabled ();
|
||||
if (TEH_age_restriction_enabled)
|
||||
|
@ -80,7 +80,7 @@ struct HelperDenomination
|
||||
/**
|
||||
* Hash of the full denomination key.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Signature over this key from the security module's key.
|
||||
@ -797,7 +797,7 @@ load_age_mask (const char*section_name)
|
||||
static const struct TALER_AgeMask null_mask = {0};
|
||||
struct TALER_AgeMask age_mask = TALER_extensions_age_restriction_ageMask ();
|
||||
|
||||
if (age_mask.mask == 0)
|
||||
if (age_mask.bits == 0)
|
||||
return null_mask;
|
||||
|
||||
if (GNUNET_OK != (GNUNET_CONFIGURATION_have_value (
|
||||
@ -1295,7 +1295,7 @@ static void
|
||||
denomination_info_cb (
|
||||
void *cls,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_EXCHANGEDB_DenominationKeyMetaData *meta,
|
||||
const struct TALER_MasterSignatureP *master_sig,
|
||||
bool recoup_possible)
|
||||
@ -1472,7 +1472,7 @@ static void
|
||||
auditor_denom_cb (
|
||||
void *cls,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AuditorSignatureP *auditor_sig)
|
||||
{
|
||||
struct TEH_KeyStateHandle *ksh = cls;
|
||||
@ -2120,7 +2120,7 @@ finish_keys_response (struct TEH_KeyStateHandle *ksh)
|
||||
* the properties of the denomination. Also, we build up the right
|
||||
* hash for the corresponding array. */
|
||||
if (TEH_age_restriction_enabled &&
|
||||
(0 != dk->denom_pub.age_mask.mask))
|
||||
(0 != dk->denom_pub.age_mask.bits))
|
||||
{
|
||||
have_age_restricted_denoms = true;
|
||||
array = age_restricted_denoms;
|
||||
@ -2386,7 +2386,8 @@ TEH_keys_get_state (void)
|
||||
|
||||
|
||||
struct TEH_DenominationKey *
|
||||
TEH_keys_denomination_by_hash (const struct TALER_DenominationHash *h_denom_pub,
|
||||
TEH_keys_denomination_by_hash (const struct
|
||||
TALER_DenominationHashP *h_denom_pub,
|
||||
struct MHD_Connection *conn,
|
||||
MHD_RESULT *mret)
|
||||
{
|
||||
@ -2411,7 +2412,7 @@ TEH_keys_denomination_by_hash (const struct TALER_DenominationHash *h_denom_pub,
|
||||
struct TEH_DenominationKey *
|
||||
TEH_keys_denomination_by_hash2 (
|
||||
struct TEH_KeyStateHandle *ksh,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct MHD_Connection *conn,
|
||||
MHD_RESULT *mret)
|
||||
{
|
||||
@ -2432,7 +2433,8 @@ TEH_keys_denomination_by_hash2 (
|
||||
|
||||
|
||||
enum TALER_ErrorCode
|
||||
TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
||||
TEH_keys_denomination_sign_withdraw (
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_BlindedPlanchet *bp,
|
||||
struct TALER_BlindedDenominationSignature *bs)
|
||||
{
|
||||
@ -2458,7 +2460,7 @@ TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
||||
bp->details.rsa_blinded_planchet.blinded_msg_size,
|
||||
bs);
|
||||
case TALER_DENOMINATION_CS:
|
||||
return TALER_CRYPTO_helper_cs_sign (
|
||||
return TALER_CRYPTO_helper_cs_sign_withdraw (
|
||||
ksh->helpers->csdh,
|
||||
&hd->h_details.h_cs,
|
||||
&bp->details.cs_blinded_planchet,
|
||||
@ -2470,8 +2472,47 @@ TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
||||
|
||||
|
||||
enum TALER_ErrorCode
|
||||
TEH_keys_denomination_cs_r_pub (const struct
|
||||
TALER_DenominationHash *h_denom_pub,
|
||||
TEH_keys_denomination_sign_melt (
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_BlindedPlanchet *bp,
|
||||
struct TALER_BlindedDenominationSignature *bs)
|
||||
{
|
||||
struct TEH_KeyStateHandle *ksh;
|
||||
struct HelperDenomination *hd;
|
||||
|
||||
ksh = TEH_keys_get_state ();
|
||||
if (NULL == ksh)
|
||||
return TALER_EC_EXCHANGE_GENERIC_KEYS_MISSING;
|
||||
hd = GNUNET_CONTAINER_multihashmap_get (ksh->helpers->denom_keys,
|
||||
&h_denom_pub->hash);
|
||||
if (NULL == hd)
|
||||
return TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN;
|
||||
if (bp->cipher != hd->denom_pub.cipher)
|
||||
return TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
||||
switch (hd->denom_pub.cipher)
|
||||
{
|
||||
case TALER_DENOMINATION_RSA:
|
||||
return TALER_CRYPTO_helper_rsa_sign (
|
||||
ksh->helpers->rsadh,
|
||||
&hd->h_details.h_rsa,
|
||||
bp->details.rsa_blinded_planchet.blinded_msg,
|
||||
bp->details.rsa_blinded_planchet.blinded_msg_size,
|
||||
bs);
|
||||
case TALER_DENOMINATION_CS:
|
||||
return TALER_CRYPTO_helper_cs_sign_melt (
|
||||
ksh->helpers->csdh,
|
||||
&hd->h_details.h_cs,
|
||||
&bp->details.cs_blinded_planchet,
|
||||
bs);
|
||||
default:
|
||||
return TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
enum TALER_ErrorCode
|
||||
TEH_keys_denomination_cs_r_pub_melt (
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_CsNonce *nonce,
|
||||
struct TALER_DenominationCSPublicRPairP *r_pub)
|
||||
{
|
||||
@ -2494,7 +2535,39 @@ TEH_keys_denomination_cs_r_pub (const struct
|
||||
return TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
||||
}
|
||||
|
||||
return TALER_CRYPTO_helper_cs_r_derive (ksh->helpers->csdh,
|
||||
return TALER_CRYPTO_helper_cs_r_derive_melt (ksh->helpers->csdh,
|
||||
&hd->h_details.h_cs,
|
||||
nonce,
|
||||
r_pub);
|
||||
}
|
||||
|
||||
|
||||
enum TALER_ErrorCode
|
||||
TEH_keys_denomination_cs_r_pub_withdraw (
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_CsNonce *nonce,
|
||||
struct TALER_DenominationCSPublicRPairP *r_pub)
|
||||
{
|
||||
struct TEH_KeyStateHandle *ksh;
|
||||
struct HelperDenomination *hd;
|
||||
|
||||
ksh = TEH_keys_get_state ();
|
||||
if (NULL == ksh)
|
||||
{
|
||||
return TALER_EC_EXCHANGE_GENERIC_KEYS_MISSING;
|
||||
}
|
||||
hd = GNUNET_CONTAINER_multihashmap_get (ksh->helpers->denom_keys,
|
||||
&h_denom_pub->hash);
|
||||
if (NULL == hd)
|
||||
{
|
||||
return TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN;
|
||||
}
|
||||
if (TALER_DENOMINATION_CS != hd->denom_pub.cipher)
|
||||
{
|
||||
return TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
|
||||
}
|
||||
|
||||
return TALER_CRYPTO_helper_cs_r_derive_withdraw (ksh->helpers->csdh,
|
||||
&hd->h_details.h_cs,
|
||||
nonce,
|
||||
r_pub);
|
||||
@ -2502,7 +2575,7 @@ TEH_keys_denomination_cs_r_pub (const struct
|
||||
|
||||
|
||||
void
|
||||
TEH_keys_denomination_revoke (const struct TALER_DenominationHash *h_denom_pub)
|
||||
TEH_keys_denomination_revoke (const struct TALER_DenominationHashP *h_denom_pub)
|
||||
{
|
||||
struct TEH_KeyStateHandle *ksh;
|
||||
struct HelperDenomination *hd;
|
||||
@ -2825,7 +2898,7 @@ load_extension_data (const char *section_name,
|
||||
|
||||
|
||||
enum GNUNET_GenericReturnValue
|
||||
TEH_keys_load_fees (const struct TALER_DenominationHash *h_denom_pub,
|
||||
TEH_keys_load_fees (const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct TALER_DenominationPublicKey *denom_pub,
|
||||
struct TALER_EXCHANGEDB_DenominationKeyMetaData *meta)
|
||||
{
|
||||
|
@ -49,7 +49,7 @@ struct TEH_DenominationKey
|
||||
/**
|
||||
* Hash code of the denomination public key.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Meta data about the type of the denomination, such as fees and validity
|
||||
@ -141,7 +141,8 @@ TEH_keys_update_states (void);
|
||||
* or NULL if @a h_denom_pub could not be found
|
||||
*/
|
||||
struct TEH_DenominationKey *
|
||||
TEH_keys_denomination_by_hash (const struct TALER_DenominationHash *h_denom_pub,
|
||||
TEH_keys_denomination_by_hash (const struct
|
||||
TALER_DenominationHashP *h_denom_pub,
|
||||
struct MHD_Connection *conn,
|
||||
MHD_RESULT *mret);
|
||||
|
||||
@ -162,29 +163,48 @@ TEH_keys_denomination_by_hash (const struct TALER_DenominationHash *h_denom_pub,
|
||||
struct TEH_DenominationKey *
|
||||
TEH_keys_denomination_by_hash2 (
|
||||
struct TEH_KeyStateHandle *ksh,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct MHD_Connection *conn,
|
||||
MHD_RESULT *mret);
|
||||
|
||||
|
||||
/**
|
||||
* Request to sign @a msg using the public key corresponding to
|
||||
* @a h_denom_pub.
|
||||
* @a h_denom_pub during a withdraw operation.
|
||||
*
|
||||
* @param h_denom_pub hash of the public key to use to sign
|
||||
* @param bp blinded planchet to sign
|
||||
* @param is_melt should we use the KDF for melting?
|
||||
* @param[out] bs set to the blind signature on success
|
||||
* @return #TALER_EC_NONE on success
|
||||
*/
|
||||
enum TALER_ErrorCode
|
||||
TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
||||
TEH_keys_denomination_sign_withdraw (
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_BlindedPlanchet *bp,
|
||||
struct TALER_BlindedDenominationSignature *bs);
|
||||
|
||||
|
||||
/**
|
||||
* Request to sign @a msg using the public key corresponding to
|
||||
* @a h_denom_pub during a refresh operation.
|
||||
*
|
||||
* @param h_denom_pub hash of the public key to use to sign
|
||||
* @param bp blinded planchet to sign
|
||||
* @param is_melt should we use the KDF for melting?
|
||||
* @param[out] bs set to the blind signature on success
|
||||
* @return #TALER_EC_NONE on success
|
||||
*/
|
||||
enum TALER_ErrorCode
|
||||
TEH_keys_denomination_sign_melt (
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_BlindedPlanchet *bp,
|
||||
struct TALER_BlindedDenominationSignature *bs);
|
||||
|
||||
|
||||
/**
|
||||
* Request to derive CS @a r_pub using the denomination corresponding to @a h_denom_pub
|
||||
* and @a nonce.
|
||||
* and @a nonce for withdrawing.
|
||||
*
|
||||
* @param h_denom_pub hash of the public key to use to derive r_pub
|
||||
* @param nonce withdraw/refresh nonce
|
||||
@ -192,8 +212,24 @@ TEH_keys_denomination_sign (const struct TALER_DenominationHash *h_denom_pub,
|
||||
* @return #TALER_EC_NONE on success
|
||||
*/
|
||||
enum TALER_ErrorCode
|
||||
TEH_keys_denomination_cs_r_pub (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
TEH_keys_denomination_cs_r_pub_withdraw (
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_CsNonce *nonce,
|
||||
struct TALER_DenominationCSPublicRPairP *r_pub);
|
||||
|
||||
|
||||
/**
|
||||
* Request to derive CS @a r_pub using the denomination corresponding to @a h_denom_pub
|
||||
* and @a nonce for melting.
|
||||
*
|
||||
* @param h_denom_pub hash of the public key to use to derive r_pub
|
||||
* @param nonce withdraw/refresh nonce
|
||||
* @param[out] r_pub where to write the result
|
||||
* @return #TALER_EC_NONE on success
|
||||
*/
|
||||
enum TALER_ErrorCode
|
||||
TEH_keys_denomination_cs_r_pub_melt (
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_CsNonce *nonce,
|
||||
struct TALER_DenominationCSPublicRPairP *r_pub);
|
||||
|
||||
@ -210,7 +246,8 @@ TEH_keys_denomination_cs_r_pub (
|
||||
* @param h_denom_pub hash of the public key to revoke
|
||||
*/
|
||||
void
|
||||
TEH_keys_denomination_revoke (const struct TALER_DenominationHash *h_denom_pub);
|
||||
TEH_keys_denomination_revoke (const struct
|
||||
TALER_DenominationHashP *h_denom_pub);
|
||||
|
||||
|
||||
/**
|
||||
@ -387,7 +424,7 @@ TEH_keys_management_get_keys_handler (const struct TEH_RequestHandler *rh,
|
||||
* #GNUNET_SYSERR on hard errors
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TEH_keys_load_fees (const struct TALER_DenominationHash *h_denom_pub,
|
||||
TEH_keys_load_fees (const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct TALER_DenominationPublicKey *denom_pub,
|
||||
struct TALER_EXCHANGEDB_DenominationKeyMetaData *meta);
|
||||
|
||||
|
@ -73,12 +73,12 @@ struct KycPoller
|
||||
* Hash of the payto:// URI we are confirming to
|
||||
* have finished the KYC for.
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
|
||||
/**
|
||||
* Hash of the payto:// URI that was given to us for auth.
|
||||
*/
|
||||
struct TALER_PaytoHash auth_h_payto;
|
||||
struct TALER_PaytoHashP auth_h_payto;
|
||||
|
||||
/**
|
||||
* When will this request time out?
|
||||
|
@ -64,7 +64,7 @@ TEH_handler_management_auditors_AP_disable (
|
||||
MHD_RESULT
|
||||
TEH_handler_management_denominations_HDP_revoke (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const json_t *root);
|
||||
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
MHD_RESULT
|
||||
TEH_handler_management_denominations_HDP_revoke (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const json_t *root)
|
||||
{
|
||||
struct TALER_MasterSignatureP master_sig;
|
||||
|
@ -234,7 +234,7 @@ TEH_handler_management_post_extensions (
|
||||
|
||||
/* Verify the signature */
|
||||
{
|
||||
struct TALER_ExtensionConfigHash h_config;
|
||||
struct TALER_ExtensionConfigHashP h_config;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
TALER_JSON_extensions_config_hash (extensions, &h_config) ||
|
||||
|
@ -40,7 +40,7 @@ struct DenomSig
|
||||
/**
|
||||
* Hash of a denomination public key.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Master signature for the @e h_denom_pub.
|
||||
|
@ -237,12 +237,23 @@ database_melt (struct MHD_Connection *connection,
|
||||
MHD_RESULT mhd_ret = MHD_NO;
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
|
||||
for (unsigned int tries = 0; tries<MAX_TRANSACTION_COMMIT_RETRIES; tries++)
|
||||
{
|
||||
qs = TEH_make_coin_known (&rmc->refresh_session.coin,
|
||||
connection,
|
||||
&rmc->known_coin_id,
|
||||
&mhd_ret);
|
||||
/* no transaction => no serialization failures should be possible */
|
||||
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
|
||||
if (GNUNET_DB_STATUS_SOFT_ERROR != qs)
|
||||
break;
|
||||
}
|
||||
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return TALER_MHD_reply_with_error (connection,
|
||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||
TALER_EC_GENERIC_DB_COMMIT_FAILED,
|
||||
"make_coin_known");
|
||||
}
|
||||
if (qs < 0)
|
||||
return mhd_ret;
|
||||
}
|
||||
@ -362,7 +373,7 @@ check_melt_valid (struct MHD_Connection *connection,
|
||||
if (GNUNET_TIME_absolute_is_past (dk->meta.expire_deposit.abs_time))
|
||||
{
|
||||
/* We are past deposit expiration time, but maybe this is a zombie? */
|
||||
struct TALER_DenominationHash denom_hash;
|
||||
struct TALER_DenominationHashP denom_hash;
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
|
||||
/* Check that the coin is dirty (we have seen it before), as we will
|
||||
@ -425,7 +436,7 @@ TEH_handler_melt (struct MHD_Connection *connection,
|
||||
GNUNET_JSON_spec_fixed_auto ("denom_pub_hash",
|
||||
&rmc.refresh_session.coin.denom_pub_hash),
|
||||
GNUNET_JSON_spec_mark_optional (
|
||||
GNUNET_JSON_spec_fixed_auto ("h_age_commitment",
|
||||
GNUNET_JSON_spec_fixed_auto ("age_commitment_hash",
|
||||
&rmc.refresh_session.coin.h_age_commitment)),
|
||||
GNUNET_JSON_spec_fixed_auto ("confirm_sig",
|
||||
&rmc.refresh_session.coin_sig),
|
||||
@ -440,10 +451,9 @@ TEH_handler_melt (struct MHD_Connection *connection,
|
||||
GNUNET_JSON_spec_end ()
|
||||
};
|
||||
|
||||
memset (&rmc,
|
||||
0,
|
||||
sizeof (rmc));
|
||||
memset (&rmc, 0, sizeof (rmc));
|
||||
rmc.refresh_session.coin.coin_pub = *coin_pub;
|
||||
|
||||
{
|
||||
enum GNUNET_GenericReturnValue ret;
|
||||
ret = TALER_MHD_parse_json_data (connection,
|
||||
@ -452,8 +462,10 @@ TEH_handler_melt (struct MHD_Connection *connection,
|
||||
if (GNUNET_OK != ret)
|
||||
return (GNUNET_SYSERR == ret) ? MHD_NO : MHD_YES;
|
||||
}
|
||||
|
||||
rmc.have_rms = (NULL != json_object_get (root,
|
||||
"rms"));
|
||||
|
||||
{
|
||||
MHD_RESULT res;
|
||||
|
||||
|
@ -180,7 +180,7 @@ verify_and_execute_recoup_refresh (
|
||||
struct RecoupContext pc;
|
||||
const struct TEH_DenominationKey *dk;
|
||||
MHD_RESULT mret;
|
||||
struct TALER_BlindedCoinHash h_blind;
|
||||
struct TALER_BlindedCoinHashP h_blind;
|
||||
|
||||
/* check denomination exists and is in recoup mode */
|
||||
dk = TEH_keys_denomination_by_hash (&coin->denom_pub_hash,
|
||||
@ -245,7 +245,7 @@ verify_and_execute_recoup_refresh (
|
||||
}
|
||||
|
||||
{
|
||||
struct TALER_CoinPubHash c_hash;
|
||||
struct TALER_CoinPubHashP c_hash;
|
||||
struct TALER_BlindedPlanchet blinded_planchet;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
|
@ -42,7 +42,7 @@ struct RecoupContext
|
||||
/**
|
||||
* Hash identifying the withdraw request.
|
||||
*/
|
||||
struct TALER_BlindedCoinHash h_coin_ev;
|
||||
struct TALER_BlindedCoinHashP h_coin_ev;
|
||||
|
||||
/**
|
||||
* Set by #recoup_transaction() to the reserve that will
|
||||
@ -250,7 +250,7 @@ verify_and_execute_recoup (
|
||||
(a bit later) check that this coin was indeed
|
||||
signed by us. */
|
||||
{
|
||||
struct TALER_CoinPubHash c_hash;
|
||||
struct TALER_CoinPubHashP c_hash;
|
||||
struct TALER_BlindedPlanchet blinded_planchet;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
|
@ -216,7 +216,7 @@ check_commitment (struct RevealContext *rctx,
|
||||
{
|
||||
enum TALER_ErrorCode ec;
|
||||
|
||||
ec = TEH_keys_denomination_cs_r_pub (
|
||||
ec = TEH_keys_denomination_cs_r_pub_melt (
|
||||
&rctx->rrcs[j].h_denom_pub,
|
||||
&nonces[aoff],
|
||||
&alg_values->details.cs_values);
|
||||
@ -277,9 +277,9 @@ check_commitment (struct RevealContext *rctx,
|
||||
union TALER_DenominationBlindingKeyP bks;
|
||||
const struct TALER_ExchangeWithdrawValues *alg_value
|
||||
= &rctx->rrcs[j].exchange_vals;
|
||||
struct TALER_PlanchetDetail pd;
|
||||
struct TALER_PlanchetDetail pd = {0};
|
||||
struct TALER_AgeCommitmentHash *hac = NULL;
|
||||
struct TALER_CoinPubHash c_hash;
|
||||
struct TALER_CoinPubHashP c_hash;
|
||||
struct TALER_PlanchetMasterSecretP ps;
|
||||
|
||||
rcd->dk = &rctx->dks[j]->denom_pub;
|
||||
@ -296,17 +296,23 @@ check_commitment (struct RevealContext *rctx,
|
||||
* the transfer_secret and the old age commitment. */
|
||||
if (NULL != rctx->old_age_commitment)
|
||||
{
|
||||
struct TALER_AgeCommitment ac = {0};
|
||||
uint64_t seed = (uint64_t) ts.key.bits[0]
|
||||
| (uint64_t) ts.key.bits[1] << 32;
|
||||
struct TALER_AgeCommitmentProof acp = {
|
||||
/* we only need the commitment, not the proof, for the call to
|
||||
* TALER_age_commitment_derive. */
|
||||
.commitment = *(rctx->old_age_commitment)
|
||||
};
|
||||
struct TALER_AgeCommitmentProof nacp = {0};
|
||||
struct TALER_AgeCommitmentHash h = {0};
|
||||
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
TALER_age_commitment_derive (
|
||||
rctx->old_age_commitment,
|
||||
ts.key.bits[0],
|
||||
&ac));
|
||||
|
||||
TALER_age_commitment_hash (&ac, &h);
|
||||
&acp,
|
||||
seed,
|
||||
&nacp));
|
||||
|
||||
TALER_age_commitment_hash (&nacp.commitment, &h);
|
||||
hac = &h;
|
||||
}
|
||||
|
||||
@ -590,7 +596,7 @@ resolve_refreshes_reveal_denominations (struct MHD_Connection *connection,
|
||||
if (TEH_age_restriction_enabled &&
|
||||
((NULL == old_age_commitment_json) !=
|
||||
TALER_AgeCommitmentHash_isNullOrZero (
|
||||
&rctx->melt.session.h_age_commitment)))
|
||||
&rctx->melt.session.coin.h_age_commitment)))
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return MHD_NO;
|
||||
@ -602,7 +608,7 @@ resolve_refreshes_reveal_denominations (struct MHD_Connection *connection,
|
||||
(NULL != old_age_commitment_json))
|
||||
{
|
||||
enum GNUNET_GenericReturnValue res;
|
||||
struct TALER_AgeCommitment *oac = rctx->old_age_commitment;
|
||||
struct TALER_AgeCommitment *oac;
|
||||
size_t ng = json_array_size (old_age_commitment_json);
|
||||
bool failed = true;
|
||||
|
||||
@ -610,10 +616,10 @@ resolve_refreshes_reveal_denominations (struct MHD_Connection *connection,
|
||||
GNUNET_assert (ng ==
|
||||
TALER_extensions_age_restriction_num_groups ());
|
||||
|
||||
oac = GNUNET_new (struct TALER_AgeCommitment);
|
||||
rctx->old_age_commitment = GNUNET_new (struct TALER_AgeCommitment);
|
||||
oac = rctx->old_age_commitment;
|
||||
oac->mask = TEH_age_mask;
|
||||
oac->num_pub = ng;
|
||||
oac->num_priv = 0; /* no private keys are needed for the reveal phase */
|
||||
oac->num = ng;
|
||||
oac->pub = GNUNET_new_array (ng, struct TALER_AgeCommitmentPublicKeyP);
|
||||
|
||||
/* Extract old age commitment */
|
||||
@ -630,7 +636,8 @@ resolve_refreshes_reveal_denominations (struct MHD_Connection *connection,
|
||||
ac_spec,
|
||||
i,
|
||||
-1);
|
||||
GNUNET_break (GNUNET_OK != res);
|
||||
|
||||
GNUNET_break_op (GNUNET_OK == res);
|
||||
if (GNUNET_OK != res)
|
||||
goto clean_age;
|
||||
}
|
||||
@ -640,13 +647,10 @@ resolve_refreshes_reveal_denominations (struct MHD_Connection *connection,
|
||||
struct TALER_AgeCommitmentHash hac = {0};
|
||||
TALER_age_commitment_hash (oac, &hac);
|
||||
if (0 != memcmp (&hac,
|
||||
&rctx->melt.session.h_age_commitment,
|
||||
&rctx->melt.session.coin.h_age_commitment,
|
||||
sizeof(struct TALER_AgeCommitmentHash)))
|
||||
{
|
||||
GNUNET_break (0);
|
||||
goto clean_age;
|
||||
}
|
||||
}
|
||||
|
||||
failed = false;
|
||||
|
||||
@ -654,7 +658,10 @@ clean_age:
|
||||
if (failed)
|
||||
{
|
||||
TALER_age_commitment_free (oac);
|
||||
return (GNUNET_NO == res) ? MHD_YES : MHD_NO;
|
||||
return TALER_MHD_reply_with_error (connection,
|
||||
MHD_HTTP_BAD_REQUEST,
|
||||
TALER_EC_EXCHANGE_REFRESHES_REVEAL_AGE_RESTRICTION_COMMITMENT_INVALID,
|
||||
"old_age_commitment");
|
||||
}
|
||||
}
|
||||
|
||||
@ -733,7 +740,9 @@ clean_age:
|
||||
{
|
||||
enum TALER_ErrorCode ec;
|
||||
|
||||
ec = TEH_keys_denomination_sign (
|
||||
// FIXME: replace with a batch call that
|
||||
// passes all coins in once go!
|
||||
ec = TEH_keys_denomination_sign_melt (
|
||||
&rrcs[i].h_denom_pub,
|
||||
&rcds[i].blinded_planchet,
|
||||
&rrcs[i].coin_sig);
|
||||
@ -911,7 +920,7 @@ TEH_handler_reveal (struct TEH_RequestContext *rc,
|
||||
json_t *transfer_privs;
|
||||
json_t *link_sigs;
|
||||
json_t *new_denoms_h;
|
||||
json_t *old_age_commitment = NULL;
|
||||
json_t *old_age_commitment;
|
||||
struct RevealContext rctx;
|
||||
struct GNUNET_JSON_Specification spec[] = {
|
||||
GNUNET_JSON_spec_fixed_auto ("transfer_pub",
|
||||
|
@ -204,7 +204,7 @@ static MHD_RESULT
|
||||
verify_and_execute_refund (struct MHD_Connection *connection,
|
||||
struct TALER_EXCHANGEDB_Refund *refund)
|
||||
{
|
||||
struct TALER_DenominationHash denom_hash;
|
||||
struct TALER_DenominationHashP denom_hash;
|
||||
struct RefundContext rctx = {
|
||||
.refund = refund
|
||||
};
|
||||
|
@ -61,7 +61,7 @@ TEH_RESPONSE_compile_transaction_history (
|
||||
{
|
||||
const struct TALER_EXCHANGEDB_DepositListEntry *deposit =
|
||||
pos->details.deposit;
|
||||
struct TALER_MerchantWireHash h_wire;
|
||||
struct TALER_MerchantWireHashP h_wire;
|
||||
|
||||
TALER_merchant_wire_signature_hash (deposit->receiver_wire_account,
|
||||
&deposit->wire_salt,
|
||||
@ -111,6 +111,9 @@ TEH_RESPONSE_compile_transaction_history (
|
||||
GNUNET_JSON_pack_data_auto ("h_denom_pub",
|
||||
&deposit->h_denom_pub),
|
||||
GNUNET_JSON_pack_allow_null (
|
||||
deposit->no_age_commitment ?
|
||||
GNUNET_JSON_pack_string (
|
||||
"h_age_commitment", NULL) :
|
||||
GNUNET_JSON_pack_data_auto ("h_age_commitment",
|
||||
&deposit->h_age_commitment)),
|
||||
GNUNET_JSON_pack_data_auto ("coin_sig",
|
||||
@ -146,7 +149,7 @@ TEH_RESPONSE_compile_transaction_history (
|
||||
|
||||
/* Age restriction is optional. We communicate a NULL value to
|
||||
* JSON_PACK below */
|
||||
if (! TALER_AgeCommitmentHash_isNullOrZero (&melt->h_age_commitment))
|
||||
if (! melt->no_age_commitment)
|
||||
phac = &melt->h_age_commitment;
|
||||
|
||||
if (0 !=
|
||||
@ -410,7 +413,7 @@ TEH_RESPONSE_compile_transaction_history (
|
||||
MHD_RESULT
|
||||
TEH_RESPONSE_reply_unknown_denom_pub_hash (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_DenominationHash *dph)
|
||||
const struct TALER_DenominationHashP *dph)
|
||||
{
|
||||
struct TALER_ExchangePublicKeyP epub;
|
||||
struct TALER_ExchangeSignatureP esig;
|
||||
@ -456,7 +459,7 @@ TEH_RESPONSE_reply_unknown_denom_pub_hash (
|
||||
MHD_RESULT
|
||||
TEH_RESPONSE_reply_expired_denom_pub_hash (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_DenominationHash *dph,
|
||||
const struct TALER_DenominationHashP *dph,
|
||||
enum TALER_ErrorCode ec,
|
||||
const char *oper)
|
||||
{
|
||||
@ -509,7 +512,7 @@ TEH_RESPONSE_reply_expired_denom_pub_hash (
|
||||
MHD_RESULT
|
||||
TEH_RESPONSE_reply_invalid_denom_cipher_for_operation (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_DenominationHash *dph)
|
||||
const struct TALER_DenominationHashP *dph)
|
||||
{
|
||||
struct TALER_ExchangePublicKeyP epub;
|
||||
struct TALER_ExchangeSignatureP esig;
|
||||
|
@ -58,7 +58,7 @@ TEH_RESPONSE_compile_reserve_history (
|
||||
MHD_RESULT
|
||||
TEH_RESPONSE_reply_unknown_denom_pub_hash (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_DenominationHash *dph);
|
||||
const struct TALER_DenominationHashP *dph);
|
||||
|
||||
|
||||
/**
|
||||
@ -74,7 +74,7 @@ TEH_RESPONSE_reply_unknown_denom_pub_hash (
|
||||
MHD_RESULT
|
||||
TEH_RESPONSE_reply_expired_denom_pub_hash (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_DenominationHash *dph,
|
||||
const struct TALER_DenominationHashP *dph,
|
||||
enum TALER_ErrorCode ec,
|
||||
const char *oper);
|
||||
|
||||
@ -89,7 +89,7 @@ TEH_RESPONSE_reply_expired_denom_pub_hash (
|
||||
MHD_RESULT
|
||||
TEH_RESPONSE_reply_invalid_denom_cipher_for_operation (
|
||||
struct MHD_Connection *connection,
|
||||
const struct TALER_DenominationHash *dph);
|
||||
const struct TALER_DenominationHashP *dph);
|
||||
|
||||
|
||||
/**
|
||||
|
@ -51,7 +51,7 @@ struct AggregatedDepositDetail
|
||||
/**
|
||||
* Hash of the contract terms.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
|
||||
/**
|
||||
* Coin's public key of the deposited coin.
|
||||
@ -260,6 +260,7 @@ struct WtidTransactionContext
|
||||
* @param rowid which row in the DB is the information from (for diagnostics), ignored
|
||||
* @param merchant_pub public key of the merchant (should be same for all callbacks with the same @e cls)
|
||||
* @param account_payto_uri where the funds were sent
|
||||
* @param h_payto hash over @a account_payto_uri as it is in the DB
|
||||
* @param exec_time execution time of the wire transfer (should be same for all callbacks with the same @e cls)
|
||||
* @param h_contract_terms which proposal was this payment about
|
||||
* @param denom_pub denomination public key of the @a coin_pub (ignored)
|
||||
@ -272,8 +273,9 @@ handle_deposit_data (void *cls,
|
||||
uint64_t rowid,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const char *account_payto_uri,
|
||||
const struct TALER_PaytoHashP *h_payto,
|
||||
struct GNUNET_TIME_Timestamp exec_time,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *deposit_value,
|
||||
|
@ -94,7 +94,7 @@ struct WithdrawContext
|
||||
/**
|
||||
* Hash of the (blinded) message to be signed by the Exchange.
|
||||
*/
|
||||
struct TALER_BlindedCoinHash h_coin_envelope;
|
||||
struct TALER_BlindedCoinHashP h_coin_envelope;
|
||||
|
||||
/**
|
||||
* Value of the coin being exchanged (matching the denomination key)
|
||||
@ -505,7 +505,7 @@ TEH_handler_withdraw (struct TEH_RequestContext *rc,
|
||||
}
|
||||
|
||||
/* Sign before transaction! */
|
||||
ec = TEH_keys_denomination_sign (
|
||||
ec = TEH_keys_denomination_sign_withdraw (
|
||||
&wc.collectable.denom_pub_hash,
|
||||
&wc.blinded_planchet,
|
||||
&wc.collectable.sig);
|
||||
|
@ -55,6 +55,7 @@ DROP TABLE IF EXISTS reserves CASCADE;
|
||||
DROP TABLE IF EXISTS denomination_revocations CASCADE;
|
||||
DROP TABLE IF EXISTS denominations CASCADE;
|
||||
|
||||
|
||||
DROP FUNCTION IF EXISTS exchange_do_withdraw(bigint,int,bytea,bytea,bytea,bytea,bytea,bigint,bigint) ;
|
||||
|
||||
DROP FUNCTION IF EXISTS exchange_do_withdraw_limit_check(bytea,bigint,bigint,int) ;
|
||||
@ -72,4 +73,5 @@ DROP FUNCTION IF EXISTS exchange_do_recoup_to_reserve;
|
||||
-- FIXME: drop other stored functions!
|
||||
|
||||
-- And we're out of here...
|
||||
|
||||
COMMIT;
|
||||
|
@ -88,6 +88,14 @@ CREATE TABLE IF NOT EXISTS wire_targets_default
|
||||
PARTITION OF wire_targets
|
||||
FOR VALUES WITH (MODULUS 1, REMAINDER 0);
|
||||
|
||||
-- FIXME partition by serial_id rather than h_payto,
|
||||
-- it is used more in join conditions - crucial for sharding to select this.
|
||||
-- Author: (Boss Marco)
|
||||
CREATE INDEX IF NOT EXISTS wire_targets_serial_id_index
|
||||
ON wire_targets
|
||||
(wire_target_serial_id
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS reserves
|
||||
(reserve_uuid BIGINT GENERATED BY DEFAULT AS IDENTITY
|
||||
,reserve_pub BYTEA PRIMARY KEY CHECK(LENGTH(reserve_pub)=32)
|
||||
@ -196,7 +204,7 @@ CREATE INDEX IF NOT EXISTS reserves_close_by_reserve_pub_index
|
||||
|
||||
CREATE TABLE IF NOT EXISTS reserves_out
|
||||
(reserve_out_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY -- UNIQUE
|
||||
,h_blind_ev BYTEA CHECK (LENGTH(h_blind_ev)=64) -- UNIQUE
|
||||
,h_blind_ev BYTEA CHECK (LENGTH(h_blind_ev)=64) UNIQUE
|
||||
,denominations_serial INT8 NOT NULL REFERENCES denominations (denominations_serial)
|
||||
,denom_sig BYTEA NOT NULL
|
||||
,reserve_uuid INT8 NOT NULL -- REFERENCES reserves (reserve_uuid) ON DELETE CASCADE
|
||||
@ -311,7 +319,7 @@ CREATE TABLE IF NOT EXISTS known_coins
|
||||
(known_coin_id BIGINT GENERATED BY DEFAULT AS IDENTITY -- UNIQUE
|
||||
,denominations_serial INT8 NOT NULL REFERENCES denominations (denominations_serial) ON DELETE CASCADE
|
||||
,coin_pub BYTEA NOT NULL PRIMARY KEY CHECK (LENGTH(coin_pub)=32)
|
||||
,age_hash BYTEA CHECK (LENGTH(age_hash)=32)
|
||||
,age_commitment_hash BYTEA CHECK (LENGTH(age_commitment_hash)=32)
|
||||
,denom_sig BYTEA NOT NULL
|
||||
,remaining_val INT8 NOT NULL
|
||||
,remaining_frac INT4 NOT NULL
|
||||
@ -325,8 +333,8 @@ COMMENT ON COLUMN known_coins.coin_pub
|
||||
IS 'EdDSA public key of the coin';
|
||||
COMMENT ON COLUMN known_coins.remaining_val
|
||||
IS 'Value of the coin that remains to be spent';
|
||||
COMMENT ON COLUMN known_coins.age_hash
|
||||
IS 'Optional hash for age restrictions as per DD 24 (active if denom_type has the respective bit set)';
|
||||
COMMENT ON COLUMN known_coins.age_commitment_hash
|
||||
IS 'Optional hash of the age commitment for age restrictions as per DD 24 (active if denom_type has the respective bit set)';
|
||||
COMMENT ON COLUMN known_coins.denom_sig
|
||||
IS 'This is the signature of the exchange that affirms that the coin is a valid coin. The specific signature type depends on denom_type of the denomination.';
|
||||
CREATE TABLE IF NOT EXISTS known_coins_default
|
||||
@ -358,7 +366,7 @@ COMMENT ON COLUMN refresh_commitments.rc
|
||||
COMMENT ON COLUMN refresh_commitments.old_coin_pub
|
||||
IS 'Coin being melted in the refresh process.';
|
||||
COMMENT ON COLUMN refresh_commitments.h_age_commitment
|
||||
IS '(optional) age commitment that was involved in the minting process of the coin, may be NULL.';
|
||||
IS 'The (optional) age commitment that was involved in the minting process of the coin, may be NULL.';
|
||||
CREATE TABLE IF NOT EXISTS refresh_commitments_default
|
||||
PARTITION OF refresh_commitments
|
||||
FOR VALUES WITH (MODULUS 1, REMAINDER 0);
|
||||
@ -581,7 +589,7 @@ CREATE INDEX IF NOT EXISTS wire_out_by_wire_target_serial_id_index
|
||||
CREATE TABLE IF NOT EXISTS aggregation_tracking
|
||||
(aggregation_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY -- UNIQUE
|
||||
,deposit_serial_id INT8 PRIMARY KEY -- REFERENCES deposits (deposit_serial_id) ON DELETE CASCADE
|
||||
,wtid_raw BYTEA CONSTRAINT wire_out_ref REFERENCES wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE
|
||||
,wtid_raw BYTEA NOT NULL CONSTRAINT wire_out_ref REFERENCES wire_out(wtid_raw) ON DELETE CASCADE DEFERRABLE
|
||||
)
|
||||
PARTITION BY HASH (deposit_serial_id);
|
||||
COMMENT ON TABLE aggregation_tracking
|
||||
@ -634,7 +642,7 @@ CREATE TABLE IF NOT EXISTS recoup
|
||||
,recoup_timestamp INT8 NOT NULL
|
||||
,reserve_out_serial_id INT8 NOT NULL -- REFERENCES reserves_out (reserve_out_serial_id) ON DELETE CASCADE
|
||||
)
|
||||
PARTITION BY RANGE (known_coin_id);
|
||||
PARTITION BY HASH (known_coin_id);
|
||||
COMMENT ON TABLE recoup
|
||||
IS 'Information about recoups that were executed between a coin and a reserve. In this type of recoup, the amount is credited back to the reserve from which the coin originated.';
|
||||
COMMENT ON COLUMN recoup.known_coin_id
|
||||
@ -647,7 +655,7 @@ COMMENT ON COLUMN recoup.coin_blind
|
||||
IS 'Denomination blinding key used when creating the blinded coin from the planchet. Secret revealed during the recoup to provide the linkage between the coin and the withdraw operation.';
|
||||
CREATE TABLE IF NOT EXISTS recoup_default
|
||||
PARTITION OF recoup
|
||||
DEFAULT;
|
||||
FOR VALUES WITH (MODULUS 1, REMAINDER 0);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS recoup_by_recoup_uuid_index
|
||||
ON recoup
|
||||
@ -670,7 +678,7 @@ CREATE TABLE IF NOT EXISTS recoup_refresh
|
||||
,recoup_timestamp INT8 NOT NULL
|
||||
,rrc_serial INT8 NOT NULL -- REFERENCES refresh_revealed_coins (rrc_serial) ON DELETE CASCADE -- UNIQUE
|
||||
)
|
||||
PARTITION BY RANGE (known_coin_id);
|
||||
PARTITION BY HASH (known_coin_id);
|
||||
COMMENT ON TABLE recoup_refresh
|
||||
IS 'Table of coins that originated from a refresh operation and that were recouped. Links the (fresh) coin to the melted operation (and thus the old coin). A recoup on a refreshed coin credits the old coin and debits the fresh coin.';
|
||||
COMMENT ON COLUMN recoup_refresh.known_coin_id
|
||||
@ -681,7 +689,7 @@ COMMENT ON COLUMN recoup_refresh.coin_blind
|
||||
IS 'Denomination blinding key used when creating the blinded coin from the planchet. Secret revealed during the recoup to provide the linkage between the coin and the refresh operation.';
|
||||
CREATE TABLE IF NOT EXISTS recoup_refresh_default
|
||||
PARTITION OF recoup_refresh
|
||||
DEFAULT;
|
||||
FOR VALUES WITH (MODULUS 1, REMAINDER 0);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS recoup_refresh_by_recoup_refresh_uuid_index
|
||||
ON recoup_refresh
|
||||
@ -701,7 +709,7 @@ CREATE TABLE IF NOT EXISTS prewire
|
||||
,failed BOOLEAN NOT NULL DEFAULT false
|
||||
,buf BYTEA NOT NULL
|
||||
)
|
||||
PARTITION BY RANGE (prewire_uuid);
|
||||
PARTITION BY HASH (prewire_uuid);
|
||||
COMMENT ON TABLE prewire
|
||||
IS 'pre-commit data for wire transfers we are about to execute';
|
||||
COMMENT ON COLUMN prewire.failed
|
||||
@ -712,7 +720,7 @@ COMMENT ON COLUMN prewire.buf
|
||||
IS 'serialized data to send to the bank to execute the wire transfer';
|
||||
CREATE TABLE IF NOT EXISTS prewire_default
|
||||
PARTITION OF prewire
|
||||
DEFAULT;
|
||||
FOR VALUES WITH (MODULUS 1, REMAINDER 0);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS prewire_by_finished_index
|
||||
ON prewire
|
||||
@ -762,6 +770,9 @@ COMMENT ON COLUMN cs_nonce_locks.op_hash
|
||||
IS 'hash (RC for refresh, blind coin hash for withdraw) the nonce may be used with';
|
||||
COMMENT ON COLUMN cs_nonce_locks.max_denomination_serial
|
||||
IS 'Maximum number of a CS denomination serial the nonce could be used with, for GC';
|
||||
CREATE TABLE IF NOT EXISTS cs_nonce_locks_default
|
||||
PARTITION OF cs_nonce_locks
|
||||
FOR VALUES WITH (MODULUS 1, REMAINDER 0);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS work_shards
|
||||
@ -828,6 +839,225 @@ CREATE INDEX IF NOT EXISTS revolving_work_shards_by_job_name_active_last_attempt
|
||||
);
|
||||
|
||||
|
||||
-- Partitions
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION create_table_partition(
|
||||
source_table_name VARCHAR
|
||||
,modulus INTEGER
|
||||
,num_partitions INTEGER
|
||||
)
|
||||
RETURNS VOID
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
|
||||
RAISE NOTICE 'Creating partition %_%', source_table_name, num_partitions;
|
||||
|
||||
EXECUTE FORMAT(
|
||||
'CREATE TABLE IF NOT EXISTS %I '
|
||||
'PARTITION OF %I '
|
||||
'FOR VALUES WITH (MODULUS %s, REMAINDER %s)'
|
||||
,source_table_name || '_' || num_partitions
|
||||
,source_table_name
|
||||
,modulus
|
||||
,num_partitions-1
|
||||
);
|
||||
|
||||
END
|
||||
$$;
|
||||
|
||||
CREATE OR REPLACE FUNCTION detach_default_partitions()
|
||||
RETURNS VOID
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
|
||||
RAISE NOTICE 'Detaching all default table partitions';
|
||||
|
||||
ALTER TABLE IF EXISTS wire_targets
|
||||
DETACH PARTITION wire_targets_default;
|
||||
ALTER TABLE IF EXISTS reserves
|
||||
DETACH PARTITION reserves_default;
|
||||
ALTER TABLE IF EXISTS reserves_in
|
||||
DETACH PARTITION reserves_in_default;
|
||||
ALTER TABLE IF EXISTS reserves_close
|
||||
DETACH PARTITION reserves_close_default;
|
||||
ALTER TABLE IF EXISTS reserves_out
|
||||
DETACH PARTITION reserves_out_default;
|
||||
ALTER TABLE IF EXISTS known_coins
|
||||
DETACH PARTITION known_coins_default;
|
||||
ALTER TABLE IF EXISTS refresh_commitments
|
||||
DETACH PARTITION refresh_commitments_default;
|
||||
ALTER TABLE IF EXISTS refresh_revealed_coins
|
||||
DETACH PARTITION refresh_revealed_coins_default;
|
||||
ALTER TABLE IF EXISTS refresh_transfer_keys
|
||||
DETACH PARTITION refresh_transfer_keys_default;
|
||||
ALTER TABLE IF EXISTS deposits
|
||||
DETACH PARTITION deposits_default;
|
||||
ALTER TABLE IF EXISTS refunds
|
||||
DETACH PARTITION refunds_default;
|
||||
ALTER TABLE IF EXISTS wire_out
|
||||
DETACH PARTITION wire_out_default;
|
||||
ALTER TABLE IF EXISTS aggregation_tracking
|
||||
DETACH PARTITION aggregation_tracking_default;
|
||||
ALTER TABLE IF EXISTS recoup
|
||||
DETACH PARTITION recoup_default;
|
||||
ALTER TABLE IF EXISTS recoup_refresh
|
||||
DETACH PARTITION recoup_refresh_default;
|
||||
ALTER TABLE IF EXISTS prewire
|
||||
DETACH PARTITION prewire_default;
|
||||
ALTER TABLE IF EXISTS cs_nonce_locks
|
||||
DETACH partition cs_nonce_locks_default;
|
||||
|
||||
END
|
||||
$$;
|
||||
|
||||
COMMENT ON FUNCTION detach_default_partitions
|
||||
IS 'We need to drop default and create new one before deleting the default partitions
|
||||
otherwise constraints get lost too';
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION drop_default_partitions()
|
||||
RETURNS VOID
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
|
||||
RAISE NOTICE 'Dropping default table partitions';
|
||||
|
||||
DROP TABLE IF EXISTS wire_targets_default;
|
||||
DROP TABLE IF EXISTS reserves_default;
|
||||
DROP TABLE IF EXISTS reserves_in_default;
|
||||
DROP TABLE IF EXISTS reserves_close_default;
|
||||
DROP TABLE IF EXISTS reserves_out_default;
|
||||
DROP TABLE IF EXISTS known_coins_default;
|
||||
DROP TABLE IF EXISTS refresh_commitments_default;
|
||||
DROP TABLE IF EXISTS refresh_revealed_coins_default;
|
||||
DROP TABLE IF EXISTS refresh_transfer_keys_default;
|
||||
DROP TABLE IF EXISTS deposits_default;
|
||||
DROP TABLE IF EXISTS refunds_default;
|
||||
DROP TABLE IF EXISTS wire_out_default;
|
||||
DROP TABLE IF EXISTS aggregation_tracking_default;
|
||||
DROP TABLE IF EXISTS recoup_default;
|
||||
DROP TABLE IF EXISTS recoup_refresh_default;
|
||||
DROP TABLE IF EXISTS prewire_default;
|
||||
DROP TABLE IF EXISTS cs_nonce_locks_default;
|
||||
|
||||
END
|
||||
$$;
|
||||
|
||||
CREATE OR REPLACE FUNCTION create_partitions(
|
||||
num_partitions INTEGER
|
||||
)
|
||||
RETURNS VOID
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
DECLARE
|
||||
modulus INTEGER;
|
||||
BEGIN
|
||||
|
||||
modulus := num_partitions;
|
||||
|
||||
PERFORM detach_default_partitions();
|
||||
|
||||
LOOP
|
||||
PERFORM create_table_partition(
|
||||
'wire_targets'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'reserves'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'reserves_in'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'reserves_close'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'reserves_out'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'known_coins'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'refresh_commitments'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'refresh_revealed_coins'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'refresh_transfer_keys'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'deposits'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'refunds'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'wire_out'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'aggregation_tracking'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'recoup'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'recoup_refresh'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'prewire'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
PERFORM create_table_partition(
|
||||
'cs_nonce_locks'
|
||||
,modulus
|
||||
,num_partitions
|
||||
);
|
||||
|
||||
num_partitions=num_partitions-1;
|
||||
EXIT WHEN num_partitions=0;
|
||||
|
||||
END LOOP;
|
||||
|
||||
PERFORM drop_default_partitions();
|
||||
|
||||
END
|
||||
$$;
|
||||
|
||||
-- Stored procedures
|
||||
|
||||
|
||||
@ -1078,6 +1308,23 @@ COMMENT ON FUNCTION exchange_do_withdraw_limit_check(INT8, INT8, INT8, INT4)
|
||||
IS 'Check whether the withdrawals from the given reserve since the given time are below the given threshold';
|
||||
|
||||
|
||||
-- NOTE: experiment, currently dead, see postgres_Start_deferred_wire_out;
|
||||
-- now done inline. FIXME: Remove code here once inline version is confirmed working nicely!
|
||||
CREATE OR REPLACE PROCEDURE defer_wire_out()
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM information_Schema.constraint_column_usage
|
||||
WHERE table_name='wire_out'
|
||||
AND constraint_name='wire_out_ref')
|
||||
THEN
|
||||
SET CONSTRAINTS wire_out_ref DEFERRED;
|
||||
END IF;
|
||||
|
||||
END $$;
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION exchange_do_deposit(
|
||||
@ -1131,7 +1378,7 @@ INSERT INTO wire_targets
|
||||
VALUES
|
||||
(in_h_payto
|
||||
,in_receiver_wire_account)
|
||||
ON CONFLICT (h_payto) DO NOTHING
|
||||
ON CONFLICT DO NOTHING -- for CONFLICT ON (h_payto)
|
||||
RETURNING wire_target_serial_id INTO wtsi;
|
||||
|
||||
IF NOT FOUND
|
||||
@ -1259,6 +1506,7 @@ CREATE OR REPLACE FUNCTION exchange_do_melt(
|
||||
IN in_old_coin_pub BYTEA,
|
||||
IN in_old_coin_sig BYTEA,
|
||||
IN in_known_coin_id INT8, -- not used, but that's OK
|
||||
IN in_h_age_commitment BYTEA,
|
||||
IN in_noreveal_index INT4,
|
||||
IN in_zombie_required BOOLEAN,
|
||||
OUT out_balance_ok BOOLEAN,
|
||||
@ -1281,6 +1529,7 @@ INSERT INTO refresh_commitments
|
||||
,old_coin_sig
|
||||
,amount_with_fee_val
|
||||
,amount_with_fee_frac
|
||||
,h_age_commitment
|
||||
,noreveal_index
|
||||
)
|
||||
VALUES
|
||||
@ -1289,6 +1538,7 @@ INSERT INTO refresh_commitments
|
||||
,in_old_coin_sig
|
||||
,in_amount_with_fee_val
|
||||
,in_amount_with_fee_frac
|
||||
,in_h_age_commitment
|
||||
,in_noreveal_index)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
|
@ -35,10 +35,14 @@ static enum GNUNET_DB_QueryStatus
|
||||
irbt_cb_table_denominations (struct PostgresClosure *pg,
|
||||
const struct TALER_EXCHANGEDB_TableData *td)
|
||||
{
|
||||
struct TALER_DenominationHash denom_hash;
|
||||
struct TALER_DenominationHashP denom_hash;
|
||||
struct GNUNET_PQ_QueryParam params[] = {
|
||||
GNUNET_PQ_query_param_uint64 (&td->serial),
|
||||
GNUNET_PQ_query_param_auto_from_type (&denom_hash),
|
||||
GNUNET_PQ_query_param_uint32 (
|
||||
&td->details.denominations.denom_type),
|
||||
GNUNET_PQ_query_param_uint32 (
|
||||
&td->details.denominations.age_mask),
|
||||
TALER_PQ_query_param_denom_pub (
|
||||
&td->details.denominations.denom_pub),
|
||||
GNUNET_PQ_query_param_auto_from_type (
|
||||
@ -109,14 +113,17 @@ static enum GNUNET_DB_QueryStatus
|
||||
irbt_cb_table_wire_targets (struct PostgresClosure *pg,
|
||||
const struct TALER_EXCHANGEDB_TableData *td)
|
||||
{
|
||||
struct TALER_PaytoHash payto_hash;
|
||||
struct TALER_PaytoHashP payto_hash;
|
||||
struct GNUNET_PQ_QueryParam params[] = {
|
||||
GNUNET_PQ_query_param_uint64 (&td->serial),
|
||||
GNUNET_PQ_query_param_auto_from_type (&payto_hash),
|
||||
GNUNET_PQ_query_param_string (
|
||||
td->details.wire_targets.payto_uri),
|
||||
GNUNET_PQ_query_param_auto_from_type (
|
||||
&td->details.wire_targets.kyc_ok),
|
||||
GNUNET_PQ_query_param_string (
|
||||
NULL == td->details.wire_targets.external_id
|
||||
? GNUNET_PQ_query_param_null ()
|
||||
: GNUNET_PQ_query_param_string (
|
||||
td->details.wire_targets.external_id),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
@ -260,13 +267,12 @@ static enum GNUNET_DB_QueryStatus
|
||||
irbt_cb_table_auditors (struct PostgresClosure *pg,
|
||||
const struct TALER_EXCHANGEDB_TableData *td)
|
||||
{
|
||||
uint8_t is_active = td->details.auditors.is_active ? 1 : 0;
|
||||
struct GNUNET_PQ_QueryParam params[] = {
|
||||
GNUNET_PQ_query_param_uint64 (&td->serial),
|
||||
GNUNET_PQ_query_param_auto_from_type (&td->details.auditors.auditor_pub),
|
||||
GNUNET_PQ_query_param_string (td->details.auditors.auditor_name),
|
||||
GNUNET_PQ_query_param_string (td->details.auditors.auditor_url),
|
||||
GNUNET_PQ_query_param_auto_from_type (&is_active),
|
||||
GNUNET_PQ_query_param_bool (&td->details.auditors.is_active),
|
||||
GNUNET_PQ_query_param_timestamp (&td->details.auditors.last_change),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
@ -376,6 +382,8 @@ irbt_cb_table_known_coins (struct PostgresClosure *pg,
|
||||
&td->details.known_coins.denom_sig),
|
||||
GNUNET_PQ_query_param_uint64 (
|
||||
&td->details.known_coins.denominations_serial),
|
||||
TALER_PQ_query_param_amount (
|
||||
&td->details.known_coins.remaining),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
|
||||
@ -406,6 +414,8 @@ irbt_cb_table_refresh_commitments (struct PostgresClosure *pg,
|
||||
&td->details.refresh_commitments.noreveal_index),
|
||||
GNUNET_PQ_query_param_auto_from_type (
|
||||
&td->details.refresh_commitments.old_coin_pub),
|
||||
GNUNET_PQ_query_param_auto_from_type (
|
||||
&td->details.refresh_commitments.h_age_commitment),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
|
||||
@ -498,9 +508,6 @@ static enum GNUNET_DB_QueryStatus
|
||||
irbt_cb_table_deposits (struct PostgresClosure *pg,
|
||||
const struct TALER_EXCHANGEDB_TableData *td)
|
||||
{
|
||||
uint8_t tiny = td->details.deposits.tiny ? 1 : 0;
|
||||
uint8_t done = td->details.deposits.done ? 1 : 0;
|
||||
uint8_t extension_blocked = td->details.deposits.extension_blocked ? 1 : 0;
|
||||
struct GNUNET_PQ_QueryParam params[] = {
|
||||
GNUNET_PQ_query_param_uint64 (&td->serial),
|
||||
GNUNET_PQ_query_param_uint64 (&td->details.deposits.shard),
|
||||
@ -517,10 +524,12 @@ irbt_cb_table_deposits (struct PostgresClosure *pg,
|
||||
GNUNET_PQ_query_param_auto_from_type (&td->details.deposits.coin_sig),
|
||||
GNUNET_PQ_query_param_auto_from_type (&td->details.deposits.wire_salt),
|
||||
GNUNET_PQ_query_param_uint64 (&td->details.deposits.wire_target_serial_id),
|
||||
GNUNET_PQ_query_param_auto_from_type (&tiny),
|
||||
GNUNET_PQ_query_param_auto_from_type (&done),
|
||||
GNUNET_PQ_query_param_auto_from_type (&extension_blocked),
|
||||
GNUNET_PQ_query_param_uint64 (
|
||||
GNUNET_PQ_query_param_bool (td->details.deposits.tiny),
|
||||
GNUNET_PQ_query_param_bool (td->details.deposits.done),
|
||||
GNUNET_PQ_query_param_bool (td->details.deposits.extension_blocked),
|
||||
0 == td->details.deposits.extension_details_serial_id
|
||||
? GNUNET_PQ_query_param_null ()
|
||||
: GNUNET_PQ_query_param_uint64 (
|
||||
&td->details.deposits.extension_details_serial_id),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
|
@ -53,8 +53,8 @@ lrbt_cb_table_denominations (void *cls,
|
||||
"denom_type",
|
||||
&td.details.denominations.denom_type),
|
||||
GNUNET_PQ_result_spec_uint32 (
|
||||
"age_restrictions",
|
||||
&td.details.denominations.age_restrictions),
|
||||
"age_mask",
|
||||
&td.details.denominations.age_mask),
|
||||
TALER_PQ_result_spec_denom_pub (
|
||||
"denom_pub",
|
||||
&td.details.denominations.denom_pub),
|
||||
@ -175,6 +175,7 @@ lrbt_cb_table_wire_targets (void *cls,
|
||||
|
||||
for (unsigned int i = 0; i<num_results; i++)
|
||||
{
|
||||
bool no_xid;
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_uint64 ("serial",
|
||||
&td.serial),
|
||||
@ -182,8 +183,10 @@ lrbt_cb_table_wire_targets (void *cls,
|
||||
&td.details.wire_targets.payto_uri),
|
||||
GNUNET_PQ_result_spec_auto_from_type ("kyc_ok",
|
||||
&td.details.wire_targets.kyc_ok),
|
||||
GNUNET_PQ_result_spec_allow_null (
|
||||
GNUNET_PQ_result_spec_string ("external_id",
|
||||
&td.details.wire_targets.external_id),
|
||||
&no_xid),
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
|
||||
@ -458,7 +461,6 @@ lrbt_cb_table_auditors (void *cls,
|
||||
|
||||
for (unsigned int i = 0; i<num_results; i++)
|
||||
{
|
||||
uint8_t is_active8 = 0;
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_uint64 ("serial",
|
||||
&td.serial),
|
||||
@ -468,8 +470,8 @@ lrbt_cb_table_auditors (void *cls,
|
||||
&td.details.auditors.auditor_url),
|
||||
GNUNET_PQ_result_spec_string ("auditor_name",
|
||||
&td.details.auditors.auditor_name),
|
||||
GNUNET_PQ_result_spec_auto_from_type ("is_active",
|
||||
&is_active8),
|
||||
GNUNET_PQ_result_spec_bool ("is_active",
|
||||
&td.details.auditors.is_active),
|
||||
GNUNET_PQ_result_spec_timestamp ("last_change",
|
||||
&td.details.auditors.last_change),
|
||||
GNUNET_PQ_result_spec_end
|
||||
@ -484,7 +486,6 @@ lrbt_cb_table_auditors (void *cls,
|
||||
ctx->error = true;
|
||||
return;
|
||||
}
|
||||
td.details.auditors.is_active = (0 != is_active8);
|
||||
ctx->cb (ctx->cb_cls,
|
||||
&td);
|
||||
GNUNET_PQ_cleanup_result (rs);
|
||||
@ -658,6 +659,7 @@ lrbt_cb_table_known_coins (void *cls,
|
||||
unsigned int num_results)
|
||||
{
|
||||
struct LookupRecordsByTableContext *ctx = cls;
|
||||
struct PostgresClosure *pg = ctx->pg;
|
||||
struct TALER_EXCHANGEDB_TableData td = {
|
||||
.table = TALER_EXCHANGEDB_RT_KNOWN_COINS
|
||||
};
|
||||
@ -677,6 +679,9 @@ lrbt_cb_table_known_coins (void *cls,
|
||||
GNUNET_PQ_result_spec_uint64 (
|
||||
"denominations_serial",
|
||||
&td.details.known_coins.denominations_serial),
|
||||
TALER_PQ_RESULT_SPEC_AMOUNT (
|
||||
"remaining",
|
||||
&td.details.known_coins.remaining),
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
|
||||
@ -904,8 +909,7 @@ lrbt_cb_table_deposits (void *cls,
|
||||
|
||||
for (unsigned int i = 0; i<num_results; i++)
|
||||
{
|
||||
uint8_t tiny = 0; /* initialized to make compiler happy */
|
||||
uint8_t done = 0; /* initialized to make compiler happy */
|
||||
bool no_extension;
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_uint64 (
|
||||
"serial",
|
||||
@ -946,18 +950,20 @@ lrbt_cb_table_deposits (void *cls,
|
||||
GNUNET_PQ_result_spec_uint64 (
|
||||
"wire_target_serial_id",
|
||||
&td.details.deposits.wire_target_serial_id),
|
||||
GNUNET_PQ_result_spec_auto_from_type (
|
||||
GNUNET_PQ_result_spec_bool (
|
||||
"tiny",
|
||||
&td.details.deposits.tiny),
|
||||
GNUNET_PQ_result_spec_auto_from_type (
|
||||
GNUNET_PQ_result_spec_bool (
|
||||
"done",
|
||||
&td.details.deposits.done),
|
||||
GNUNET_PQ_result_spec_auto_from_type (
|
||||
"extension_blocked",
|
||||
&td.details.deposits.extension_blocked),
|
||||
GNUNET_PQ_result_spec_allow_null (
|
||||
GNUNET_PQ_result_spec_uint64 (
|
||||
"extension_details_serial_id",
|
||||
&td.details.deposits.extension_details_serial_id),
|
||||
&no_extension),
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
|
||||
@ -970,8 +976,6 @@ lrbt_cb_table_deposits (void *cls,
|
||||
ctx->error = true;
|
||||
return;
|
||||
}
|
||||
td.details.deposits.tiny = (0 != tiny);
|
||||
td.details.deposits.done = (0 != done);
|
||||
ctx->cb (ctx->cb_cls,
|
||||
&td);
|
||||
GNUNET_PQ_cleanup_result (rs);
|
||||
|
@ -241,6 +241,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
"denomination_iterate",
|
||||
"SELECT"
|
||||
" master_sig"
|
||||
",denom_pub_hash"
|
||||
",valid_from"
|
||||
",expire_withdraw"
|
||||
",expire_deposit"
|
||||
@ -279,8 +280,9 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",fee_refresh_frac"
|
||||
",fee_refund_val"
|
||||
",fee_refund_frac"
|
||||
",denom_pub"
|
||||
",denom_type"
|
||||
",age_mask"
|
||||
",denom_pub"
|
||||
" FROM denominations"
|
||||
" LEFT JOIN "
|
||||
" denomination_revocations USING (denominations_serial);",
|
||||
@ -611,7 +613,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",out_zombie_bad AS zombie_required"
|
||||
",out_noreveal_index AS noreveal_index"
|
||||
" FROM exchange_do_melt"
|
||||
" ($1,$2,$3,$4,$5,$6,$7,$8,$9);",
|
||||
" ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10);",
|
||||
9),
|
||||
/* Used in #postgres_do_refund() to refund a deposit. */
|
||||
GNUNET_PQ_make_prepare (
|
||||
@ -730,7 +732,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
"get_known_coin",
|
||||
"SELECT"
|
||||
" denominations.denom_pub_hash"
|
||||
",age_hash"
|
||||
",age_commitment_hash"
|
||||
",denom_sig"
|
||||
" FROM known_coins"
|
||||
" JOIN denominations USING (denominations_serial)"
|
||||
@ -784,7 +786,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
" INSERT INTO known_coins "
|
||||
" (coin_pub"
|
||||
" ,denominations_serial"
|
||||
" ,age_hash"
|
||||
" ,age_commitment_hash"
|
||||
" ,denom_sig"
|
||||
" ,remaining_val"
|
||||
" ,remaining_frac"
|
||||
@ -796,7 +798,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
" ,coin_val"
|
||||
" ,coin_frac"
|
||||
" FROM dd"
|
||||
" ON CONFLICT (coin_pub) DO NOTHING"
|
||||
" ON CONFLICT DO NOTHING" /* CONFLICT on (coin_pub) */
|
||||
" RETURNING "
|
||||
" known_coin_id"
|
||||
" ) "
|
||||
@ -804,14 +806,14 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
" FALSE AS existed"
|
||||
" ,known_coin_id"
|
||||
" ,NULL AS denom_pub_hash"
|
||||
" ,NULL AS age_hash"
|
||||
" ,NULL AS age_commitment_hash"
|
||||
" FROM ins "
|
||||
"UNION ALL "
|
||||
"SELECT "
|
||||
" TRUE AS existed"
|
||||
" ,known_coin_id"
|
||||
" ,denom_pub_hash"
|
||||
" ,kc.age_hash"
|
||||
" ,kc.age_commitment_hash"
|
||||
" FROM input_rows"
|
||||
" JOIN known_coins kc USING (coin_pub)"
|
||||
" JOIN denominations USING (denominations_serial)"
|
||||
@ -873,6 +875,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",denoms.denom_pub_hash"
|
||||
",denoms.fee_refresh_val"
|
||||
",denoms.fee_refresh_frac"
|
||||
",h_age_commitment"
|
||||
",melt_serial_id"
|
||||
" FROM refresh_commitments"
|
||||
" JOIN known_coins kc"
|
||||
@ -1065,6 +1068,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",merchant_pub"
|
||||
",denom.denom_pub"
|
||||
",kc.coin_pub"
|
||||
",kc.age_commitment_hash"
|
||||
",coin_sig"
|
||||
",refund_deadline"
|
||||
",wire_deadline"
|
||||
@ -1188,7 +1192,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",denoms.fee_deposit_val"
|
||||
",denoms.fee_deposit_frac"
|
||||
",denoms.denom_pub_hash"
|
||||
",kc.age_hash"
|
||||
",kc.age_commitment_hash"
|
||||
",wallet_timestamp"
|
||||
",refund_deadline"
|
||||
",wire_deadline"
|
||||
@ -1237,6 +1241,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
" aggregation_serial_id"
|
||||
",deposits.h_contract_terms"
|
||||
",payto_uri"
|
||||
",h_payto"
|
||||
",kc.coin_pub"
|
||||
",deposits.merchant_pub"
|
||||
",wire_out.execution_date"
|
||||
@ -1918,6 +1923,14 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
" ORDER BY denom_revocations_serial_id DESC"
|
||||
" LIMIT 1;",
|
||||
0),
|
||||
GNUNET_PQ_make_prepare (
|
||||
"select_serial_by_table_wire_targets",
|
||||
"SELECT"
|
||||
" wire_target_serial_id AS serial"
|
||||
" FROM wire_targets"
|
||||
" ORDER BY wire_target_serial_id DESC"
|
||||
" LIMIT 1;",
|
||||
0),
|
||||
GNUNET_PQ_make_prepare (
|
||||
"select_serial_by_table_reserves",
|
||||
"SELECT"
|
||||
@ -2107,6 +2120,17 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
" WHERE denom_revocations_serial_id > $1"
|
||||
" ORDER BY denom_revocations_serial_id ASC;",
|
||||
1),
|
||||
GNUNET_PQ_make_prepare (
|
||||
"select_above_serial_by_table_wire_targets",
|
||||
"SELECT"
|
||||
" wire_target_serial_id AS serial"
|
||||
",payto_uri"
|
||||
",kyc_ok"
|
||||
",external_id"
|
||||
" FROM wire_targets"
|
||||
" WHERE wire_target_serial_id > $1"
|
||||
" ORDER BY wire_target_serial_id ASC;",
|
||||
1),
|
||||
GNUNET_PQ_make_prepare (
|
||||
"select_above_serial_by_table_reserves",
|
||||
"SELECT"
|
||||
@ -2158,7 +2182,7 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",h_blind_ev"
|
||||
",denominations_serial"
|
||||
",denom_sig"
|
||||
",reserve_pub"
|
||||
",reserve_uuid"
|
||||
",reserve_sig"
|
||||
",execution_date"
|
||||
",amount_with_fee_val"
|
||||
@ -2222,6 +2246,8 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",coin_pub"
|
||||
",denom_sig"
|
||||
",denominations_serial"
|
||||
",remaining_val"
|
||||
",remaining_frac"
|
||||
" FROM known_coins"
|
||||
" WHERE known_coin_id > $1"
|
||||
" ORDER BY known_coin_id ASC;",
|
||||
@ -2380,6 +2406,8 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
"INSERT INTO denominations"
|
||||
"(denominations_serial"
|
||||
",denom_pub_hash"
|
||||
",denom_type"
|
||||
",age_mask"
|
||||
",denom_pub"
|
||||
",master_sig"
|
||||
",valid_from"
|
||||
@ -2396,11 +2424,10 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",fee_refresh_frac"
|
||||
",fee_refund_val"
|
||||
",fee_refund_frac"
|
||||
",age_mask"
|
||||
") VALUES "
|
||||
"($1, $2, $3, $4, $5, $6, $7, $8, $9, $10,"
|
||||
" $11, $12, $13, $14, $15, $16, $17, $18, $19);",
|
||||
19),
|
||||
" $11, $12, $13, $14, $15, $16, $17, $18, $19, $20);",
|
||||
20),
|
||||
GNUNET_PQ_make_prepare (
|
||||
"insert_into_table_denomination_revocations",
|
||||
"INSERT INTO denomination_revocations"
|
||||
@ -2410,6 +2437,17 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
") VALUES "
|
||||
"($1, $2, $3);",
|
||||
3),
|
||||
GNUNET_PQ_make_prepare (
|
||||
"insert_into_table_wire_targets",
|
||||
"INSERT INTO wire_targets"
|
||||
"(wire_target_serial_id"
|
||||
",h_payto"
|
||||
",payto_uri"
|
||||
",kyc_ok"
|
||||
",external_id"
|
||||
") VALUES "
|
||||
"($1, $2, $3, $4, $5);",
|
||||
5),
|
||||
GNUNET_PQ_make_prepare (
|
||||
"insert_into_table_reserves",
|
||||
"INSERT INTO reserves"
|
||||
@ -2516,9 +2554,11 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",coin_pub"
|
||||
",denom_sig"
|
||||
",denominations_serial"
|
||||
",remaining_val"
|
||||
",remaining_frac"
|
||||
") VALUES "
|
||||
"($1, $2, $3, $4);",
|
||||
4),
|
||||
"($1, $2, $3, $4, $5, $6);",
|
||||
6),
|
||||
GNUNET_PQ_make_prepare (
|
||||
"insert_into_table_refresh_commitments",
|
||||
"INSERT INTO refresh_commitments"
|
||||
@ -2529,8 +2569,9 @@ prepare_statements (struct PostgresClosure *pg)
|
||||
",amount_with_fee_frac"
|
||||
",noreveal_index"
|
||||
",old_coin_pub"
|
||||
",h_age_commitment"
|
||||
") VALUES "
|
||||
"($1, $2, $3, $4, $5, $6, $7);",
|
||||
"($1, $2, $3, $4, $5, $6, $7, $8);",
|
||||
7),
|
||||
GNUNET_PQ_make_prepare (
|
||||
"insert_into_table_refresh_revealed_coins",
|
||||
@ -3091,6 +3132,7 @@ postgres_insert_denomination_info (
|
||||
const struct TALER_EXCHANGEDB_DenominationKeyInformationP *issue)
|
||||
{
|
||||
struct PostgresClosure *pg = cls;
|
||||
struct TALER_DenominationHashP denom_hash;
|
||||
struct GNUNET_PQ_QueryParam params[] = {
|
||||
GNUNET_PQ_query_param_auto_from_type (&issue->properties.denom_hash),
|
||||
TALER_PQ_query_param_denom_pub (denom_pub),
|
||||
@ -3104,13 +3146,18 @@ postgres_insert_denomination_info (
|
||||
TALER_PQ_query_param_amount_nbo (&issue->properties.fees.deposit),
|
||||
TALER_PQ_query_param_amount_nbo (&issue->properties.fees.refresh),
|
||||
TALER_PQ_query_param_amount_nbo (&issue->properties.fees.refund),
|
||||
GNUNET_PQ_query_param_uint32 (&denom_pub->age_mask.mask),
|
||||
GNUNET_PQ_query_param_uint32 (&denom_pub->age_mask.bits),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
struct TALER_DenomFeeSet fees;
|
||||
|
||||
GNUNET_assert (denom_pub->age_mask.mask == issue->age_mask.mask);
|
||||
|
||||
GNUNET_assert (denom_pub->age_mask.bits ==
|
||||
issue->age_mask.bits);
|
||||
TALER_denom_pub_hash (denom_pub,
|
||||
&denom_hash);
|
||||
GNUNET_assert (0 ==
|
||||
GNUNET_memcmp (&denom_hash,
|
||||
&issue->properties.denom_hash));
|
||||
GNUNET_assert (! GNUNET_TIME_absolute_is_zero (
|
||||
GNUNET_TIME_timestamp_ntoh (
|
||||
issue->properties.start).abs_time));
|
||||
@ -3147,7 +3194,7 @@ postgres_insert_denomination_info (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_get_denomination_info (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct TALER_EXCHANGEDB_DenominationKeyInformationP *issue)
|
||||
{
|
||||
struct PostgresClosure *pg = cls;
|
||||
@ -3178,7 +3225,7 @@ postgres_get_denomination_info (
|
||||
TALER_PQ_RESULT_SPEC_AMOUNT_NBO ("fee_refund",
|
||||
&issue->properties.fees.refund),
|
||||
GNUNET_PQ_result_spec_uint32 ("age_mask",
|
||||
&issue->age_mask.mask),
|
||||
&issue->age_mask.bits),
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
|
||||
@ -3242,9 +3289,12 @@ domination_cb_helper (void *cls,
|
||||
{
|
||||
struct TALER_EXCHANGEDB_DenominationKeyInformationP issue;
|
||||
struct TALER_DenominationPublicKey denom_pub;
|
||||
struct TALER_DenominationHashP denom_hash;
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_auto_from_type ("master_sig",
|
||||
&issue.signature),
|
||||
GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
|
||||
&denom_hash),
|
||||
GNUNET_PQ_result_spec_timestamp_nbo ("valid_from",
|
||||
&issue.properties.start),
|
||||
GNUNET_PQ_result_spec_timestamp_nbo ("expire_withdraw",
|
||||
@ -3266,7 +3316,7 @@ domination_cb_helper (void *cls,
|
||||
TALER_PQ_result_spec_denom_pub ("denom_pub",
|
||||
&denom_pub),
|
||||
GNUNET_PQ_result_spec_uint32 ("age_mask",
|
||||
&issue.age_mask.mask),
|
||||
&issue.age_mask.bits),
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
|
||||
@ -3295,9 +3345,18 @@ domination_cb_helper (void *cls,
|
||||
= htonl (TALER_SIGNATURE_MASTER_DENOMINATION_KEY_VALIDITY);
|
||||
TALER_denom_pub_hash (&denom_pub,
|
||||
&issue.properties.denom_hash);
|
||||
if (0 !=
|
||||
GNUNET_memcmp (&issue.properties.denom_hash,
|
||||
&denom_hash))
|
||||
{
|
||||
GNUNET_break (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
dic->cb (dic->cb_cls,
|
||||
&denom_pub,
|
||||
&issue);
|
||||
}
|
||||
TALER_denom_pub_free (&denom_pub);
|
||||
}
|
||||
}
|
||||
@ -3377,7 +3436,7 @@ dominations_cb_helper (void *cls,
|
||||
struct TALER_EXCHANGEDB_DenominationKeyMetaData meta = {0};
|
||||
struct TALER_DenominationPublicKey denom_pub = {0};
|
||||
struct TALER_MasterSignatureP master_sig = {0};
|
||||
struct TALER_DenominationHash h_denom_pub = {0};
|
||||
struct TALER_DenominationHashP h_denom_pub = {0};
|
||||
bool revoked;
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_auto_from_type ("master_sig",
|
||||
@ -3405,7 +3464,7 @@ dominations_cb_helper (void *cls,
|
||||
TALER_PQ_result_spec_denom_pub ("denom_pub",
|
||||
&denom_pub),
|
||||
GNUNET_PQ_result_spec_uint32 ("age_mask",
|
||||
&meta.age_mask.mask),
|
||||
&meta.age_mask.bits),
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
|
||||
@ -3702,7 +3761,7 @@ auditor_denoms_cb_helper (void *cls,
|
||||
for (unsigned int i = 0; i<num_results; i++)
|
||||
{
|
||||
struct TALER_AuditorPublicKeyP auditor_pub;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct TALER_AuditorSignatureP auditor_sig;
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_auto_from_type ("auditor_pub",
|
||||
@ -3870,7 +3929,7 @@ postgres_set_kyc_ok (void *cls,
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_select_kyc_status (void *cls,
|
||||
uint64_t payment_target_uuid,
|
||||
struct TALER_PaytoHash *h_payto,
|
||||
struct TALER_PaytoHashP *h_payto,
|
||||
struct TALER_EXCHANGEDB_KycStatus *kyc)
|
||||
{
|
||||
struct PostgresClosure *pg = cls;
|
||||
@ -3911,7 +3970,7 @@ inselect_account_kyc_status (
|
||||
struct TALER_EXCHANGEDB_KycStatus *kyc)
|
||||
{
|
||||
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
|
||||
TALER_payto_hash (payto_uri,
|
||||
@ -4330,7 +4389,7 @@ postgres_reserves_in_insert (void *cls,
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_get_withdraw_info (
|
||||
void *cls,
|
||||
const struct TALER_BlindedCoinHash *bch,
|
||||
const struct TALER_BlindedCoinHashP *bch,
|
||||
struct TALER_EXCHANGEDB_CollectableBlindcoin *collectable)
|
||||
{
|
||||
struct PostgresClosure *pg = cls;
|
||||
@ -4516,7 +4575,7 @@ postgres_do_deposit (
|
||||
void *cls,
|
||||
const struct TALER_EXCHANGEDB_Deposit *deposit,
|
||||
uint64_t known_coin_id,
|
||||
const struct TALER_PaytoHash *h_payto,
|
||||
const struct TALER_PaytoHashP *h_payto,
|
||||
bool extension_blocked,
|
||||
struct GNUNET_TIME_Timestamp *exchange_timestamp,
|
||||
bool *balance_ok,
|
||||
@ -4593,6 +4652,7 @@ postgres_do_melt (
|
||||
GNUNET_PQ_query_param_auto_from_type (&refresh->coin.coin_pub),
|
||||
GNUNET_PQ_query_param_auto_from_type (&refresh->coin_sig),
|
||||
GNUNET_PQ_query_param_uint64 (&known_coin_id),
|
||||
GNUNET_PQ_query_param_auto_from_type (&refresh->coin.h_age_commitment),
|
||||
GNUNET_PQ_query_param_uint32 (&refresh->noreveal_index),
|
||||
GNUNET_PQ_query_param_bool (*zombie_required),
|
||||
GNUNET_PQ_query_param_end
|
||||
@ -5241,8 +5301,8 @@ postgres_get_reserve_history (void *cls,
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_have_deposit2 (
|
||||
void *cls,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantPublicKeyP *merchant,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
@ -5277,7 +5337,7 @@ postgres_have_deposit2 (
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
struct TALER_MerchantWireHash h_wire2;
|
||||
struct TALER_MerchantWireHashP h_wire2;
|
||||
#if EXPLICIT_LOCKS
|
||||
struct GNUNET_PQ_QueryParam no_params[] = {
|
||||
GNUNET_PQ_query_param_end
|
||||
@ -5402,7 +5462,7 @@ postgres_get_ready_deposit (void *cls,
|
||||
};
|
||||
struct TALER_Amount amount_with_fee;
|
||||
struct TALER_Amount deposit_fee;
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
struct TALER_MerchantPublicKeyP merchant_pub;
|
||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||
uint64_t serial_id;
|
||||
@ -5527,7 +5587,7 @@ match_deposit_cb (void *cls,
|
||||
{
|
||||
struct TALER_Amount amount_with_fee;
|
||||
struct TALER_Amount deposit_fee;
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||
uint64_t serial_id;
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
@ -5641,14 +5701,13 @@ postgres_get_known_coin (void *cls,
|
||||
GNUNET_PQ_query_param_auto_from_type (coin_pub),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
bool is_null;
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
|
||||
&coin_info->denom_pub_hash),
|
||||
GNUNET_PQ_result_spec_allow_null (
|
||||
GNUNET_PQ_result_spec_auto_from_type ("age_hash",
|
||||
GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
|
||||
&coin_info->h_age_commitment),
|
||||
&is_null),
|
||||
&coin_info->no_age_commitment),
|
||||
TALER_PQ_result_spec_denom_sig ("denom_sig",
|
||||
&coin_info->denom_sig),
|
||||
GNUNET_PQ_result_spec_end
|
||||
@ -5679,7 +5738,7 @@ postgres_get_coin_denomination (
|
||||
void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
uint64_t *known_coin_id,
|
||||
struct TALER_DenominationHash *denom_hash)
|
||||
struct TALER_DenominationHashP *denom_hash)
|
||||
{
|
||||
struct PostgresClosure *pg = cls;
|
||||
struct GNUNET_PQ_QueryParam params[] = {
|
||||
@ -5713,7 +5772,8 @@ postgres_get_coin_denomination (
|
||||
*/
|
||||
static long long
|
||||
postgres_count_known_coins (void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash)
|
||||
const struct
|
||||
TALER_DenominationHashP *denom_pub_hash)
|
||||
{
|
||||
struct PostgresClosure *pg = cls;
|
||||
uint64_t count;
|
||||
@ -5746,15 +5806,15 @@ postgres_count_known_coins (void *cls,
|
||||
* @param[out] known_coin_id set to the unique row of the coin
|
||||
* @param[out] denom_hash set to the denomination hash of the existing
|
||||
* coin (for conflict error reporting)
|
||||
* @param[out] age_hash set to the conflicting age hash on conflict
|
||||
* @param[out] h_age_commitment set to the conflicting age commitment hash on conflict
|
||||
* @return database transaction status, non-negative on success
|
||||
*/
|
||||
static enum TALER_EXCHANGEDB_CoinKnownStatus
|
||||
postgres_ensure_coin_known (void *cls,
|
||||
const struct TALER_CoinPublicInfo *coin,
|
||||
uint64_t *known_coin_id,
|
||||
struct TALER_DenominationHash *denom_hash,
|
||||
struct TALER_AgeCommitmentHash *age_hash)
|
||||
struct TALER_DenominationHashP *denom_hash,
|
||||
struct TALER_AgeCommitmentHash *h_age_commitment)
|
||||
{
|
||||
struct PostgresClosure *pg = cls;
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
@ -5778,8 +5838,8 @@ postgres_ensure_coin_known (void *cls,
|
||||
denom_hash),
|
||||
&is_denom_pub_hash_null),
|
||||
GNUNET_PQ_result_spec_allow_null (
|
||||
GNUNET_PQ_result_spec_auto_from_type ("age_hash",
|
||||
age_hash),
|
||||
GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
|
||||
h_age_commitment),
|
||||
&is_age_hash_null),
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
@ -5813,10 +5873,10 @@ postgres_ensure_coin_known (void *cls,
|
||||
}
|
||||
|
||||
if ( (! is_age_hash_null) &&
|
||||
(0 != GNUNET_memcmp (age_hash,
|
||||
(0 != GNUNET_memcmp (h_age_commitment,
|
||||
&coin->h_age_commitment)) )
|
||||
{
|
||||
GNUNET_break (GNUNET_is_zero (age_hash));
|
||||
GNUNET_break (GNUNET_is_zero (h_age_commitment));
|
||||
GNUNET_break_op (0);
|
||||
return TALER_EXCHANGEDB_CKS_AGE_CONFLICT;
|
||||
}
|
||||
@ -5998,7 +6058,7 @@ postgres_select_refunds_by_coin (
|
||||
void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const struct TALER_PrivateContractHash *h_contract,
|
||||
const struct TALER_PrivateContractHashP *h_contract,
|
||||
TALER_EXCHANGEDB_RefundCoinCallback cb,
|
||||
void *cb_cls)
|
||||
{
|
||||
@ -6065,7 +6125,7 @@ postgres_get_melt (void *cls,
|
||||
&melt->session.coin_sig),
|
||||
GNUNET_PQ_result_spec_allow_null (
|
||||
GNUNET_PQ_result_spec_auto_from_type ("h_age_commitment",
|
||||
&melt->session.h_age_commitment),
|
||||
&melt->session.coin.h_age_commitment),
|
||||
&h_age_commitment_is_null),
|
||||
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
|
||||
&melt->session.amount_with_fee),
|
||||
@ -6083,9 +6143,9 @@ postgres_get_melt (void *cls,
|
||||
params,
|
||||
rs);
|
||||
if (h_age_commitment_is_null)
|
||||
memset (&melt->session.h_age_commitment,
|
||||
memset (&melt->session.coin.h_age_commitment,
|
||||
0,
|
||||
sizeof(melt->session.h_age_commitment));
|
||||
sizeof(melt->session.coin.h_age_commitment));
|
||||
|
||||
melt->session.rc = *rc;
|
||||
return qs;
|
||||
@ -6233,7 +6293,8 @@ add_revealed_coins (void *cls,
|
||||
{
|
||||
struct TALER_EXCHANGEDB_RefreshRevealedCoin *rrc = &grctx->rrcs[off];
|
||||
struct GNUNET_PQ_ResultSpec rsi[] = {
|
||||
GNUNET_PQ_result_spec_auto_from_type ("h_denom_pub",
|
||||
/* NOTE: freshcoin_index selected and discarded here... */
|
||||
GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
|
||||
&rrc->h_denom_pub),
|
||||
GNUNET_PQ_result_spec_auto_from_type ("link_sig",
|
||||
&rrc->orig_coin_link_sig),
|
||||
@ -6586,7 +6647,6 @@ add_coin_deposit (void *cls,
|
||||
struct TALER_EXCHANGEDB_DepositListEntry *deposit;
|
||||
struct TALER_EXCHANGEDB_TransactionList *tl;
|
||||
uint64_t serial_id;
|
||||
bool is_null;
|
||||
|
||||
chc->have_deposit_or_melt = true;
|
||||
deposit = GNUNET_new (struct TALER_EXCHANGEDB_DepositListEntry);
|
||||
@ -6599,9 +6659,9 @@ add_coin_deposit (void *cls,
|
||||
GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash",
|
||||
&deposit->h_denom_pub),
|
||||
GNUNET_PQ_result_spec_allow_null (
|
||||
GNUNET_PQ_result_spec_auto_from_type ("age_hash",
|
||||
GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
|
||||
&deposit->h_age_commitment),
|
||||
&is_null),
|
||||
&deposit->no_age_commitment),
|
||||
GNUNET_PQ_result_spec_timestamp ("wallet_timestamp",
|
||||
&deposit->timestamp),
|
||||
GNUNET_PQ_result_spec_timestamp ("refund_deadline",
|
||||
@ -6683,6 +6743,10 @@ add_coin_melt (void *cls,
|
||||
&melt->amount_with_fee),
|
||||
TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refresh",
|
||||
&melt->melt_fee),
|
||||
GNUNET_PQ_result_spec_allow_null (
|
||||
GNUNET_PQ_result_spec_auto_from_type ("h_age_commitment",
|
||||
&melt->h_age_commitment),
|
||||
&melt->no_age_commitment),
|
||||
GNUNET_PQ_result_spec_uint64 ("melt_serial_id",
|
||||
&serial_id),
|
||||
GNUNET_PQ_result_spec_end
|
||||
@ -6698,6 +6762,7 @@ add_coin_melt (void *cls,
|
||||
chc->failed = true;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
tl = GNUNET_new (struct TALER_EXCHANGEDB_TransactionList);
|
||||
tl->next = chc->head;
|
||||
@ -7130,8 +7195,9 @@ handle_wt_result (void *cls,
|
||||
for (unsigned int i = 0; i<num_results; i++)
|
||||
{
|
||||
uint64_t rowid;
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
struct TALER_MerchantPublicKeyP merchant_pub;
|
||||
struct GNUNET_TIME_Timestamp exec_time;
|
||||
struct TALER_Amount amount_with_fee;
|
||||
@ -7144,6 +7210,8 @@ handle_wt_result (void *cls,
|
||||
&h_contract_terms),
|
||||
GNUNET_PQ_result_spec_string ("payto_uri",
|
||||
&payto_uri),
|
||||
GNUNET_PQ_result_spec_auto_from_type ("h_payto",
|
||||
&h_payto),
|
||||
TALER_PQ_result_spec_denom_pub ("denom_pub",
|
||||
&denom_pub),
|
||||
GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
|
||||
@ -7172,6 +7240,7 @@ handle_wt_result (void *cls,
|
||||
rowid,
|
||||
&merchant_pub,
|
||||
payto_uri,
|
||||
&h_payto,
|
||||
exec_time,
|
||||
&h_contract_terms,
|
||||
&denom_pub,
|
||||
@ -7246,8 +7315,8 @@ postgres_lookup_wire_transfer (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_lookup_transfer_by_deposit (
|
||||
void *cls,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
bool *pending,
|
||||
@ -7290,7 +7359,7 @@ postgres_lookup_transfer_by_deposit (
|
||||
rs);
|
||||
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
|
||||
{
|
||||
struct TALER_MerchantWireHash wh;
|
||||
struct TALER_MerchantWireHashP wh;
|
||||
|
||||
TALER_merchant_wire_signature_hash (payto_uri,
|
||||
&wire_salt,
|
||||
@ -7347,7 +7416,7 @@ postgres_lookup_transfer_by_deposit (
|
||||
rs2);
|
||||
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
|
||||
{
|
||||
struct TALER_MerchantWireHash wh;
|
||||
struct TALER_MerchantWireHashP wh;
|
||||
|
||||
TALER_merchant_wire_signature_hash (payto_uri,
|
||||
&wire_salt,
|
||||
@ -7942,7 +8011,22 @@ postgres_start_deferred_wire_out (void *cls)
|
||||
struct PostgresClosure *pg = cls;
|
||||
struct GNUNET_PQ_ExecuteStatement es[] = {
|
||||
GNUNET_PQ_make_execute ("START TRANSACTION ISOLATION LEVEL READ COMMITTED"),
|
||||
GNUNET_PQ_make_execute ("SET CONSTRAINTS wire_out_ref DEFERRED"),
|
||||
GNUNET_PQ_make_execute ("DO $$"
|
||||
"BEGIN"
|
||||
" IF EXISTS ("
|
||||
" SELECT 1"
|
||||
" FROM information_Schema.constraint_column_usage"
|
||||
" WHERE table_name='wire_out'"
|
||||
" AND constraint_name='wire_out_ref')"
|
||||
" THEN "
|
||||
" SET CONSTRAINTS wire_out_ref DEFERRED;"
|
||||
" END IF;"
|
||||
"END $$"),
|
||||
// FIXME: above logic is better as it tests that the constraint
|
||||
// is actually applicable; but maybe we want to drop the constraint
|
||||
// entirely once do_gc() is fixed to do without it?
|
||||
// GNUNET_PQ_make_execute ("CALL defer_wire_out()"),
|
||||
// GNUNET_PQ_make_execute ("SET CONSTRAINTS wire_out_ref DEFERRED;"),
|
||||
GNUNET_PQ_EXECUTE_STATEMENT_END
|
||||
};
|
||||
|
||||
@ -8124,6 +8208,10 @@ deposit_serial_helper_cb (void *cls,
|
||||
&denom_pub),
|
||||
GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
|
||||
&deposit.coin.coin_pub),
|
||||
GNUNET_PQ_result_spec_allow_null (
|
||||
GNUNET_PQ_result_spec_auto_from_type ("age_commitment_hash",
|
||||
&deposit.coin.h_age_commitment),
|
||||
&deposit.coin.no_age_commitment),
|
||||
GNUNET_PQ_result_spec_auto_from_type ("coin_sig",
|
||||
&deposit.csig),
|
||||
GNUNET_PQ_result_spec_timestamp ("refund_deadline",
|
||||
@ -8144,6 +8232,9 @@ deposit_serial_helper_cb (void *cls,
|
||||
};
|
||||
int ret;
|
||||
|
||||
memset (&deposit,
|
||||
0,
|
||||
sizeof (deposit));
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_PQ_extract_result (result,
|
||||
rs,
|
||||
@ -8711,7 +8802,7 @@ reserves_out_serial_helper_cb (void *cls,
|
||||
|
||||
for (unsigned int i = 0; i<num_results; i++)
|
||||
{
|
||||
struct TALER_BlindedCoinHash h_blind_ev;
|
||||
struct TALER_BlindedCoinHashP h_blind_ev;
|
||||
struct TALER_DenominationPublicKey denom_pub;
|
||||
struct TALER_ReservePublicKeyP reserve_pub;
|
||||
struct TALER_ReserveSignatureP reserve_sig;
|
||||
@ -9028,7 +9119,7 @@ recoup_serial_helper_cb (void *cls,
|
||||
union TALER_DenominationBlindingKeyP coin_blind;
|
||||
struct TALER_Amount amount;
|
||||
struct TALER_DenominationPublicKey denom_pub;
|
||||
struct TALER_BlindedCoinHash h_blind_ev;
|
||||
struct TALER_BlindedCoinHashP h_blind_ev;
|
||||
struct GNUNET_TIME_Timestamp timestamp;
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_uint64 ("recoup_uuid",
|
||||
@ -9175,9 +9266,9 @@ recoup_refresh_serial_helper_cb (void *cls,
|
||||
struct TALER_CoinSpendSignatureP coin_sig;
|
||||
union TALER_DenominationBlindingKeyP coin_blind;
|
||||
struct TALER_DenominationPublicKey denom_pub;
|
||||
struct TALER_DenominationHash old_denom_pub_hash;
|
||||
struct TALER_DenominationHashP old_denom_pub_hash;
|
||||
struct TALER_Amount amount;
|
||||
struct TALER_BlindedCoinHash h_blind_ev;
|
||||
struct TALER_BlindedCoinHashP h_blind_ev;
|
||||
struct GNUNET_TIME_Timestamp timestamp;
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_uint64 ("recoup_refresh_uuid",
|
||||
@ -9425,7 +9516,7 @@ postgres_select_reserve_closed_above_serial_id (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_get_reserve_by_h_blind (
|
||||
void *cls,
|
||||
const struct TALER_BlindedCoinHash *bch,
|
||||
const struct TALER_BlindedCoinHashP *bch,
|
||||
struct TALER_ReservePublicKeyP *reserve_pub,
|
||||
uint64_t *reserve_out_serial_id)
|
||||
{
|
||||
@ -9462,7 +9553,7 @@ postgres_get_reserve_by_h_blind (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_get_old_coin_by_h_blind (
|
||||
void *cls,
|
||||
const struct TALER_BlindedCoinHash *h_blind_ev,
|
||||
const struct TALER_BlindedCoinHashP *h_blind_ev,
|
||||
struct TALER_CoinSpendPublicKeyP *old_coin_pub,
|
||||
uint64_t *rrc_serial)
|
||||
{
|
||||
@ -9498,7 +9589,7 @@ postgres_get_old_coin_by_h_blind (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_insert_denomination_revocation (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
const struct TALER_MasterSignatureP *master_sig)
|
||||
{
|
||||
struct PostgresClosure *pg = cls;
|
||||
@ -9527,7 +9618,7 @@ postgres_insert_denomination_revocation (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_get_denomination_revocation (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct TALER_MasterSignatureP *master_sig,
|
||||
uint64_t *rowid)
|
||||
{
|
||||
@ -10210,7 +10301,7 @@ postgres_lookup_signkey_revocation (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_lookup_denomination_key (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct TALER_EXCHANGEDB_DenominationKeyMetaData *meta)
|
||||
{
|
||||
struct PostgresClosure *pg = cls;
|
||||
@ -10238,7 +10329,7 @@ postgres_lookup_denomination_key (
|
||||
TALER_PQ_RESULT_SPEC_AMOUNT ("fee_refund",
|
||||
&meta->fees.refund),
|
||||
GNUNET_PQ_result_spec_uint32 ("age_mask",
|
||||
&meta->age_mask.mask),
|
||||
&meta->age_mask.bits),
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
|
||||
@ -10263,7 +10354,7 @@ postgres_lookup_denomination_key (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_add_denomination_key (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_EXCHANGEDB_DenominationKeyMetaData *meta,
|
||||
const struct TALER_MasterSignatureP *master_sig)
|
||||
@ -10282,7 +10373,7 @@ postgres_add_denomination_key (
|
||||
TALER_PQ_query_param_amount (&meta->fees.deposit),
|
||||
TALER_PQ_query_param_amount (&meta->fees.refresh),
|
||||
TALER_PQ_query_param_amount (&meta->fees.refund),
|
||||
GNUNET_PQ_query_param_uint32 (&meta->age_mask.mask),
|
||||
GNUNET_PQ_query_param_uint32 (&meta->age_mask.bits),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
|
||||
@ -10376,7 +10467,7 @@ postgres_lookup_signing_key (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_insert_auditor_denom_sig (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
const struct TALER_AuditorSignatureP *auditor_sig)
|
||||
{
|
||||
@ -10406,7 +10497,7 @@ postgres_insert_auditor_denom_sig (
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_select_auditor_denom_sig (
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
struct TALER_AuditorSignatureP *auditor_sig)
|
||||
{
|
||||
@ -10612,6 +10703,9 @@ postgres_lookup_serial_by_table (void *cls,
|
||||
case TALER_EXCHANGEDB_RT_DENOMINATION_REVOCATIONS:
|
||||
statement = "select_serial_by_table_denomination_revocations";
|
||||
break;
|
||||
case TALER_EXCHANGEDB_RT_WIRE_TARGETS:
|
||||
statement = "select_serial_by_table_wire_targets";
|
||||
break;
|
||||
case TALER_EXCHANGEDB_RT_RESERVES:
|
||||
statement = "select_serial_by_table_reserves";
|
||||
break;
|
||||
@ -10845,9 +10939,17 @@ postgres_lookup_records_by_table (void *cls,
|
||||
rh,
|
||||
&ctx);
|
||||
if (qs < 0)
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Failed to run `%s'\n",
|
||||
statement);
|
||||
return qs;
|
||||
}
|
||||
if (ctx.error)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||
}
|
||||
return qs;
|
||||
}
|
||||
|
||||
|
@ -536,8 +536,9 @@ cb_wt_never (void *cls,
|
||||
uint64_t serial_id,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const char *account_payto_uri,
|
||||
const struct TALER_PaytoHashP *h_payto,
|
||||
struct GNUNET_TIME_Timestamp exec_time,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *coin_value,
|
||||
@ -558,8 +559,8 @@ cb_wt_never (void *cls,
|
||||
|
||||
|
||||
static struct TALER_MerchantPublicKeyP merchant_pub_wt;
|
||||
static struct TALER_MerchantWireHash h_wire_wt;
|
||||
static struct TALER_PrivateContractHash h_contract_terms_wt;
|
||||
static struct TALER_MerchantWireHashP h_wire_wt;
|
||||
static struct TALER_PrivateContractHashP h_contract_terms_wt;
|
||||
static struct TALER_CoinSpendPublicKeyP coin_pub_wt;
|
||||
static struct TALER_Amount coin_value_wt;
|
||||
static struct TALER_Amount coin_fee_wt;
|
||||
@ -576,8 +577,9 @@ cb_wt_check (void *cls,
|
||||
uint64_t rowid,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const char *account_payto_uri,
|
||||
const struct TALER_PaytoHashP *h_payto,
|
||||
struct GNUNET_TIME_Timestamp exec_time,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *coin_value,
|
||||
@ -639,7 +641,7 @@ deposit_cb (void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_Amount *deposit_fee,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
uint64_t wire_target,
|
||||
const char *payto_uri)
|
||||
{
|
||||
@ -686,7 +688,7 @@ matching_deposit_cb (void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_Amount *deposit_fee,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms)
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms)
|
||||
{
|
||||
struct TALER_EXCHANGEDB_Deposit *deposit = cls;
|
||||
|
||||
@ -761,7 +763,7 @@ audit_refund_cb (void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const struct TALER_MerchantSignatureP *merchant_sig,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
uint64_t rtransaction_id,
|
||||
const struct TALER_Amount *amount_with_fee)
|
||||
{
|
||||
@ -828,7 +830,7 @@ audit_reserve_in_cb (void *cls,
|
||||
static enum GNUNET_GenericReturnValue
|
||||
audit_reserve_out_cb (void *cls,
|
||||
uint64_t rowid,
|
||||
const struct TALER_BlindedCoinHash *h_blind_ev,
|
||||
const struct TALER_BlindedCoinHashP *h_blind_ev,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_ReservePublicKeyP *reserve_pub,
|
||||
const struct TALER_ReserveSignatureP *reserve_sig,
|
||||
@ -860,7 +862,7 @@ test_gc (void)
|
||||
struct GNUNET_TIME_Timestamp now;
|
||||
struct GNUNET_TIME_Timestamp past;
|
||||
struct TALER_EXCHANGEDB_DenominationKeyInformationP issue2;
|
||||
struct TALER_DenominationHash denom_hash;
|
||||
struct TALER_DenominationHashP denom_hash;
|
||||
|
||||
now = GNUNET_TIME_timestamp_get ();
|
||||
past = GNUNET_TIME_absolute_to_timestamp (
|
||||
@ -1079,7 +1081,8 @@ test_wire_out (const struct TALER_EXCHANGEDB_Deposit *deposit)
|
||||
NULL));
|
||||
|
||||
{
|
||||
struct TALER_PrivateContractHash h_contract_terms_wt2 = h_contract_terms_wt;
|
||||
struct TALER_PrivateContractHashP h_contract_terms_wt2 =
|
||||
h_contract_terms_wt;
|
||||
bool pending;
|
||||
struct TALER_WireTransferIdentifierRawP wtid2;
|
||||
struct TALER_Amount coin_contribution2;
|
||||
@ -1335,7 +1338,7 @@ run (void *cls)
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
struct GNUNET_TIME_Timestamp now;
|
||||
struct TALER_WireSaltP salt;
|
||||
struct TALER_CoinPubHash c_hash;
|
||||
struct TALER_CoinPubHashP c_hash;
|
||||
uint64_t known_coin_id;
|
||||
uint64_t rrc_serial;
|
||||
struct TALER_EXCHANGEDB_Refresh refresh;
|
||||
@ -1490,6 +1493,7 @@ run (void *cls)
|
||||
TALER_denom_sign_blinded (
|
||||
&cbc.sig,
|
||||
&dkp->priv,
|
||||
false,
|
||||
&pd.blinded_planchet));
|
||||
TALER_blinded_planchet_free (&pd.blinded_planchet);
|
||||
}
|
||||
@ -1579,7 +1583,7 @@ run (void *cls)
|
||||
&dkp->pub));
|
||||
deadline = GNUNET_TIME_timestamp_get ();
|
||||
{
|
||||
struct TALER_DenominationHash dph;
|
||||
struct TALER_DenominationHashP dph;
|
||||
struct TALER_AgeCommitmentHash agh;
|
||||
|
||||
FAILIF (TALER_EXCHANGEDB_CKS_ADDED !=
|
||||
@ -1596,7 +1600,7 @@ run (void *cls)
|
||||
= GNUNET_TIME_timestamp_get ();
|
||||
bool balance_ok;
|
||||
bool in_conflict;
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
|
||||
RND_BLK (&h_payto);
|
||||
deposit.refund_deadline
|
||||
@ -1759,6 +1763,7 @@ run (void *cls)
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
TALER_denom_sign_blinded (&ccoin->coin_sig,
|
||||
&new_dkp[cnt]->priv,
|
||||
true,
|
||||
bp));
|
||||
}
|
||||
RND_BLK (&tprivs);
|
||||
@ -1777,9 +1782,9 @@ run (void *cls)
|
||||
tprivs,
|
||||
&tpub));
|
||||
{
|
||||
struct TALER_BlindedCoinHash h_coin_ev;
|
||||
struct TALER_BlindedCoinHashP h_coin_ev;
|
||||
struct TALER_CoinSpendPublicKeyP ocp;
|
||||
struct TALER_DenominationHash denom_hash;
|
||||
struct TALER_DenominationHashP denom_hash;
|
||||
|
||||
TALER_denom_pub_hash (&new_denom_pubs[0],
|
||||
&denom_hash);
|
||||
@ -1827,7 +1832,7 @@ run (void *cls)
|
||||
union TALER_DenominationBlindingKeyP coin_bks;
|
||||
uint64_t new_known_coin_id;
|
||||
struct TALER_CoinPublicInfo new_coin;
|
||||
struct TALER_DenominationHash dph;
|
||||
struct TALER_DenominationHashP dph;
|
||||
struct TALER_AgeCommitmentHash agh;
|
||||
bool recoup_ok;
|
||||
bool internal_failure;
|
||||
@ -2181,7 +2186,7 @@ run (void *cls)
|
||||
result = 8;
|
||||
{
|
||||
uint64_t known_coin_id;
|
||||
struct TALER_DenominationHash dph;
|
||||
struct TALER_DenominationHashP dph;
|
||||
struct TALER_AgeCommitmentHash agh;
|
||||
|
||||
FAILIF (TALER_EXCHANGEDB_CKS_ADDED !=
|
||||
@ -2195,7 +2200,7 @@ run (void *cls)
|
||||
struct GNUNET_TIME_Timestamp now;
|
||||
struct GNUNET_TIME_Timestamp r;
|
||||
struct TALER_Amount deposit_fee;
|
||||
struct TALER_MerchantWireHash h_wire;
|
||||
struct TALER_MerchantWireHashP h_wire;
|
||||
|
||||
now = GNUNET_TIME_timestamp_get ();
|
||||
FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
|
||||
@ -2299,7 +2304,7 @@ run (void *cls)
|
||||
"test-2"));
|
||||
RND_BLK (&deposit2.merchant_pub); /* should fail if merchant is different */
|
||||
{
|
||||
struct TALER_MerchantWireHash h_wire;
|
||||
struct TALER_MerchantWireHashP h_wire;
|
||||
struct GNUNET_TIME_Timestamp r;
|
||||
struct TALER_Amount deposit_fee;
|
||||
|
||||
|
@ -64,7 +64,7 @@ TALER_parse_age_group_string (
|
||||
if (prev >= val)
|
||||
return GNUNET_SYSERR;
|
||||
|
||||
mask->mask |= 1 << val;
|
||||
mask->bits |= 1 << val;
|
||||
prev = val;
|
||||
val = 0;
|
||||
continue;
|
||||
@ -82,8 +82,8 @@ TALER_parse_age_group_string (
|
||||
if (0>val || 32<=val || prev>=val)
|
||||
return GNUNET_SYSERR;
|
||||
|
||||
mask->mask |= (1 << val);
|
||||
mask->mask |= 1; // mark zeroth group, too
|
||||
mask->bits |= (1 << val);
|
||||
mask->bits |= 1; // mark zeroth group, too
|
||||
|
||||
return GNUNET_OK;
|
||||
}
|
||||
@ -100,7 +100,7 @@ char *
|
||||
TALER_age_mask_to_string (
|
||||
const struct TALER_AgeMask *m)
|
||||
{
|
||||
uint32_t mask = m->mask;
|
||||
uint32_t bits = m->bits;
|
||||
unsigned int n = 0;
|
||||
char *buf = GNUNET_malloc (32 * 3); // max characters possible
|
||||
char *pos = buf;
|
||||
@ -110,11 +110,11 @@ TALER_age_mask_to_string (
|
||||
return buf;
|
||||
}
|
||||
|
||||
while (mask != 0)
|
||||
while (bits != 0)
|
||||
{
|
||||
mask >>= 1;
|
||||
bits >>= 1;
|
||||
n++;
|
||||
if (0 == (mask & 1))
|
||||
if (0 == (bits & 1))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -125,7 +125,7 @@ TALER_age_mask_to_string (
|
||||
}
|
||||
*(pos++) = '0' + n % 10;
|
||||
|
||||
if (0 != (mask >> 1))
|
||||
if (0 != (bits >> 1))
|
||||
{
|
||||
*(pos++) = ':';
|
||||
}
|
||||
@ -160,7 +160,7 @@ age_restriction_disable (
|
||||
this->config_json = NULL;
|
||||
}
|
||||
|
||||
_config.mask.mask = 0;
|
||||
_config.mask.bits = 0;
|
||||
_config.num_groups = 0;
|
||||
}
|
||||
|
||||
@ -212,23 +212,23 @@ age_restriction_load_taler_config (
|
||||
return GNUNET_SYSERR;
|
||||
|
||||
|
||||
mask.mask = TALER_EXTENSION_AGE_RESTRICTION_DEFAULT_AGE_MASK;
|
||||
mask.bits = TALER_EXTENSION_AGE_RESTRICTION_DEFAULT_AGE_MASK;
|
||||
ret = GNUNET_OK;
|
||||
|
||||
if (groups != NULL)
|
||||
{
|
||||
ret = TALER_parse_age_group_string (groups, &mask);
|
||||
if (GNUNET_OK != ret)
|
||||
mask.mask = TALER_EXTENSION_AGE_RESTRICTION_DEFAULT_AGE_MASK;
|
||||
mask.bits = TALER_EXTENSION_AGE_RESTRICTION_DEFAULT_AGE_MASK;
|
||||
}
|
||||
|
||||
if (GNUNET_OK == ret)
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||
"setting age mask to %x with #groups: %d\n", mask.mask,
|
||||
__builtin_popcount (mask.mask) - 1);
|
||||
_config.mask.mask = mask.mask;
|
||||
_config.num_groups = __builtin_popcount (mask.mask) - 1; /* no underflow, first bit always set */
|
||||
"setting age mask to %x with #groups: %d\n", mask.bits,
|
||||
__builtin_popcount (mask.bits) - 1);
|
||||
_config.mask.bits = mask.bits;
|
||||
_config.num_groups = __builtin_popcount (mask.bits) - 1; /* no underflow, first bit always set */
|
||||
this->config = &_config;
|
||||
|
||||
/* Note: we do now have _config set, however this->config_json is NOT set,
|
||||
@ -266,16 +266,16 @@ age_restriction_load_json_config (
|
||||
if (TALER_Extension_AgeRestriction != this->type)
|
||||
return GNUNET_SYSERR;
|
||||
|
||||
_config.mask.mask = mask.mask;
|
||||
_config.mask.bits = mask.bits;
|
||||
_config.num_groups = 0;
|
||||
|
||||
if (mask.mask > 0)
|
||||
if (mask.bits > 0)
|
||||
{
|
||||
/* if the mask is not zero, the first bit MUST be set */
|
||||
if (0 == (mask.mask & 1))
|
||||
if (0 == (mask.bits & 1))
|
||||
return GNUNET_SYSERR;
|
||||
|
||||
_config.num_groups = __builtin_popcount (mask.mask) - 1;
|
||||
_config.num_groups = __builtin_popcount (mask.bits) - 1;
|
||||
}
|
||||
|
||||
this->config = &_config;
|
||||
@ -358,7 +358,7 @@ struct TALER_Extension _extension_age_restriction = {
|
||||
bool
|
||||
TALER_extensions_age_restriction_is_configured ()
|
||||
{
|
||||
return (0 != _config.mask.mask);
|
||||
return (0 != _config.mask.bits);
|
||||
}
|
||||
|
||||
|
||||
|
@ -139,7 +139,7 @@ TALER_extensions_get_by_name (
|
||||
|
||||
enum GNUNET_GenericReturnValue
|
||||
config_hash_verify (
|
||||
const struct TALER_ExtensionConfigHash *h_config,
|
||||
const struct TALER_ExtensionConfigHashP *h_config,
|
||||
const struct TALER_MasterPublicKeyP *master_pub,
|
||||
const struct TALER_MasterSignatureP *master_sig
|
||||
)
|
||||
@ -164,7 +164,7 @@ TALER_extensions_verify_json_config_signature (
|
||||
struct TALER_MasterSignatureP *extensions_sig,
|
||||
struct TALER_MasterPublicKeyP *master_pub)
|
||||
{
|
||||
struct TALER_ExtensionConfigHash h_config;
|
||||
struct TALER_ExtensionConfigHashP h_config;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
TALER_JSON_extensions_config_hash (extensions, &h_config))
|
||||
|
@ -256,9 +256,9 @@ typedef void
|
||||
struct TALER_AUDITOR_DepositConfirmationHandle *
|
||||
TALER_AUDITOR_deposit_confirmation (
|
||||
struct TALER_AUDITOR_Handle *auditor,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_ExtensionContractHash *h_extensions,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_ExtensionContractHashP *h_extensions,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
struct GNUNET_TIME_Timestamp exchange_timestamp,
|
||||
struct GNUNET_TIME_Timestamp wire_deadline,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
|
@ -62,7 +62,7 @@ typedef void
|
||||
typedef enum GNUNET_GenericReturnValue
|
||||
(*TALER_AUDITORDB_HistoricDenominationRevenueDataCallback)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct GNUNET_TIME_Timestamp revenue_timestamp,
|
||||
const struct TALER_Amount *revenue_balance,
|
||||
const struct TALER_Amount *loss_balance);
|
||||
@ -274,17 +274,17 @@ struct TALER_AUDITORDB_DepositConfirmation
|
||||
/**
|
||||
* Hash over the contract for which this deposit is made.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
|
||||
/**
|
||||
* Hash over the extensions for the deposit.
|
||||
*/
|
||||
struct TALER_ExtensionContractHash h_extensions;
|
||||
struct TALER_ExtensionContractHashP h_extensions;
|
||||
|
||||
/**
|
||||
* Hash over the wiring information of the merchant.
|
||||
*/
|
||||
struct TALER_MerchantWireHash h_wire;
|
||||
struct TALER_MerchantWireHashP h_wire;
|
||||
|
||||
/**
|
||||
* Time when this deposit confirmation was generated by the exchange.
|
||||
@ -1048,9 +1048,9 @@ struct TALER_AUDITORDB_Plugin
|
||||
* @return transaction status code
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*insert_denomination_balance)(void *cls,
|
||||
const struct
|
||||
TALER_DenominationHash *denom_pub_hash,
|
||||
(*insert_denomination_balance)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
const struct TALER_Amount *denom_balance,
|
||||
const struct TALER_Amount *denom_loss,
|
||||
const struct TALER_Amount *denom_risk,
|
||||
@ -1072,9 +1072,9 @@ struct TALER_AUDITORDB_Plugin
|
||||
* @return transaction status code
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*update_denomination_balance)(void *cls,
|
||||
const struct
|
||||
TALER_DenominationHash *denom_pub_hash,
|
||||
(*update_denomination_balance)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
const struct TALER_Amount *denom_balance,
|
||||
const struct TALER_Amount *denom_loss,
|
||||
const struct TALER_Amount *denom_risk,
|
||||
@ -1095,9 +1095,9 @@ struct TALER_AUDITORDB_Plugin
|
||||
* @return transaction status code
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*get_denomination_balance)(void *cls,
|
||||
const struct
|
||||
TALER_DenominationHash *denom_pub_hash,
|
||||
(*get_denomination_balance)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct TALER_Amount *denom_balance,
|
||||
struct TALER_Amount *denom_loss,
|
||||
struct TALER_Amount *denom_risk,
|
||||
@ -1113,9 +1113,9 @@ struct TALER_AUDITORDB_Plugin
|
||||
* @return transaction status code
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*del_denomination_balance)(void *cls,
|
||||
const struct
|
||||
TALER_DenominationHash *denom_pub_hash);
|
||||
(*del_denomination_balance)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash);
|
||||
|
||||
|
||||
/**
|
||||
@ -1219,7 +1219,7 @@ struct TALER_AUDITORDB_Plugin
|
||||
(*insert_historic_denom_revenue)(
|
||||
void *cls,
|
||||
const struct TALER_MasterPublicKeyP *master_pub,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct GNUNET_TIME_Timestamp revenue_timestamp,
|
||||
const struct TALER_Amount *revenue_balance,
|
||||
const struct TALER_Amount *recoup_loss_balance);
|
||||
|
@ -489,7 +489,7 @@ struct TALER_RefreshMasterSecretP
|
||||
* Hash used to represent a denomination public key
|
||||
* and associated age restrictions (if any).
|
||||
*/
|
||||
struct TALER_DenominationHash
|
||||
struct TALER_DenominationHashP
|
||||
{
|
||||
/**
|
||||
* Actual hash value.
|
||||
@ -502,7 +502,7 @@ struct TALER_DenominationHash
|
||||
* Hash used to represent the private part
|
||||
* of a contract between merchant and consumer.
|
||||
*/
|
||||
struct TALER_PrivateContractHash
|
||||
struct TALER_PrivateContractHashP
|
||||
{
|
||||
/**
|
||||
* Actual hash value.
|
||||
@ -515,7 +515,7 @@ struct TALER_PrivateContractHash
|
||||
* Hash used to represent the "public" extensions to
|
||||
* a contract that is shared with the exchange.
|
||||
*/
|
||||
struct TALER_ExtensionContractHash
|
||||
struct TALER_ExtensionContractHashP
|
||||
{
|
||||
/**
|
||||
* Actual hash value.
|
||||
@ -528,7 +528,7 @@ struct TALER_ExtensionContractHash
|
||||
* Hash used to represent the salted hash of a
|
||||
* merchant's bank account.
|
||||
*/
|
||||
struct TALER_MerchantWireHash
|
||||
struct TALER_MerchantWireHashP
|
||||
{
|
||||
/**
|
||||
* Actual hash value.
|
||||
@ -541,7 +541,7 @@ struct TALER_MerchantWireHash
|
||||
* Hash used to represent the unsalted hash of a
|
||||
* payto:// URI representing a bank account.
|
||||
*/
|
||||
struct TALER_PaytoHash
|
||||
struct TALER_PaytoHashP
|
||||
{
|
||||
/**
|
||||
* Actual hash value.
|
||||
@ -554,7 +554,7 @@ struct TALER_PaytoHash
|
||||
* Hash used to represent a commitment to a blinded
|
||||
* coin, i.e. the hash of the envelope.
|
||||
*/
|
||||
struct TALER_BlindedCoinHash
|
||||
struct TALER_BlindedCoinHashP
|
||||
{
|
||||
/**
|
||||
* Actual hash value.
|
||||
@ -567,7 +567,7 @@ struct TALER_BlindedCoinHash
|
||||
* Hash used to represent the hash of the public
|
||||
* key of a coin (without blinding).
|
||||
*/
|
||||
struct TALER_CoinPubHash
|
||||
struct TALER_CoinPubHashP
|
||||
{
|
||||
/**
|
||||
* Actual hash value.
|
||||
@ -604,7 +604,7 @@ struct TALER_PickupIdentifierP
|
||||
* @brief Salted hash over the JSON object representing the configuration of an
|
||||
* extension.
|
||||
*/
|
||||
struct TALER_ExtensionConfigHash
|
||||
struct TALER_ExtensionConfigHashP
|
||||
{
|
||||
/**
|
||||
* Actual hash value.
|
||||
@ -850,7 +850,7 @@ struct TALER_BlindedDenominationSignature
|
||||
*/
|
||||
struct TALER_AgeMask
|
||||
{
|
||||
uint32_t mask;
|
||||
uint32_t bits;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -864,6 +864,14 @@ struct TALER_AgeCommitmentHash
|
||||
struct GNUNET_ShortHashCode shash;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Signature of an age with the private key for the corresponding age group of an age commitment.
|
||||
*/
|
||||
struct TALER_AgeAttestation
|
||||
{
|
||||
struct GNUNET_CRYPTO_EddsaSignature eddsa_signature;
|
||||
};
|
||||
|
||||
extern const struct TALER_AgeCommitmentHash TALER_ZeroAgeCommitmentHash;
|
||||
#define TALER_AgeCommitmentHash_isNullOrZero(ph) ((NULL == ph) || \
|
||||
(0 == memcmp (ph, \
|
||||
@ -1047,7 +1055,7 @@ struct TALER_CoinPublicInfo
|
||||
* Hash of the public key representing the denomination of the coin that is
|
||||
* being deposited.
|
||||
*/
|
||||
struct TALER_DenominationHash denom_pub_hash;
|
||||
struct TALER_DenominationHashP denom_pub_hash;
|
||||
|
||||
/**
|
||||
* Hash of the age commitment. If no age commitment was provided, it must be
|
||||
@ -1055,6 +1063,11 @@ struct TALER_CoinPublicInfo
|
||||
*/
|
||||
struct TALER_AgeCommitmentHash h_age_commitment;
|
||||
|
||||
/**
|
||||
* True, if age commitment is not applicable.
|
||||
*/
|
||||
bool no_age_commitment;
|
||||
|
||||
/**
|
||||
* (Unblinded) signature over @e coin_pub with @e denom_pub,
|
||||
* which demonstrates that the coin is valid.
|
||||
@ -1072,7 +1085,7 @@ struct TALER_TrackTransferDetails
|
||||
/**
|
||||
* Hash of the proposal data.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
|
||||
/**
|
||||
* Which coin was deposited?
|
||||
@ -1227,7 +1240,7 @@ TALER_denom_blind (const struct TALER_DenominationPublicKey *dk,
|
||||
const struct TALER_AgeCommitmentHash *age_commitment_hash,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_ExchangeWithdrawValues *alg_values,
|
||||
struct TALER_CoinPubHash *c_hash,
|
||||
struct TALER_CoinPubHashP *c_hash,
|
||||
struct TALER_BlindedPlanchet *blinded_planchet);
|
||||
|
||||
|
||||
@ -1236,12 +1249,14 @@ TALER_denom_blind (const struct TALER_DenominationPublicKey *dk,
|
||||
*
|
||||
* @param[out] denom_sig where to write the signature
|
||||
* @param denom_priv private key to use for signing
|
||||
* @param for_melt true to use the HKDF for melt
|
||||
* @param blinded_planchet the planchet already blinded
|
||||
* @return #GNUNET_OK on success
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_denom_sign_blinded (struct TALER_BlindedDenominationSignature *denom_sig,
|
||||
const struct TALER_DenominationPrivateKey *denom_priv,
|
||||
bool for_melt,
|
||||
const struct TALER_BlindedPlanchet *blinded_planchet);
|
||||
|
||||
|
||||
@ -1261,7 +1276,7 @@ TALER_denom_sig_unblind (
|
||||
struct TALER_DenominationSignature *denom_sig,
|
||||
const struct TALER_BlindedDenominationSignature *bdenom_sig,
|
||||
const union TALER_DenominationBlindingKeyP *bks,
|
||||
const struct TALER_CoinPubHash *c_hash,
|
||||
const struct TALER_CoinPubHashP *c_hash,
|
||||
const struct TALER_ExchangeWithdrawValues *alg_values,
|
||||
const struct TALER_DenominationPublicKey *denom_pub);
|
||||
|
||||
@ -1284,7 +1299,7 @@ TALER_blinded_denom_sig_free (
|
||||
*/
|
||||
void
|
||||
TALER_denom_pub_hash (const struct TALER_DenominationPublicKey *denom_pub,
|
||||
struct TALER_DenominationHash *denom_hash);
|
||||
struct TALER_DenominationHashP *denom_hash);
|
||||
|
||||
|
||||
/**
|
||||
@ -1399,7 +1414,7 @@ TALER_denom_priv_to_pub (const struct TALER_DenominationPrivateKey *denom_priv,
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_denom_pub_verify (const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_DenominationSignature *denom_sig,
|
||||
const struct TALER_CoinPubHash *c_hash);
|
||||
const struct TALER_CoinPubHashP *c_hash);
|
||||
|
||||
|
||||
/**
|
||||
@ -1427,8 +1442,8 @@ TALER_test_coin_valid (const struct TALER_CoinPublicInfo *coin_public_info,
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_coin_ev_hash (const struct TALER_BlindedPlanchet *blinded_planchet,
|
||||
const struct TALER_DenominationHash *denom_hash,
|
||||
struct TALER_BlindedCoinHash *bch);
|
||||
const struct TALER_DenominationHashP *denom_hash,
|
||||
struct TALER_BlindedCoinHashP *bch);
|
||||
|
||||
|
||||
/**
|
||||
@ -1441,7 +1456,7 @@ TALER_coin_ev_hash (const struct TALER_BlindedPlanchet *blinded_planchet,
|
||||
void
|
||||
TALER_coin_pub_hash (const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_AgeCommitmentHash *age_commitment_hash,
|
||||
struct TALER_CoinPubHash *coin_h);
|
||||
struct TALER_CoinPubHashP *coin_h);
|
||||
|
||||
|
||||
/**
|
||||
@ -1452,7 +1467,7 @@ TALER_coin_pub_hash (const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
*/
|
||||
void
|
||||
TALER_payto_hash (const char *payto,
|
||||
struct TALER_PaytoHash *h_payto);
|
||||
struct TALER_PaytoHashP *h_payto);
|
||||
|
||||
/**
|
||||
* Details about a planchet that the customer wants to obtain
|
||||
@ -1465,7 +1480,7 @@ struct TALER_PlanchetDetail
|
||||
/**
|
||||
* Hash of the denomination public key.
|
||||
*/
|
||||
struct TALER_DenominationHash denom_pub_hash;
|
||||
struct TALER_DenominationHashP denom_pub_hash;
|
||||
|
||||
/**
|
||||
* The blinded planchet
|
||||
@ -1679,7 +1694,7 @@ TALER_planchet_prepare (const struct TALER_DenominationPublicKey *dk,
|
||||
const union TALER_DenominationBlindingKeyP *bks,
|
||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||
const struct TALER_AgeCommitmentHash *ach,
|
||||
struct TALER_CoinPubHash *c_hash,
|
||||
struct TALER_CoinPubHashP *c_hash,
|
||||
struct TALER_PlanchetDetail *pd);
|
||||
|
||||
|
||||
@ -1723,7 +1738,7 @@ TALER_planchet_to_coin (
|
||||
const union TALER_DenominationBlindingKeyP *bks,
|
||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||
const struct TALER_AgeCommitmentHash *ach,
|
||||
const struct TALER_CoinPubHash *c_hash,
|
||||
const struct TALER_CoinPubHashP *c_hash,
|
||||
const struct TALER_ExchangeWithdrawValues *alg_values,
|
||||
struct TALER_FreshCoin *coin);
|
||||
|
||||
@ -2048,7 +2063,31 @@ TALER_CRYPTO_helper_cs_poll (struct TALER_CRYPTO_CsDenominationHelper *dh);
|
||||
* @return #TALER_EC_NONE on success
|
||||
*/
|
||||
enum TALER_ErrorCode
|
||||
TALER_CRYPTO_helper_cs_sign (
|
||||
TALER_CRYPTO_helper_cs_sign_melt (
|
||||
struct TALER_CRYPTO_CsDenominationHelper *dh,
|
||||
const struct TALER_CsPubHashP *h_cs,
|
||||
const struct TALER_BlindedCsPlanchet *blinded_planchet,
|
||||
struct TALER_BlindedDenominationSignature *bs);
|
||||
|
||||
|
||||
/**
|
||||
* Request helper @a dh to sign @a msg using the public key corresponding to
|
||||
* @a h_denom_pub.
|
||||
*
|
||||
* This operation will block until the signature has been obtained. Should
|
||||
* this process receive a signal (that is not ignored) while the operation is
|
||||
* pending, the operation will fail. Note that the helper may still believe
|
||||
* that it created the signature. Thus, signals may result in a small
|
||||
* differences in the signature counters. Retrying in this case may work.
|
||||
*
|
||||
* @param dh helper process connection
|
||||
* @param h_cs hash of the CS public key to use to sign
|
||||
* @param blinded_planchet blinded planchet containing c and nonce
|
||||
* @param[out] bs set to the blind signature
|
||||
* @return #TALER_EC_NONE on success
|
||||
*/
|
||||
enum TALER_ErrorCode
|
||||
TALER_CRYPTO_helper_cs_sign_withdraw (
|
||||
struct TALER_CRYPTO_CsDenominationHelper *dh,
|
||||
const struct TALER_CsPubHashP *h_cs,
|
||||
const struct TALER_BlindedCsPlanchet *blinded_planchet,
|
||||
@ -2093,7 +2132,32 @@ TALER_CRYPTO_helper_cs_revoke (
|
||||
* @return set to the error code (or #TALER_EC_NONE on success)
|
||||
*/
|
||||
enum TALER_ErrorCode
|
||||
TALER_CRYPTO_helper_cs_r_derive (struct TALER_CRYPTO_CsDenominationHelper *dh,
|
||||
TALER_CRYPTO_helper_cs_r_derive_withdraw (
|
||||
struct TALER_CRYPTO_CsDenominationHelper *dh,
|
||||
const struct TALER_CsPubHashP *h_cs,
|
||||
const struct TALER_CsNonce *nonce,
|
||||
struct TALER_DenominationCSPublicRPairP *crp);
|
||||
|
||||
|
||||
/**
|
||||
* Ask the helper to derive R using the @a nonce and denomination key
|
||||
* associated with @a h_cs.
|
||||
*
|
||||
* This operation will block until the R has been obtained. Should
|
||||
* this process receive a signal (that is not ignored) while the operation is
|
||||
* pending, the operation will fail. Note that the helper may still believe
|
||||
* that it created the signature. Thus, signals may result in a small
|
||||
* differences in the signature counters. Retrying in this case may work.
|
||||
*
|
||||
* @param dh helper to process connection
|
||||
* @param h_cs hash of the CS public key to revoke
|
||||
* @param nonce witdhraw nonce
|
||||
* @param[out] crp set to the pair of R values
|
||||
* @return set to the error code (or #TALER_EC_NONE on success)
|
||||
*/
|
||||
enum TALER_ErrorCode
|
||||
TALER_CRYPTO_helper_cs_r_derive_melt (
|
||||
struct TALER_CRYPTO_CsDenominationHelper *dh,
|
||||
const struct TALER_CsPubHashP *h_cs,
|
||||
const struct TALER_CsNonce *nonce,
|
||||
struct TALER_DenominationCSPublicRPairP *crp);
|
||||
@ -2269,9 +2333,9 @@ TALER_CRYPTO_helper_esign_disconnect (
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_exchange_deposit_confirm_verify (
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_ExtensionContractHash *h_extensions,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_ExtensionContractHashP *h_extensions,
|
||||
struct GNUNET_TIME_Timestamp exchange_timestamp,
|
||||
struct GNUNET_TIME_Timestamp wire_deadline,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
@ -2316,11 +2380,11 @@ void
|
||||
TALER_wallet_deposit_sign (
|
||||
const struct TALER_Amount *amount,
|
||||
const struct TALER_Amount *deposit_fee,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_AgeCommitmentHash *h_age_commitment,
|
||||
const struct TALER_ExtensionContractHash *h_extensions,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_ExtensionContractHashP *h_extensions,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct GNUNET_TIME_Timestamp wallet_timestamp,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
@ -2349,11 +2413,11 @@ enum GNUNET_GenericReturnValue
|
||||
TALER_wallet_deposit_verify (
|
||||
const struct TALER_Amount *amount,
|
||||
const struct TALER_Amount *deposit_fee,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_AgeCommitmentHash *h_commitment_hash,
|
||||
const struct TALER_ExtensionContractHash *h_extensions,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_ExtensionContractHashP *h_extensions,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct GNUNET_TIME_Timestamp wallet_timestamp,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
@ -2368,6 +2432,7 @@ TALER_wallet_deposit_verify (
|
||||
* @param melt_fee the melt fee we expect to pay
|
||||
* @param rc refresh session we are committed to
|
||||
* @param h_denom_pub hash of the coin denomination's public key
|
||||
* @param h_age_commitment hash of the age commitment (may be NULL)
|
||||
* @param coin_priv coin’s private key
|
||||
* @param[out] coin_sig set to the signature made with purpose #TALER_SIGNATURE_WALLET_COIN_MELT
|
||||
*/
|
||||
@ -2376,7 +2441,8 @@ TALER_wallet_melt_sign (
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_Amount *melt_fee,
|
||||
const struct TALER_RefreshCommitmentP *rc,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AgeCommitmentHash *h_age_commitment,
|
||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||
struct TALER_CoinSpendSignatureP *coin_sig);
|
||||
|
||||
@ -2398,7 +2464,7 @@ TALER_wallet_melt_verify (
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_Amount *melt_fee,
|
||||
const struct TALER_RefreshCommitmentP *rc,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AgeCommitmentHash *h_age_commitment,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_CoinSpendSignatureP *coin_sig);
|
||||
@ -2415,9 +2481,9 @@ TALER_wallet_melt_verify (
|
||||
*/
|
||||
void
|
||||
TALER_wallet_link_sign (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_TransferPublicKeyP *transfer_pub,
|
||||
const struct TALER_BlindedCoinHash *bch,
|
||||
const struct TALER_BlindedCoinHashP *bch,
|
||||
const struct TALER_CoinSpendPrivateKeyP *old_coin_priv,
|
||||
struct TALER_CoinSpendSignatureP *coin_sig);
|
||||
|
||||
@ -2434,9 +2500,9 @@ TALER_wallet_link_sign (
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_wallet_link_verify (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_TransferPublicKeyP *transfer_pub,
|
||||
const struct TALER_BlindedCoinHash *h_coin_ev,
|
||||
const struct TALER_BlindedCoinHashP *h_coin_ev,
|
||||
const struct TALER_CoinSpendPublicKeyP *old_coin_pub,
|
||||
const struct TALER_CoinSpendSignatureP *coin_sig);
|
||||
|
||||
@ -2452,9 +2518,9 @@ TALER_wallet_link_verify (
|
||||
*/
|
||||
void
|
||||
TALER_wallet_withdraw_sign (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_BlindedCoinHash *bch,
|
||||
const struct TALER_BlindedCoinHashP *bch,
|
||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||
struct TALER_ReserveSignatureP *reserve_sig);
|
||||
|
||||
@ -2471,9 +2537,9 @@ TALER_wallet_withdraw_sign (
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_wallet_withdraw_verify (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_BlindedCoinHash *bch,
|
||||
const struct TALER_BlindedCoinHashP *bch,
|
||||
const struct TALER_ReservePublicKeyP *reserve_pub,
|
||||
const struct TALER_ReserveSignatureP *reserve_sig);
|
||||
|
||||
@ -2506,7 +2572,7 @@ TALER_exchange_melt_confirmation_verify (
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_wallet_recoup_verify (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const union TALER_DenominationBlindingKeyP *coin_bks,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_CoinSpendSignatureP *coin_sig);
|
||||
@ -2522,7 +2588,7 @@ TALER_wallet_recoup_verify (
|
||||
*/
|
||||
void
|
||||
TALER_wallet_recoup_sign (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const union TALER_DenominationBlindingKeyP *coin_bks,
|
||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||
struct TALER_CoinSpendSignatureP *coin_sig);
|
||||
@ -2539,7 +2605,7 @@ TALER_wallet_recoup_sign (
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_wallet_recoup_refresh_verify (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const union TALER_DenominationBlindingKeyP *coin_bks,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_CoinSpendSignatureP *coin_sig);
|
||||
@ -2555,7 +2621,7 @@ TALER_wallet_recoup_refresh_verify (
|
||||
*/
|
||||
void
|
||||
TALER_wallet_recoup_refresh_sign (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const union TALER_DenominationBlindingKeyP *coin_bks,
|
||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||
struct TALER_CoinSpendSignatureP *coin_sig);
|
||||
@ -2577,7 +2643,7 @@ TALER_wallet_recoup_refresh_sign (
|
||||
void
|
||||
TALER_merchant_refund_sign (
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
uint64_t rtransaction_id,
|
||||
const struct TALER_Amount *amount,
|
||||
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
||||
@ -2598,7 +2664,7 @@ TALER_merchant_refund_sign (
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_merchant_refund_verify (
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
uint64_t rtransaction_id,
|
||||
const struct TALER_Amount *amount,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
@ -2687,7 +2753,7 @@ TALER_exchange_offline_auditor_del_verify (
|
||||
*/
|
||||
void
|
||||
TALER_exchange_offline_denomination_revoke_sign (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_MasterPrivateKeyP *master_priv,
|
||||
struct TALER_MasterSignatureP *master_sig);
|
||||
|
||||
@ -2702,7 +2768,7 @@ TALER_exchange_offline_denomination_revoke_sign (
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_exchange_offline_denomination_revoke_verify (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_MasterPublicKeyP *master_pub,
|
||||
const struct TALER_MasterSignatureP *master_sig);
|
||||
|
||||
@ -2792,7 +2858,7 @@ TALER_exchange_offline_signkey_validity_verify (
|
||||
*/
|
||||
void
|
||||
TALER_exchange_offline_denom_validity_sign (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct GNUNET_TIME_Timestamp stamp_start,
|
||||
struct GNUNET_TIME_Timestamp stamp_expire_withdraw,
|
||||
struct GNUNET_TIME_Timestamp stamp_expire_deposit,
|
||||
@ -2819,7 +2885,7 @@ TALER_exchange_offline_denom_validity_sign (
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_exchange_offline_denom_validity_verify (
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct GNUNET_TIME_Timestamp stamp_start,
|
||||
struct GNUNET_TIME_Timestamp stamp_expire_withdraw,
|
||||
struct GNUNET_TIME_Timestamp stamp_expire_deposit,
|
||||
@ -2967,7 +3033,7 @@ TALER_exchange_secmod_cs_verify (
|
||||
void
|
||||
TALER_auditor_denom_validity_sign (
|
||||
const char *auditor_url,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_MasterPublicKeyP *master_pub,
|
||||
struct GNUNET_TIME_Timestamp stamp_start,
|
||||
struct GNUNET_TIME_Timestamp stamp_expire_withdraw,
|
||||
@ -2998,7 +3064,7 @@ TALER_auditor_denom_validity_sign (
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_auditor_denom_validity_verify (
|
||||
const char *auditor_url,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_MasterPublicKeyP *master_pub,
|
||||
struct GNUNET_TIME_Timestamp stamp_start,
|
||||
struct GNUNET_TIME_Timestamp stamp_expire_withdraw,
|
||||
@ -3165,7 +3231,7 @@ TALER_exchange_wire_signature_make (
|
||||
void
|
||||
TALER_merchant_wire_signature_hash (const char *payto_uri,
|
||||
const struct TALER_WireSaltP *salt,
|
||||
struct TALER_MerchantWireHash *hc);
|
||||
struct TALER_MerchantWireHashP *hc);
|
||||
|
||||
|
||||
/**
|
||||
@ -3212,7 +3278,7 @@ TALER_merchant_wire_signature_make (
|
||||
*/
|
||||
void
|
||||
TALER_exchange_offline_extension_config_hash_sign (
|
||||
const struct TALER_ExtensionConfigHash *h_config,
|
||||
const struct TALER_ExtensionConfigHashP *h_config,
|
||||
const struct TALER_MasterPrivateKeyP *master_priv,
|
||||
struct TALER_MasterSignatureP *master_sig);
|
||||
|
||||
@ -3228,7 +3294,7 @@ TALER_exchange_offline_extension_config_hash_sign (
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_exchange_offline_extension_config_hash_verify (
|
||||
const struct TALER_ExtensionConfigHash *h_config,
|
||||
const struct TALER_ExtensionConfigHashP *h_config,
|
||||
const struct TALER_MasterPublicKeyP *master_pub,
|
||||
const struct TALER_MasterSignatureP *master_sig
|
||||
);
|
||||
@ -3249,7 +3315,7 @@ struct TALER_AgeCommitment
|
||||
/* The number of public keys, which must be the same as the number of
|
||||
* groups in the mask.
|
||||
*/
|
||||
size_t num_pub;
|
||||
size_t num;
|
||||
|
||||
/* The list of #num_pub public keys. In must have same size as the number of
|
||||
* age groups defined in the mask.
|
||||
@ -3261,12 +3327,17 @@ struct TALER_AgeCommitment
|
||||
* The list has been allocated via GNUNET_malloc.
|
||||
*/
|
||||
struct TALER_AgeCommitmentPublicKeyP *pub;
|
||||
};
|
||||
|
||||
struct TALER_AgeProof
|
||||
{
|
||||
/* The number of private keys, which must be at most num_pub_keys. One minus
|
||||
* this number corresponds to the largest age group that is supported with
|
||||
* this age commitment.
|
||||
* **Note**, that this and the next field are only relevant on the wallet
|
||||
* side for attestation and derive operations.
|
||||
*/
|
||||
size_t num_priv;
|
||||
size_t num;
|
||||
|
||||
/* List of #num_priv private keys.
|
||||
*
|
||||
@ -3279,6 +3350,12 @@ struct TALER_AgeCommitment
|
||||
struct TALER_AgeCommitmentPrivateKeyP *priv;
|
||||
};
|
||||
|
||||
struct TALER_AgeCommitmentProof
|
||||
{
|
||||
struct TALER_AgeCommitment commitment;
|
||||
struct TALER_AgeProof proof;
|
||||
};
|
||||
|
||||
/*
|
||||
* @brief Generates a hash of the public keys in the age commitment.
|
||||
*
|
||||
@ -3295,37 +3372,85 @@ TALER_age_commitment_hash (
|
||||
*
|
||||
* @param mask The age mask the defines the age groups
|
||||
* @param age The actual age for which an age commitment is generated
|
||||
* @param seed The seed that goes into the key generation. MUST be choosen uniformly random.
|
||||
* @param commitment[out] The generated age commitment, ->priv and ->pub allocated via GNUNET_malloc on success
|
||||
* @param salt The salt that goes into the key generation. MUST be choosen uniformly random.
|
||||
* @param comm_proof[out] The generated age commitment, ->priv and ->pub allocated via GNUNET_malloc on success
|
||||
* @return GNUNET_OK on success, GNUNET_SYSERR otherwise
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_age_restriction_commit (
|
||||
const struct TALER_AgeMask *mask,
|
||||
const uint8_t age,
|
||||
const uint32_t seed,
|
||||
struct TALER_AgeCommitment *commitment);
|
||||
const uint64_t salt,
|
||||
struct TALER_AgeCommitmentProof *comm_proof);
|
||||
|
||||
/*
|
||||
* @brief Derives another, equivalent age commitment for a given one.
|
||||
*
|
||||
* @param orig Original age commitment
|
||||
* @param seed Used to move the points on the elliptic curve in order to generate another, equivalent commitment.
|
||||
* @param derived[out] The resulting age commitment, ->priv and ->pub allocated via GNUNET_malloc on success.
|
||||
* @param salt Salt to randomly move the points on the elliptic curve in order to generate another, equivalent commitment.
|
||||
* @param[out] derived The resulting age commitment, ->priv and ->pub allocated via GNUNET_malloc on success.
|
||||
* @return GNUNET_OK on success, GNUNET_SYSERR otherwise
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_age_commitment_derive (
|
||||
const struct TALER_AgeCommitment *orig,
|
||||
const uint32_t seed,
|
||||
struct TALER_AgeCommitment *derived);
|
||||
const struct TALER_AgeCommitmentProof *orig,
|
||||
const uint64_t salt,
|
||||
struct TALER_AgeCommitmentProof *derived);
|
||||
|
||||
|
||||
/*
|
||||
* @brief Provide attestation for a given age, from a given age commitment, if possible.
|
||||
*
|
||||
* @param comm_proof The age commitment to be used for attestation. For successful attestation, it must contain the private key for the corresponding age group.
|
||||
* @param age Age (not age group) for which the an attestation should be done
|
||||
* @param[out] attest Signature of the age with the appropriate key from the age commitment for the corresponding age group, if applicaple.
|
||||
* @return GNUNET_OK on success, GNUNET_NO when no attestation can be made for that age with the given commitment, GNUNET_SYSERR otherwise
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_age_commitment_attest (
|
||||
const struct TALER_AgeCommitmentProof *comm_proof,
|
||||
uint8_t age,
|
||||
struct TALER_AgeAttestation *attest);
|
||||
|
||||
/*
|
||||
* @brief Verify the attestation for an given age and age commitment
|
||||
*
|
||||
* @param commitent The age commitment that went into the attestation. Only the public keys are needed.
|
||||
* @param age Age (not age group) for which the an attestation should be done
|
||||
* @param attest Signature of the age with the appropriate key from the age commitment for the corresponding age group, if applicaple.
|
||||
* @return GNUNET_OK when the attestation was successfull, GNUNET_NO no attestation couldn't be verified, GNUNET_SYSERR otherwise
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_age_commitment_verify (
|
||||
const struct TALER_AgeCommitment *commitment,
|
||||
uint8_t age,
|
||||
const struct TALER_AgeAttestation *attest);
|
||||
|
||||
/*
|
||||
* @brief helper function to free memory of a struct TALER_AgeCommitment
|
||||
* @param cmt the commitment from which all memory should be freed.
|
||||
*
|
||||
* @param p the commitment from which all memory should be freed.
|
||||
*/
|
||||
void
|
||||
TALER_age_commitment_free (
|
||||
struct TALER_AgeCommitment *cmt);
|
||||
struct TALER_AgeCommitment *p);
|
||||
|
||||
/*
|
||||
* @brief helper function to free memory of a struct TALER_AgeProof
|
||||
*
|
||||
* @param p the proof of commitment from which all memory should be freed.
|
||||
*/
|
||||
void
|
||||
TALER_age_proof_free (
|
||||
struct TALER_AgeProof *p);
|
||||
|
||||
/*
|
||||
* @brief helper function to free memory of a struct TALER_AgeCommitmentProof
|
||||
*
|
||||
* @param p the commitment and its proof from which all memory should be freed.
|
||||
*/
|
||||
void
|
||||
TALER_age_commitment_proof_free (
|
||||
struct TALER_AgeCommitmentProof *p);
|
||||
|
||||
#endif
|
||||
|
@ -97,7 +97,7 @@ struct TALER_EXCHANGE_DenomPublicKey
|
||||
/**
|
||||
* The hash of the public key.
|
||||
*/
|
||||
struct TALER_DenominationHash h_key;
|
||||
struct TALER_DenominationHashP h_key;
|
||||
|
||||
/**
|
||||
* Exchange's master signature over this denomination record.
|
||||
@ -609,7 +609,7 @@ TALER_EXCHANGE_destroy_denomination_key (
|
||||
const struct TALER_EXCHANGE_DenomPublicKey *
|
||||
TALER_EXCHANGE_get_denomination_key_by_hash (
|
||||
const struct TALER_EXCHANGE_Keys *keys,
|
||||
const struct TALER_DenominationHash *hc);
|
||||
const struct TALER_DenominationHashP *hc);
|
||||
|
||||
|
||||
/**
|
||||
@ -775,10 +775,10 @@ void
|
||||
TALER_EXCHANGE_deposit_permission_sign (
|
||||
const struct TALER_Amount *amount,
|
||||
const struct TALER_Amount *deposit_fee,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_ExtensionContractHash *h_extensions,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_ExtensionContractHashP *h_extensions,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||
const struct TALER_AgeCommitment *age_commitment,
|
||||
struct GNUNET_TIME_Timestamp wallet_timestamp,
|
||||
@ -905,7 +905,7 @@ TALER_EXCHANGE_deposit (
|
||||
struct GNUNET_TIME_Timestamp wire_deadline,
|
||||
const char *merchant_payto_uri,
|
||||
const struct TALER_WireSaltP *wire_salt,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_AgeCommitmentHash *h_age_commitment,
|
||||
const json_t *extension_details,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
@ -996,7 +996,8 @@ typedef void
|
||||
struct TALER_EXCHANGE_RefundHandle *
|
||||
TALER_EXCHANGE_refund (struct TALER_EXCHANGE_Handle *exchange,
|
||||
const struct TALER_Amount *amount,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct
|
||||
TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
uint64_t rtransaction_id,
|
||||
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
||||
@ -1681,9 +1682,11 @@ struct TALER_EXCHANGE_RefreshData
|
||||
struct TALER_CoinSpendPrivateKeyP melt_priv;
|
||||
|
||||
/*
|
||||
* age commitment that went into the original coin, might be NULL
|
||||
* age commitment and proof and its hash that went into the original coin,
|
||||
* might be NULL.
|
||||
*/
|
||||
struct TALER_AgeCommitment *age_commitment;
|
||||
const struct TALER_AgeCommitmentProof *melt_age_commitment_proof;
|
||||
const struct TALER_AgeCommitmentHash *melt_h_age_commitment;
|
||||
|
||||
/**
|
||||
* amount specifying how much the coin will contribute to the melt
|
||||
@ -1855,7 +1858,7 @@ struct TALER_EXCHANGE_RevealedCoinInfo
|
||||
/**
|
||||
* Age commitment and its hash of the coin, might be NULL.
|
||||
*/
|
||||
struct TALER_AgeCommitment *age_commitment;
|
||||
struct TALER_AgeCommitmentProof *age_commitment_proof;
|
||||
struct TALER_AgeCommitmentHash *h_age_commitment;
|
||||
|
||||
/**
|
||||
@ -1996,6 +1999,12 @@ struct TALER_EXCHANGE_LinkedCoinInfo
|
||||
*/
|
||||
struct TALER_CoinSpendPrivateKeyP coin_priv;
|
||||
|
||||
/**
|
||||
* Age commitment and its hash, if applicable. Might be NULL.
|
||||
*/
|
||||
struct TALER_AgeCommitmentProof *age_commitment_proof;
|
||||
struct TALER_AgeCommitmentHash *h_age_commitment;
|
||||
|
||||
/**
|
||||
* Master secret of this coin.
|
||||
*/
|
||||
@ -2083,7 +2092,8 @@ typedef void
|
||||
struct TALER_EXCHANGE_LinkHandle *
|
||||
TALER_EXCHANGE_link (struct TALER_EXCHANGE_Handle *exchange,
|
||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||
const struct TALER_AgeCommitment *age_commitment,
|
||||
const struct
|
||||
TALER_AgeCommitmentProof *age_commitment_proof,
|
||||
TALER_EXCHANGE_LinkCallback link_cb,
|
||||
void *link_cb_cls);
|
||||
|
||||
@ -2125,7 +2135,7 @@ struct TALER_EXCHANGE_TransferData
|
||||
/**
|
||||
* hash of the payto:// URI the transfer went to
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
|
||||
/**
|
||||
* time when the exchange claims to have performed the wire transfer
|
||||
@ -2324,8 +2334,8 @@ struct TALER_EXCHANGE_DepositGetHandle *
|
||||
TALER_EXCHANGE_deposits_get (
|
||||
struct TALER_EXCHANGE_Handle *exchange,
|
||||
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
TALER_EXCHANGE_DepositGetCallback cb,
|
||||
void *cb_cls);
|
||||
@ -2360,7 +2370,7 @@ TALER_EXCHANGE_verify_coin_history (
|
||||
const char *currency,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
json_t *history,
|
||||
struct TALER_DenominationHash *h_denom_pub,
|
||||
struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct TALER_Amount *total);
|
||||
|
||||
|
||||
@ -2622,7 +2632,7 @@ typedef void
|
||||
struct TALER_EXCHANGE_KycCheckHandle *
|
||||
TALER_EXCHANGE_kyc_check (struct TALER_EXCHANGE_Handle *eh,
|
||||
uint64_t payment_target,
|
||||
const struct TALER_PaytoHash *h_payto,
|
||||
const struct TALER_PaytoHashP *h_payto,
|
||||
struct GNUNET_TIME_Relative timeout,
|
||||
TALER_EXCHANGE_KycStatusCallback cb,
|
||||
void *cb_cls);
|
||||
@ -3010,7 +3020,7 @@ struct TALER_EXCHANGE_DenominationKeySignature
|
||||
/**
|
||||
* The hash of the denomination's public key
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Signature over this denomination key by the exchange's master signature.
|
||||
@ -3187,7 +3197,7 @@ struct TALER_EXCHANGE_ManagementRevokeDenominationKeyHandle *
|
||||
TALER_EXCHANGE_management_revoke_denomination_key (
|
||||
struct GNUNET_CURL_Context *ctx,
|
||||
const char *url,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_MasterSignatureP *master_sig,
|
||||
TALER_EXCHANGE_ManagementRevokeDenominationKeyCallback cb,
|
||||
void *cb_cls);
|
||||
@ -3559,7 +3569,7 @@ struct TALER_EXCHANGE_AuditorAddDenominationHandle *
|
||||
TALER_EXCHANGE_add_auditor_denomination (
|
||||
struct GNUNET_CURL_Context *ctx,
|
||||
const char *url,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
const struct TALER_AuditorSignatureP *auditor_sig,
|
||||
TALER_EXCHANGE_AuditorAddDenominationCallback cb,
|
||||
|
@ -109,7 +109,7 @@ struct TALER_KycCompletedEventP
|
||||
/**
|
||||
* Public key of the reserve the event is about.
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
};
|
||||
|
||||
|
||||
@ -200,7 +200,7 @@ struct TALER_EXCHANGEDB_TableData
|
||||
struct
|
||||
{
|
||||
uint32_t denom_type;
|
||||
uint32_t age_restrictions;
|
||||
uint32_t age_mask;
|
||||
struct TALER_DenominationPublicKey denom_pub;
|
||||
struct TALER_MasterSignatureP master_sig;
|
||||
struct GNUNET_TIME_Timestamp valid_from;
|
||||
@ -257,7 +257,7 @@ struct TALER_EXCHANGEDB_TableData
|
||||
|
||||
struct
|
||||
{
|
||||
struct TALER_BlindedCoinHash h_blind_ev;
|
||||
struct TALER_BlindedCoinHashP h_blind_ev;
|
||||
uint64_t denominations_serial;
|
||||
struct TALER_BlindedDenominationSignature denom_sig;
|
||||
uint64_t reserve_uuid;
|
||||
@ -301,6 +301,7 @@ struct TALER_EXCHANGEDB_TableData
|
||||
struct TALER_AgeCommitmentHash age_hash;
|
||||
uint64_t denominations_serial;
|
||||
struct TALER_DenominationSignature denom_sig;
|
||||
struct TALER_Amount remaining;
|
||||
} known_coins;
|
||||
|
||||
struct
|
||||
@ -309,6 +310,7 @@ struct TALER_EXCHANGEDB_TableData
|
||||
struct TALER_CoinSpendPublicKeyP old_coin_pub;
|
||||
struct TALER_CoinSpendSignatureP old_coin_sig;
|
||||
struct TALER_Amount amount_with_fee;
|
||||
struct TALER_AgeCommitmentHash h_age_commitment;
|
||||
uint32_t noreveal_index;
|
||||
} refresh_commitments;
|
||||
|
||||
@ -342,7 +344,7 @@ struct TALER_EXCHANGEDB_TableData
|
||||
struct GNUNET_TIME_Timestamp refund_deadline;
|
||||
struct GNUNET_TIME_Timestamp wire_deadline;
|
||||
struct TALER_MerchantPublicKeyP merchant_pub;
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
struct TALER_CoinSpendSignatureP coin_sig;
|
||||
struct TALER_WireSaltP wire_salt;
|
||||
uint64_t wire_target_serial_id;
|
||||
@ -648,7 +650,7 @@ typedef void
|
||||
(*TALER_EXCHANGEDB_DenominationsCallback)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_EXCHANGEDB_DenominationKeyMetaData *meta,
|
||||
const struct TALER_MasterSignatureP *master_sig,
|
||||
bool recoup_possible);
|
||||
@ -700,7 +702,7 @@ typedef void
|
||||
(*TALER_EXCHANGEDB_AuditorDenominationsCallback)(
|
||||
void *cls,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AuditorSignatureP *auditor_sig);
|
||||
|
||||
|
||||
@ -720,7 +722,7 @@ struct TALER_EXCHANGEDB_CollectableBlindcoin
|
||||
/**
|
||||
* Hash of the denomination key (which coin was generated).
|
||||
*/
|
||||
struct TALER_DenominationHash denom_pub_hash;
|
||||
struct TALER_DenominationHashP denom_pub_hash;
|
||||
|
||||
/**
|
||||
* Value of the coin being exchangeed (matching the denomination key)
|
||||
@ -753,7 +755,7 @@ struct TALER_EXCHANGEDB_CollectableBlindcoin
|
||||
* Hash over the blinded message, needed to verify
|
||||
* the @e reserve_sig.
|
||||
*/
|
||||
struct TALER_BlindedCoinHash h_coin_envelope;
|
||||
struct TALER_BlindedCoinHashP h_coin_envelope;
|
||||
|
||||
/**
|
||||
* Signature confirming the withdrawal, matching @e reserve_pub,
|
||||
@ -844,7 +846,7 @@ struct TALER_EXCHANGEDB_RecoupListEntry
|
||||
/**
|
||||
* Hash of the public denomination key used to sign the coin.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Public key of the reserve the coin was paid back into.
|
||||
@ -1024,7 +1026,7 @@ struct TALER_EXCHANGEDB_Deposit
|
||||
* Hash over the proposal data between merchant and customer
|
||||
* (remains unknown to the Exchange).
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
|
||||
/**
|
||||
* Salt used by the merchant to compute "h_wire".
|
||||
@ -1112,12 +1114,12 @@ struct TALER_EXCHANGEDB_DepositListEntry
|
||||
* Hash over the proposa data between merchant and customer
|
||||
* (remains unknown to the Exchange).
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
|
||||
/**
|
||||
* Hash of the public denomination key used to sign the coin.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Age commitment hash, if applicable ot the denomination. Should be all
|
||||
@ -1125,6 +1127,11 @@ struct TALER_EXCHANGEDB_DepositListEntry
|
||||
*/
|
||||
struct TALER_AgeCommitmentHash h_age_commitment;
|
||||
|
||||
/**
|
||||
* true, if age commitment is not applicable
|
||||
*/
|
||||
bool no_age_commitment;
|
||||
|
||||
/**
|
||||
* Detailed information about the receiver for executing the transaction.
|
||||
* URL in payto://-format.
|
||||
@ -1205,7 +1212,7 @@ struct TALER_EXCHANGEDB_RefundListEntry
|
||||
* Hash over the proposal data between merchant and customer
|
||||
* (remains unknown to the Exchange).
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
|
||||
/**
|
||||
* Merchant-generated REFUND transaction ID to detect duplicate
|
||||
@ -1268,13 +1275,6 @@ struct TALER_EXCHANGEDB_Refresh
|
||||
*/
|
||||
struct TALER_CoinSpendSignatureP coin_sig;
|
||||
|
||||
/**
|
||||
* Hash of the age commitment used to sign the coin, if age restriction was
|
||||
* applicable to the denomination. May be all zeroes if no age restriction
|
||||
* applies.
|
||||
*/
|
||||
struct TALER_AgeCommitmentHash h_age_commitment;
|
||||
|
||||
/**
|
||||
* Refresh commitment this coin is melted into.
|
||||
*/
|
||||
@ -1318,7 +1318,7 @@ struct TALER_EXCHANGEDB_MeltListEntry
|
||||
/**
|
||||
* Hash of the public denomination key used to sign the coin.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Hash of the age commitment used to sign the coin, if age restriction was
|
||||
@ -1327,6 +1327,11 @@ struct TALER_EXCHANGEDB_MeltListEntry
|
||||
*/
|
||||
struct TALER_AgeCommitmentHash h_age_commitment;
|
||||
|
||||
/**
|
||||
* true, if no h_age_commitment is applicable
|
||||
*/
|
||||
bool no_age_commitment;
|
||||
|
||||
/**
|
||||
* How much value is being melted? This amount includes the fees,
|
||||
* so the final amount contributed to the melt is this value minus
|
||||
@ -1549,7 +1554,7 @@ typedef enum GNUNET_DB_QueryStatus
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_Amount *deposit_fee,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms);
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms);
|
||||
|
||||
|
||||
/**
|
||||
@ -1576,7 +1581,7 @@ typedef enum GNUNET_DB_QueryStatus
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *amount_with_fee,
|
||||
const struct TALER_Amount *deposit_fee,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
uint64_t wire_target,
|
||||
const char *payto_uri);
|
||||
|
||||
@ -1671,7 +1676,7 @@ struct TALER_EXCHANGEDB_RefreshRevealedCoin
|
||||
/**
|
||||
* Hash of the public denomination key of the coin.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Signature of the original coin being refreshed over the
|
||||
@ -1682,7 +1687,7 @@ struct TALER_EXCHANGEDB_RefreshRevealedCoin
|
||||
/**
|
||||
* Hash of the blinded new coin, that is @e coin_ev.
|
||||
*/
|
||||
struct TALER_BlindedCoinHash coin_envelope_hash;
|
||||
struct TALER_BlindedCoinHashP coin_envelope_hash;
|
||||
|
||||
/**
|
||||
* Signature generated by the exchange over the coin (in blinded format).
|
||||
@ -1712,7 +1717,7 @@ struct TALER_EXCHANGEDB_CsRevealFreshCoinData
|
||||
/**
|
||||
* Denomination of the fresh coin.
|
||||
*/
|
||||
struct TALER_DenominationHash new_denom_pub_hash;
|
||||
struct TALER_DenominationHashP new_denom_pub_hash;
|
||||
|
||||
/**
|
||||
* Blind signature of the fresh coin (possibly updated
|
||||
@ -1834,7 +1839,7 @@ typedef enum GNUNET_GenericReturnValue
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const struct TALER_MerchantSignatureP *merchant_sig,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
uint64_t rtransaction_id,
|
||||
const struct TALER_Amount *amount_with_fee);
|
||||
|
||||
@ -1915,7 +1920,7 @@ typedef enum GNUNET_GenericReturnValue
|
||||
(*TALER_EXCHANGEDB_WithdrawCallback)(
|
||||
void *cls,
|
||||
uint64_t rowid,
|
||||
const struct TALER_BlindedCoinHash *h_blind_ev,
|
||||
const struct TALER_BlindedCoinHashP *h_blind_ev,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_ReservePublicKeyP *reserve_pub,
|
||||
const struct TALER_ReserveSignatureP *reserve_sig,
|
||||
@ -1946,6 +1951,7 @@ typedef void
|
||||
* @param rowid which row in the table is the information from (for diagnostics)
|
||||
* @param merchant_pub public key of the merchant (should be same for all callbacks with the same @e cls)
|
||||
* @param account_payto_uri which account did the transfer go to?
|
||||
* @param h_payto hash over @a account_payto_uri as it is in the DB
|
||||
* @param exec_time execution time of the wire transfer (should be same for all callbacks with the same @e cls)
|
||||
* @param h_contract_terms which proposal was this payment about
|
||||
* @param denom_pub denomination of @a coin_pub
|
||||
@ -1959,8 +1965,9 @@ typedef void
|
||||
uint64_t rowid,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const char *account_payto_uri,
|
||||
const struct TALER_PaytoHashP *h_payto,
|
||||
struct GNUNET_TIME_Timestamp exec_time,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_Amount *coin_value,
|
||||
@ -2059,7 +2066,7 @@ typedef enum GNUNET_GenericReturnValue
|
||||
struct GNUNET_TIME_Timestamp timestamp,
|
||||
const struct TALER_Amount *amount,
|
||||
const struct TALER_CoinSpendPublicKeyP *old_coin_pub,
|
||||
const struct TALER_DenominationHash *old_denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *old_denom_pub_hash,
|
||||
const struct TALER_CoinPublicInfo *coin,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_CoinSpendSignatureP *coin_sig,
|
||||
@ -2142,7 +2149,7 @@ typedef void
|
||||
const struct TALER_CoinPublicInfo *coin,
|
||||
const struct TALER_CoinSpendSignatureP *coin_sig,
|
||||
const union TALER_DenominationBlindingKeyP *coin_blind,
|
||||
const struct TALER_BlindedCoinHash *h_blinded_ev,
|
||||
const struct TALER_BlindedCoinHashP *h_blinded_ev,
|
||||
const struct TALER_Amount *amount);
|
||||
|
||||
|
||||
@ -2357,7 +2364,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*get_denomination_info)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct TALER_EXCHANGEDB_DenominationKeyInformationP *issue);
|
||||
|
||||
|
||||
@ -2483,7 +2490,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*select_kyc_status)(void *cls,
|
||||
uint64_t payment_target_uuid,
|
||||
struct TALER_PaytoHash *h_payto,
|
||||
struct TALER_PaytoHashP *h_payto,
|
||||
struct TALER_EXCHANGEDB_KycStatus *kyc);
|
||||
|
||||
|
||||
@ -2537,7 +2544,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*lock_nonce)(void *cls,
|
||||
const struct TALER_CsNonce *nonce,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
const union TALER_EXCHANGEDB_NonceLockTargetP *target);
|
||||
|
||||
|
||||
@ -2554,7 +2561,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*get_withdraw_info)(void *cls,
|
||||
const struct TALER_BlindedCoinHash *bch,
|
||||
const struct TALER_BlindedCoinHashP *bch,
|
||||
struct TALER_EXCHANGEDB_CollectableBlindcoin *collectable);
|
||||
|
||||
|
||||
@ -2623,7 +2630,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
void *cls,
|
||||
const struct TALER_EXCHANGEDB_Deposit *deposit,
|
||||
uint64_t known_coin_id,
|
||||
const struct TALER_PaytoHash *h_payto,
|
||||
const struct TALER_PaytoHashP *h_payto,
|
||||
bool extension_blocked,
|
||||
struct GNUNET_TIME_Timestamp *exchange_timestamp,
|
||||
bool *balance_ok,
|
||||
@ -2798,7 +2805,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
*/
|
||||
long long
|
||||
(*count_known_coins) (void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash);
|
||||
const struct TALER_DenominationHashP *denom_pub_hash);
|
||||
|
||||
|
||||
/**
|
||||
@ -2846,7 +2853,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
(*ensure_coin_known)(void *cls,
|
||||
const struct TALER_CoinPublicInfo *coin,
|
||||
uint64_t *known_coin_id,
|
||||
struct TALER_DenominationHash *denom_pub_hash,
|
||||
struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct TALER_AgeCommitmentHash *age_hash);
|
||||
|
||||
|
||||
@ -2876,7 +2883,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
(*get_coin_denomination)(void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
uint64_t *known_coin_id,
|
||||
struct TALER_DenominationHash *denom_hash);
|
||||
struct TALER_DenominationHashP *denom_hash);
|
||||
|
||||
|
||||
/**
|
||||
@ -2898,8 +2905,8 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*have_deposit2)(
|
||||
void *cls,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantPublicKeyP *merchant,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
@ -2950,7 +2957,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
(*select_refunds_by_coin)(void *cls,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
const struct TALER_PrivateContractHash *h_contract,
|
||||
const struct TALER_PrivateContractHashP *h_contract,
|
||||
TALER_EXCHANGEDB_RefundCoinCallback cb,
|
||||
void *cb_cls);
|
||||
|
||||
@ -3189,8 +3196,8 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*lookup_transfer_by_deposit)(
|
||||
void *cls,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
bool *pending,
|
||||
@ -3614,7 +3621,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*get_reserve_by_h_blind)(void *cls,
|
||||
const struct TALER_BlindedCoinHash *bch,
|
||||
const struct TALER_BlindedCoinHashP *bch,
|
||||
struct TALER_ReservePublicKeyP *reserve_pub,
|
||||
uint64_t *reserve_out_serial_id);
|
||||
|
||||
@ -3631,7 +3638,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*get_old_coin_by_h_blind)(void *cls,
|
||||
const struct TALER_BlindedCoinHash *h_blind_ev,
|
||||
const struct TALER_BlindedCoinHashP *h_blind_ev,
|
||||
struct TALER_CoinSpendPublicKeyP *old_coin_pub,
|
||||
uint64_t *rrc_serial);
|
||||
|
||||
@ -3648,7 +3655,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*insert_denomination_revocation)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
const struct TALER_MasterSignatureP *master_sig);
|
||||
|
||||
|
||||
@ -3663,9 +3670,9 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
* @return transaction status code
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*get_denomination_revocation)(void *cls,
|
||||
const struct
|
||||
TALER_DenominationHash *denom_pub_hash,
|
||||
(*get_denomination_revocation)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct TALER_MasterSignatureP *master_sig,
|
||||
uint64_t *rowid);
|
||||
|
||||
@ -3882,7 +3889,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*lookup_denomination_key)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct TALER_EXCHANGEDB_DenominationKeyMetaData *meta);
|
||||
|
||||
|
||||
@ -3899,7 +3906,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*add_denomination_key)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_EXCHANGEDB_DenominationKeyMetaData *meta,
|
||||
const struct TALER_MasterSignatureP *master_sig);
|
||||
@ -3950,7 +3957,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*insert_auditor_denom_sig)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
const struct TALER_AuditorSignatureP *auditor_sig);
|
||||
|
||||
@ -3967,7 +3974,7 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*select_auditor_denom_sig)(
|
||||
void *cls,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
struct TALER_AuditorSignatureP *auditor_sig);
|
||||
|
||||
|
@ -400,7 +400,7 @@ TALER_JSON_spec_i18n_str (const char *name,
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_JSON_contract_hash (const json_t *json,
|
||||
struct TALER_PrivateContractHash *hc);
|
||||
struct TALER_PrivateContractHashP *hc);
|
||||
|
||||
|
||||
/**
|
||||
@ -522,7 +522,7 @@ TALER_JSON_get_error_code2 (const void *data,
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_JSON_merchant_wire_signature_hash (const json_t *wire_s,
|
||||
struct TALER_MerchantWireHash *hc);
|
||||
struct TALER_MerchantWireHashP *hc);
|
||||
|
||||
|
||||
/**
|
||||
@ -623,7 +623,7 @@ TALER_JSON_wire_to_payto (const json_t *wire_s);
|
||||
*/
|
||||
void
|
||||
TALER_deposit_extension_hash (const json_t *extensions,
|
||||
struct TALER_ExtensionContractHash *ech);
|
||||
struct TALER_ExtensionContractHashP *ech);
|
||||
|
||||
/**
|
||||
* Hash the @a config of an extension, given as JSON
|
||||
@ -634,7 +634,7 @@ TALER_deposit_extension_hash (const json_t *extensions,
|
||||
*/
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_JSON_extensions_config_hash (const json_t *config,
|
||||
struct TALER_ExtensionConfigHash *eh);
|
||||
struct TALER_ExtensionConfigHashP *eh);
|
||||
|
||||
/**
|
||||
* Canonicalize a JSON input to a string according to RFC 8785.
|
||||
|
@ -271,6 +271,12 @@
|
||||
*/
|
||||
#define TALER_SIGNATURE_WALLET_COIN_RECOUP_REFRESH 1206
|
||||
|
||||
/**
|
||||
* Signature using a age restriction key for attestation of a particular
|
||||
* age/age-group.
|
||||
*/
|
||||
#define TALER_SIGNATURE_WALLET_AGE_ATTESTATION 1207
|
||||
|
||||
|
||||
/******************************/
|
||||
/* Security module signatures */
|
||||
@ -345,7 +351,7 @@ struct TALER_DenominationKeyAnnouncementPS
|
||||
/**
|
||||
* Hash of the denomination public key.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom;
|
||||
struct TALER_DenominationHashP h_denom;
|
||||
|
||||
/**
|
||||
* Hash of the section name in the configuration of this denomination.
|
||||
@ -412,7 +418,7 @@ struct TALER_LinkDataPS
|
||||
/**
|
||||
* Hash of the denomination public key of the new coin.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Transfer public key (for which the private key was not revealed)
|
||||
@ -427,7 +433,7 @@ struct TALER_LinkDataPS
|
||||
/**
|
||||
* Hash of the blinded new coin.
|
||||
*/
|
||||
struct TALER_BlindedCoinHash coin_envelope_hash;
|
||||
struct TALER_BlindedCoinHashP coin_envelope_hash;
|
||||
};
|
||||
|
||||
|
||||
@ -456,12 +462,12 @@ struct TALER_WithdrawRequestPS
|
||||
/**
|
||||
* Hash of the denomination public key for the coin that is withdrawn.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denomination_pub GNUNET_PACKED;
|
||||
struct TALER_DenominationHashP h_denomination_pub GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash of the (blinded) message to be signed by the Exchange.
|
||||
*/
|
||||
struct TALER_BlindedCoinHash h_coin_envelope GNUNET_PACKED;
|
||||
struct TALER_BlindedCoinHashP h_coin_envelope GNUNET_PACKED;
|
||||
};
|
||||
|
||||
|
||||
@ -480,7 +486,7 @@ struct TALER_DepositRequestPS
|
||||
/**
|
||||
* Hash over the contract for which this deposit is made.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms GNUNET_PACKED;
|
||||
struct TALER_PrivateContractHashP h_contract_terms GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash over the age commitment that went into the coin. Maybe all zero, if
|
||||
@ -491,17 +497,17 @@ struct TALER_DepositRequestPS
|
||||
/**
|
||||
* Hash over extension attributes shared with the exchange.
|
||||
*/
|
||||
struct TALER_ExtensionContractHash h_extensions GNUNET_PACKED;
|
||||
struct TALER_ExtensionContractHashP h_extensions GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash over the wiring information of the merchant.
|
||||
*/
|
||||
struct TALER_MerchantWireHash h_wire GNUNET_PACKED;
|
||||
struct TALER_MerchantWireHashP h_wire GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash over the denomination public key used to sign the coin.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub GNUNET_PACKED;
|
||||
struct TALER_DenominationHashP h_denom_pub GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Time when this request was generated. Used, for example, to
|
||||
@ -567,18 +573,18 @@ struct TALER_DepositConfirmationPS
|
||||
/**
|
||||
* Hash over the contract for which this deposit is made.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms GNUNET_PACKED;
|
||||
struct TALER_PrivateContractHashP h_contract_terms GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash over the wiring information of the merchant.
|
||||
*/
|
||||
struct TALER_MerchantWireHash h_wire GNUNET_PACKED;
|
||||
struct TALER_MerchantWireHashP h_wire GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash over the extension options of the deposit, 0 if there
|
||||
* were not extension options.
|
||||
*/
|
||||
struct TALER_ExtensionContractHash h_extensions GNUNET_PACKED;
|
||||
struct TALER_ExtensionContractHashP h_extensions GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Time when this confirmation was generated / when the exchange received
|
||||
@ -636,7 +642,7 @@ struct TALER_RefundRequestPS
|
||||
* Hash over the proposal data to identify the contract
|
||||
* which is being refunded.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms GNUNET_PACKED;
|
||||
struct TALER_PrivateContractHashP h_contract_terms GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* The coin's public key. This is the value that must have been
|
||||
@ -672,7 +678,7 @@ struct TALER_RefundConfirmationPS
|
||||
* Hash over the proposal data to identify the contract
|
||||
* which is being refunded.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms GNUNET_PACKED;
|
||||
struct TALER_PrivateContractHashP h_contract_terms GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* The coin's public key. This is the value that must have been
|
||||
@ -719,7 +725,7 @@ struct TALER_RefreshMeltCoinAffirmationPS
|
||||
/**
|
||||
* Hash over the denomination public key used to sign the coin.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub GNUNET_PACKED;
|
||||
struct TALER_DenominationHashP h_denom_pub GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* If age commitment was provided during the withdrawal of the coin, this is
|
||||
@ -866,7 +872,7 @@ struct TALER_ExchangeAccountSetupSuccessPS
|
||||
* Hash over the payto for which the signature was
|
||||
* made.
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
|
||||
/**
|
||||
* When was the signature made.
|
||||
@ -952,7 +958,7 @@ struct TALER_MasterAddWirePS
|
||||
/**
|
||||
* Hash over the exchange's payto URI.
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto GNUNET_PACKED;
|
||||
struct TALER_PaytoHashP h_payto GNUNET_PACKED;
|
||||
};
|
||||
|
||||
|
||||
@ -977,7 +983,7 @@ struct TALER_MasterDelWirePS
|
||||
/**
|
||||
* Hash over the exchange's payto URI.
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto GNUNET_PACKED;
|
||||
struct TALER_PaytoHashP h_payto GNUNET_PACKED;
|
||||
|
||||
};
|
||||
|
||||
@ -997,7 +1003,7 @@ struct TALER_MasterExtensionConfigurationPS
|
||||
/**
|
||||
* Hash of the JSON object that represents the configuration of an extension.
|
||||
*/
|
||||
struct TALER_ExtensionConfigHash h_config GNUNET_PACKED;
|
||||
struct TALER_ExtensionConfigHashP h_config GNUNET_PACKED;
|
||||
};
|
||||
|
||||
|
||||
@ -1073,7 +1079,7 @@ struct TALER_DenominationKeyValidityPS
|
||||
* Hash code of the denomination public key. (Used to avoid having
|
||||
* the variable-size RSA key in this struct.)
|
||||
*/
|
||||
struct TALER_DenominationHash denom_hash GNUNET_PACKED;
|
||||
struct TALER_DenominationHashP denom_hash GNUNET_PACKED;
|
||||
|
||||
};
|
||||
|
||||
@ -1156,7 +1162,7 @@ struct TALER_ExchangeKeyValidityPS
|
||||
* Hash code of the denomination public key. (Used to avoid having
|
||||
* the variable-size RSA key in this struct.)
|
||||
*/
|
||||
struct TALER_DenominationHash denom_hash GNUNET_PACKED;
|
||||
struct TALER_DenominationHashP denom_hash GNUNET_PACKED;
|
||||
|
||||
};
|
||||
|
||||
@ -1176,7 +1182,7 @@ struct TALER_MasterWireDetailsPS
|
||||
/**
|
||||
* Hash over the account holder's payto:// URL.
|
||||
*/
|
||||
struct TALER_PaytoHash h_wire_details GNUNET_PACKED;
|
||||
struct TALER_PaytoHashP h_wire_details GNUNET_PACKED;
|
||||
|
||||
};
|
||||
|
||||
@ -1197,7 +1203,7 @@ struct TALER_MerchantWireDetailsPS
|
||||
* Salted hash over the account holder's payto:// URL and
|
||||
* the salt, as done by #TALER_merchant_wire_signature_hash().
|
||||
*/
|
||||
struct TALER_MerchantWireHash h_wire_details GNUNET_PACKED;
|
||||
struct TALER_MerchantWireHashP h_wire_details GNUNET_PACKED;
|
||||
|
||||
};
|
||||
|
||||
@ -1257,7 +1263,7 @@ struct TALER_MasterDenominationKeyRevocationPS
|
||||
/**
|
||||
* Hash of the denomination key.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
};
|
||||
|
||||
@ -1294,12 +1300,12 @@ struct TALER_DepositTrackPS
|
||||
/**
|
||||
* Hash over the proposal data of the contract for which this deposit is made.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms GNUNET_PACKED;
|
||||
struct TALER_PrivateContractHashP h_contract_terms GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash over the wiring information of the merchant.
|
||||
*/
|
||||
struct TALER_MerchantWireHash h_wire GNUNET_PACKED;
|
||||
struct TALER_MerchantWireHashP h_wire GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* The Merchant's public key. The deposit inquiry request is to be
|
||||
@ -1326,7 +1332,7 @@ struct TALER_WireDepositDetailP
|
||||
/**
|
||||
* Hash of the contract
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
|
||||
/**
|
||||
* Time when the wire transfer was performed by the exchange.
|
||||
@ -1381,7 +1387,7 @@ struct TALER_WireDepositDataPS
|
||||
/**
|
||||
* Hash of bank account of the merchant.
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
|
||||
/**
|
||||
* Hash of the individual deposits that were aggregated,
|
||||
@ -1406,7 +1412,7 @@ struct TALER_ProposalDataPS
|
||||
* Hash of the JSON contract in UTF-8 including 0-termination,
|
||||
* using JSON_COMPACT | JSON_SORT_KEYS
|
||||
*/
|
||||
struct TALER_PrivateContractHash hash;
|
||||
struct TALER_PrivateContractHashP hash;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1424,7 +1430,7 @@ struct TALER_PaymentResponsePS
|
||||
/**
|
||||
* Hash of the proposal data associated with this confirmation
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
};
|
||||
|
||||
|
||||
@ -1443,12 +1449,12 @@ struct TALER_ConfirmWirePS
|
||||
/**
|
||||
* Hash over the wiring information of the merchant.
|
||||
*/
|
||||
struct TALER_MerchantWireHash h_wire GNUNET_PACKED;
|
||||
struct TALER_MerchantWireHashP h_wire GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash over the contract for which this deposit is made.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms GNUNET_PACKED;
|
||||
struct TALER_PrivateContractHashP h_contract_terms GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Raw value (binary encoding) of the wire transfer subject.
|
||||
@ -1493,7 +1499,7 @@ struct TALER_RecoupRequestPS
|
||||
/**
|
||||
* Hash of the (revoked) denomination public key of the coin.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/**
|
||||
* Blinding factor that was used to withdraw the coin.
|
||||
@ -1600,7 +1606,7 @@ struct TALER_DenominationUnknownAffirmationPS
|
||||
/**
|
||||
* Hash of the public denomination key we do not know.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
};
|
||||
|
||||
|
||||
@ -1630,7 +1636,7 @@ struct TALER_DenominationExpiredAffirmationPS
|
||||
/**
|
||||
* Hash of the public denomination key we do not know.
|
||||
*/
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
};
|
||||
|
||||
@ -1670,7 +1676,7 @@ struct TALER_ReserveCloseConfirmationPS
|
||||
/**
|
||||
* Hash of the receiver's bank account.
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
|
||||
/**
|
||||
* Wire transfer subject.
|
||||
@ -1704,6 +1710,27 @@ struct TALER_MerchantPaySessionSigPS
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Used for attestation of a particular age
|
||||
*/
|
||||
struct TALER_AgeAttestationPS
|
||||
{
|
||||
/**
|
||||
* Purpose must be #TALER_SIGNATURE_WALLET_AGE_ATTESTATION.
|
||||
*/
|
||||
struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
|
||||
|
||||
/**
|
||||
* Age mask that defines the underlying age groups
|
||||
*/
|
||||
struct TALER_AgeMask mask;
|
||||
|
||||
/**
|
||||
* The particular age that this attestation is for
|
||||
*/
|
||||
uint8_t age;
|
||||
};
|
||||
|
||||
|
||||
GNUNET_NETWORK_STRUCT_END
|
||||
|
||||
|
@ -2483,8 +2483,9 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait *traits,
|
||||
#define TALER_TESTING_INDEXED_TRAITS(op) \
|
||||
op (denom_pub, const struct TALER_EXCHANGE_DenomPublicKey) \
|
||||
op (denom_sig, const struct TALER_DenominationSignature) \
|
||||
op (age_commitment, struct TALER_AgeCommitment) \
|
||||
op (h_age_commitment, struct TALER_AgeCommitmentHash) \
|
||||
op (age_commitment, const struct TALER_AgeCommitment) \
|
||||
op (age_commitment_proof, const struct TALER_AgeCommitmentProof) \
|
||||
op (h_age_commitment, const struct TALER_AgeCommitmentHash) \
|
||||
op (planchet_secrets, const struct TALER_PlanchetMasterSecretP) \
|
||||
op (exchange_wd_value, const struct TALER_ExchangeWithdrawValues) \
|
||||
op (coin_priv, const struct TALER_CoinSpendPrivateKeyP) \
|
||||
|
@ -125,7 +125,7 @@ TALER_b2s (const void *buf,
|
||||
* @param obj address of object to convert
|
||||
* @return string representing the binary obj buffer
|
||||
*/
|
||||
#define TALER_B2S(obj) TALER_b2s (obj, sizeof (*obj))
|
||||
#define TALER_B2S(obj) TALER_b2s ((obj), sizeof (*(obj)))
|
||||
|
||||
|
||||
/**
|
||||
|
@ -490,7 +490,7 @@ forget (const json_t *in,
|
||||
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_JSON_contract_hash (const json_t *json,
|
||||
struct TALER_PrivateContractHash *hc)
|
||||
struct TALER_PrivateContractHashP *hc)
|
||||
{
|
||||
enum GNUNET_GenericReturnValue ret;
|
||||
json_t *cjson;
|
||||
@ -1009,7 +1009,7 @@ TALER_JSON_get_error_code2 (const void *data,
|
||||
|
||||
void
|
||||
TALER_deposit_extension_hash (const json_t *extensions,
|
||||
struct TALER_ExtensionContractHash *ech)
|
||||
struct TALER_ExtensionContractHashP *ech)
|
||||
{
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
dump_and_hash (extensions,
|
||||
@ -1038,7 +1038,7 @@ TALER_JSON_canonicalize (const json_t *input)
|
||||
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_JSON_extensions_config_hash (const json_t *config,
|
||||
struct TALER_ExtensionConfigHash *ech)
|
||||
struct TALER_ExtensionConfigHashP *ech)
|
||||
{
|
||||
return dump_and_hash (config,
|
||||
"taler-extension-configuration",
|
||||
|
@ -253,7 +253,7 @@ parse_denom_pub (void *cls,
|
||||
GNUNET_JSON_spec_string ("cipher",
|
||||
&cipher),
|
||||
GNUNET_JSON_spec_uint32 ("age_mask",
|
||||
&denom_pub->age_mask.mask),
|
||||
&denom_pub->age_mask.bits),
|
||||
GNUNET_JSON_spec_end ()
|
||||
};
|
||||
const char *emsg;
|
||||
|
@ -64,7 +64,7 @@ TALER_JSON_pack_denom_pub (
|
||||
GNUNET_JSON_pack_string ("cipher",
|
||||
"RSA"),
|
||||
GNUNET_JSON_pack_uint64 ("age_mask",
|
||||
pk->age_mask.mask),
|
||||
pk->age_mask.bits),
|
||||
GNUNET_JSON_pack_rsa_public_key ("rsa_public_key",
|
||||
pk->details.rsa_public_key));
|
||||
break;
|
||||
@ -74,7 +74,7 @@ TALER_JSON_pack_denom_pub (
|
||||
GNUNET_JSON_pack_string ("cipher",
|
||||
"CS"),
|
||||
GNUNET_JSON_pack_uint64 ("age_mask",
|
||||
pk->age_mask.mask),
|
||||
pk->age_mask.bits),
|
||||
GNUNET_JSON_pack_data_varsize ("cs_public_key",
|
||||
&pk->details.cs_public_key,
|
||||
sizeof (pk->details.cs_public_key)));
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
enum GNUNET_GenericReturnValue
|
||||
TALER_JSON_merchant_wire_signature_hash (const json_t *wire_s,
|
||||
struct TALER_MerchantWireHash *hc)
|
||||
struct TALER_MerchantWireHashP *hc)
|
||||
{
|
||||
const char *payto_uri;
|
||||
struct TALER_WireSaltP salt;
|
||||
|
@ -91,8 +91,8 @@ path_cb (void *cls,
|
||||
static int
|
||||
test_contract (void)
|
||||
{
|
||||
struct TALER_PrivateContractHash h1;
|
||||
struct TALER_PrivateContractHash h2;
|
||||
struct TALER_PrivateContractHashP h1;
|
||||
struct TALER_PrivateContractHashP h2;
|
||||
json_t *c1;
|
||||
json_t *c2;
|
||||
json_t *c3;
|
||||
@ -384,7 +384,7 @@ test_json_canon (void)
|
||||
static int
|
||||
test_rfc8785 (void)
|
||||
{
|
||||
struct TALER_PrivateContractHash h1;
|
||||
struct TALER_PrivateContractHashP h1;
|
||||
json_t *c1;
|
||||
|
||||
c1 = json_pack ("{s:s}",
|
||||
|
@ -170,9 +170,9 @@ handle_deposit_confirmation_finished (void *cls,
|
||||
* @return #GNUNET_OK if signatures are OK, #GNUNET_SYSERR if not
|
||||
*/
|
||||
static enum GNUNET_GenericReturnValue
|
||||
verify_signatures (const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_ExtensionContractHash *h_extensions,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
verify_signatures (const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_ExtensionContractHashP *h_extensions,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
struct GNUNET_TIME_Timestamp exchange_timestamp,
|
||||
struct GNUNET_TIME_Timestamp wire_deadline,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
@ -236,9 +236,9 @@ verify_signatures (const struct TALER_MerchantWireHash *h_wire,
|
||||
struct TALER_AUDITOR_DepositConfirmationHandle *
|
||||
TALER_AUDITOR_deposit_confirmation (
|
||||
struct TALER_AUDITOR_Handle *auditor,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_ExtensionContractHash *h_extensions,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_ExtensionContractHashP *h_extensions,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
struct GNUNET_TIME_Timestamp exchange_timestamp,
|
||||
struct GNUNET_TIME_Timestamp wire_deadline,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
|
@ -142,7 +142,7 @@ struct TALER_EXCHANGE_AuditorAddDenominationHandle *
|
||||
TALER_EXCHANGE_add_auditor_denomination (
|
||||
struct GNUNET_CURL_Context *ctx,
|
||||
const char *url,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_AuditorPublicKeyP *auditor_pub,
|
||||
const struct TALER_AuditorSignatureP *auditor_sig,
|
||||
TALER_EXCHANGE_AuditorAddDenominationCallback cb,
|
||||
|
@ -124,8 +124,8 @@ TALER_EXCHANGE_parse_reserve_history (
|
||||
"WITHDRAW"))
|
||||
{
|
||||
struct TALER_ReserveSignatureP sig;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_BlindedCoinHash bch;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct TALER_BlindedCoinHashP bch;
|
||||
struct TALER_Amount withdraw_fee;
|
||||
struct GNUNET_JSON_Specification withdraw_spec[] = {
|
||||
GNUNET_JSON_spec_fixed_auto ("reserve_sig",
|
||||
@ -411,7 +411,7 @@ TALER_EXCHANGE_verify_coin_history (
|
||||
const char *currency,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
json_t *history,
|
||||
struct TALER_DenominationHash *h_denom_pub,
|
||||
struct TALER_DenominationHashP *h_denom_pub,
|
||||
struct TALER_Amount *total)
|
||||
{
|
||||
size_t len;
|
||||
@ -470,14 +470,14 @@ TALER_EXCHANGE_verify_coin_history (
|
||||
if (0 == strcasecmp (type,
|
||||
"DEPOSIT"))
|
||||
{
|
||||
struct TALER_MerchantWireHash h_wire;
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
// struct TALER_ExtensionContractHash h_extensions; // FIXME!
|
||||
struct TALER_MerchantWireHashP h_wire;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
// struct TALER_ExtensionContractHashP h_extensions; // FIXME!
|
||||
struct GNUNET_TIME_Timestamp wallet_timestamp;
|
||||
struct TALER_MerchantPublicKeyP merchant_pub;
|
||||
struct GNUNET_TIME_Timestamp refund_deadline = {0};
|
||||
struct TALER_CoinSpendSignatureP sig;
|
||||
struct TALER_AgeCommitmentHash *hac = NULL;
|
||||
struct TALER_AgeCommitmentHash hac = {0};
|
||||
struct GNUNET_JSON_Specification spec[] = {
|
||||
GNUNET_JSON_spec_fixed_auto ("coin_sig",
|
||||
&sig),
|
||||
@ -487,6 +487,9 @@ TALER_EXCHANGE_verify_coin_history (
|
||||
&h_wire),
|
||||
GNUNET_JSON_spec_fixed_auto ("h_denom_pub",
|
||||
h_denom_pub),
|
||||
GNUNET_JSON_spec_mark_optional (
|
||||
GNUNET_JSON_spec_fixed_auto ("h_age_commitment",
|
||||
&hac)),
|
||||
GNUNET_JSON_spec_timestamp ("timestamp",
|
||||
&wallet_timestamp),
|
||||
GNUNET_JSON_spec_mark_optional (
|
||||
@ -508,11 +511,12 @@ TALER_EXCHANGE_verify_coin_history (
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
if (GNUNET_OK !=
|
||||
TALER_wallet_deposit_verify (&amount,
|
||||
TALER_wallet_deposit_verify (
|
||||
&amount,
|
||||
&fee,
|
||||
&h_wire,
|
||||
&h_contract_terms,
|
||||
hac,
|
||||
TALER_AgeCommitmentHash_isNullOrZero (&hac) ? NULL : &hac,
|
||||
NULL /* h_extensions! */,
|
||||
h_denom_pub,
|
||||
wallet_timestamp,
|
||||
@ -585,31 +589,27 @@ TALER_EXCHANGE_verify_coin_history (
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
const struct TALER_AgeCommitmentHash *ahc = &h_age_commitment;
|
||||
|
||||
if (TALER_AgeCommitmentHash_isNullOrZero (ahc))
|
||||
ahc = NULL;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
TALER_wallet_melt_verify (&amount,
|
||||
TALER_wallet_melt_verify (
|
||||
&amount,
|
||||
&fee,
|
||||
&rc,
|
||||
h_denom_pub,
|
||||
ahc,
|
||||
TALER_AgeCommitmentHash_isNullOrZero (&h_age_commitment) ?
|
||||
NULL : &h_age_commitment,
|
||||
coin_pub,
|
||||
&sig))
|
||||
{
|
||||
GNUNET_break_op (0);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
}
|
||||
add = GNUNET_YES;
|
||||
}
|
||||
else if (0 == strcasecmp (type,
|
||||
"REFUND"))
|
||||
{
|
||||
struct TALER_PrivateContractHash h_contract_terms;
|
||||
struct TALER_PrivateContractHashP h_contract_terms;
|
||||
struct TALER_MerchantPublicKeyP merchant_pub;
|
||||
struct TALER_MerchantSignatureP sig;
|
||||
struct TALER_Amount refund_fee;
|
||||
|
@ -240,7 +240,7 @@ TALER_EXCHANGE_csr_withdraw (struct TALER_EXCHANGE_Handle *exchange,
|
||||
sizeof(struct TALER_CsNonce)),
|
||||
GNUNET_JSON_pack_data_varsize ("denom_pub_hash",
|
||||
&pk->h_key,
|
||||
sizeof(struct TALER_DenominationHash)));
|
||||
sizeof(struct TALER_DenominationHashP)));
|
||||
GNUNET_assert (NULL != req);
|
||||
ctx = TEAH_handle_to_context (exchange);
|
||||
eh = TALER_EXCHANGE_curl_easy_get_ (csrh->url);
|
||||
|
@ -83,18 +83,18 @@ struct TALER_EXCHANGE_DepositHandle
|
||||
/**
|
||||
* Hash over the contract for which this deposit is made.
|
||||
*/
|
||||
struct TALER_PrivateContractHash h_contract_terms GNUNET_PACKED;
|
||||
struct TALER_PrivateContractHashP h_contract_terms GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash over the wiring information of the merchant.
|
||||
*/
|
||||
struct TALER_MerchantWireHash h_wire GNUNET_PACKED;
|
||||
struct TALER_MerchantWireHashP h_wire GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Hash over the extension options of the deposit, 0 if there
|
||||
* were not extension options.
|
||||
*/
|
||||
struct TALER_ExtensionContractHash h_extensions GNUNET_PACKED;
|
||||
struct TALER_ExtensionContractHashP h_extensions GNUNET_PACKED;
|
||||
|
||||
/**
|
||||
* Time when this confirmation was generated / when the exchange received
|
||||
@ -242,7 +242,7 @@ verify_deposit_signature_conflict (
|
||||
json_t *history;
|
||||
struct TALER_Amount total;
|
||||
enum TALER_ErrorCode ec;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
memset (&h_denom_pub,
|
||||
0,
|
||||
@ -476,14 +476,14 @@ handle_deposit_finished (void *cls,
|
||||
static enum GNUNET_GenericReturnValue
|
||||
verify_signatures (const struct TALER_EXCHANGE_DenomPublicKey *dki,
|
||||
const struct TALER_Amount *amount,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_ExtensionContractHash *ech,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_ExtensionContractHashP *ech,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
const struct TALER_AgeCommitmentHash *h_age_commitment,
|
||||
const struct TALER_DenominationSignature *denom_sig,
|
||||
const struct TALER_DenominationPublicKey *denom_pub,
|
||||
const struct TALER_DenominationHash *denom_pub_hash,
|
||||
const struct TALER_DenominationHashP *denom_pub_hash,
|
||||
struct GNUNET_TIME_Timestamp timestamp,
|
||||
const struct TALER_MerchantPublicKeyP *merchant_pub,
|
||||
struct GNUNET_TIME_Timestamp refund_deadline,
|
||||
@ -554,7 +554,7 @@ TALER_EXCHANGE_deposit (
|
||||
struct GNUNET_TIME_Timestamp wire_deadline,
|
||||
const char *merchant_payto_uri,
|
||||
const struct TALER_WireSaltP *wire_salt,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_AgeCommitmentHash *h_age_commitment,
|
||||
const json_t *extension_details,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
@ -574,10 +574,10 @@ TALER_EXCHANGE_deposit (
|
||||
struct GNUNET_CURL_Context *ctx;
|
||||
json_t *deposit_obj;
|
||||
CURL *eh;
|
||||
struct TALER_MerchantWireHash h_wire;
|
||||
struct TALER_DenominationHash denom_pub_hash;
|
||||
struct TALER_MerchantWireHashP h_wire;
|
||||
struct TALER_DenominationHashP denom_pub_hash;
|
||||
struct TALER_Amount amount_without_fee;
|
||||
struct TALER_ExtensionContractHash ech;
|
||||
struct TALER_ExtensionContractHashP ech;
|
||||
char arg_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2 + 32];
|
||||
|
||||
if (NULL != extension_details)
|
||||
|
@ -262,8 +262,8 @@ struct TALER_EXCHANGE_DepositGetHandle *
|
||||
TALER_EXCHANGE_deposits_get (
|
||||
struct TALER_EXCHANGE_Handle *exchange,
|
||||
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
||||
const struct TALER_MerchantWireHash *h_wire,
|
||||
const struct TALER_PrivateContractHash *h_contract_terms,
|
||||
const struct TALER_MerchantWireHashP *h_wire,
|
||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||
TALER_EXCHANGE_DepositGetCallback cb,
|
||||
void *cb_cls)
|
||||
@ -274,9 +274,9 @@ TALER_EXCHANGE_deposits_get (
|
||||
struct GNUNET_CURL_Context *ctx;
|
||||
CURL *eh;
|
||||
char arg_str[(sizeof (struct TALER_CoinSpendPublicKeyP)
|
||||
+ sizeof (struct TALER_MerchantWireHash)
|
||||
+ sizeof (struct TALER_MerchantWireHashP)
|
||||
+ sizeof (struct TALER_MerchantPublicKeyP)
|
||||
+ sizeof (struct TALER_PrivateContractHash)
|
||||
+ sizeof (struct TALER_PrivateContractHashP)
|
||||
+ sizeof (struct TALER_MerchantSignatureP)) * 2 + 48];
|
||||
|
||||
if (GNUNET_YES !=
|
||||
@ -300,8 +300,8 @@ TALER_EXCHANGE_deposits_get (
|
||||
char cpub_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2];
|
||||
char mpub_str[sizeof (struct TALER_MerchantPublicKeyP) * 2];
|
||||
char msig_str[sizeof (struct TALER_MerchantSignatureP) * 2];
|
||||
char chash_str[sizeof (struct TALER_PrivateContractHash) * 2];
|
||||
char whash_str[sizeof (struct TALER_MerchantWireHash) * 2];
|
||||
char chash_str[sizeof (struct TALER_PrivateContractHashP) * 2];
|
||||
char whash_str[sizeof (struct TALER_MerchantWireHashP) * 2];
|
||||
char *end;
|
||||
|
||||
end = GNUNET_STRINGS_data_to_string (h_wire,
|
||||
|
@ -437,7 +437,7 @@ parse_json_auditor (struct TALER_EXCHANGE_AuditorInformation *auditor,
|
||||
off = 0;
|
||||
json_array_foreach (keys, i, key) {
|
||||
struct TALER_AuditorSignatureP auditor_sig;
|
||||
struct TALER_DenominationHash denom_h;
|
||||
struct TALER_DenominationHashP denom_h;
|
||||
const struct TALER_EXCHANGE_DenomPublicKey *dk;
|
||||
unsigned int dk_off;
|
||||
struct GNUNET_JSON_Specification kspec[] = {
|
||||
@ -1005,7 +1005,7 @@ decode_keys_json (const json_t *resp_obj,
|
||||
EXITIF (JSON_ARRAY != json_typeof (recoup_array));
|
||||
|
||||
json_array_foreach (recoup_array, index, recoup_info) {
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct GNUNET_JSON_Specification spec[] = {
|
||||
GNUNET_JSON_spec_fixed_auto ("h_denom_pub",
|
||||
&h_denom_pub),
|
||||
@ -2099,7 +2099,7 @@ TALER_EXCHANGE_destroy_denomination_key (
|
||||
const struct TALER_EXCHANGE_DenomPublicKey *
|
||||
TALER_EXCHANGE_get_denomination_key_by_hash (
|
||||
const struct TALER_EXCHANGE_Keys *keys,
|
||||
const struct TALER_DenominationHash *hc)
|
||||
const struct TALER_DenominationHashP *hc)
|
||||
{
|
||||
for (unsigned int i = 0; i<keys->num_denom_keys; i++)
|
||||
if (0 == GNUNET_memcmp (hc,
|
||||
|
@ -64,7 +64,7 @@ struct TALER_EXCHANGE_KycCheckHandle
|
||||
/**
|
||||
* Hash of the payto:// URL that is being KYC'ed.
|
||||
*/
|
||||
struct TALER_PaytoHash h_payto;
|
||||
struct TALER_PaytoHashP h_payto;
|
||||
};
|
||||
|
||||
|
||||
@ -216,7 +216,7 @@ handle_kyc_check_finished (void *cls,
|
||||
struct TALER_EXCHANGE_KycCheckHandle *
|
||||
TALER_EXCHANGE_kyc_check (struct TALER_EXCHANGE_Handle *exchange,
|
||||
uint64_t payment_target,
|
||||
const struct TALER_PaytoHash *h_payto,
|
||||
const struct TALER_PaytoHashP *h_payto,
|
||||
struct GNUNET_TIME_Relative timeout,
|
||||
TALER_EXCHANGE_KycStatusCallback cb,
|
||||
void *cb_cls)
|
||||
|
@ -67,9 +67,10 @@ struct TALER_EXCHANGE_LinkHandle
|
||||
struct TALER_CoinSpendPrivateKeyP coin_priv;
|
||||
|
||||
/**
|
||||
* Age commitment of the coin, might be NULL, required to re-generate age commitments
|
||||
* Age commitment and proof of the original coin, might be NULL.
|
||||
* Required to derive the new age commitment and proof.
|
||||
*/
|
||||
const struct TALER_AgeCommitment *age_commitment;
|
||||
const struct TALER_AgeCommitmentProof *age_commitment_proof;
|
||||
|
||||
};
|
||||
|
||||
@ -80,7 +81,6 @@ struct TALER_EXCHANGE_LinkHandle
|
||||
*
|
||||
* @param lh link handle
|
||||
* @param json json reply with the data for one coin
|
||||
* @param coin_num number of the coin
|
||||
* @param trans_pub our transfer public key
|
||||
* @param[out] lci where to return coin details
|
||||
* @return #GNUNET_OK on success, #GNUNET_SYSERR on error
|
||||
@ -88,7 +88,6 @@ struct TALER_EXCHANGE_LinkHandle
|
||||
static enum GNUNET_GenericReturnValue
|
||||
parse_link_coin (const struct TALER_EXCHANGE_LinkHandle *lh,
|
||||
const json_t *json,
|
||||
uint32_t coin_num,
|
||||
const struct TALER_TransferPublicKeyP *trans_pub,
|
||||
struct TALER_EXCHANGE_LinkedCoinInfo *lci)
|
||||
{
|
||||
@ -117,8 +116,7 @@ parse_link_coin (const struct TALER_EXCHANGE_LinkHandle *lh,
|
||||
};
|
||||
struct TALER_TransferSecretP secret;
|
||||
struct TALER_PlanchetDetail pd;
|
||||
struct TALER_CoinPubHash c_hash;
|
||||
struct TALER_AgeCommitmentHash *hac = NULL;
|
||||
struct TALER_CoinPubHashP c_hash;
|
||||
|
||||
/* parse reply */
|
||||
memset (&nonce,
|
||||
@ -136,7 +134,7 @@ parse_link_coin (const struct TALER_EXCHANGE_LinkHandle *lh,
|
||||
&lh->coin_priv,
|
||||
&secret);
|
||||
TALER_transfer_secret_to_planchet_secret (&secret,
|
||||
coin_num,
|
||||
coin_idx,
|
||||
&lci->ps);
|
||||
TALER_planchet_setup_coin_priv (&lci->ps,
|
||||
&alg_values,
|
||||
@ -145,28 +143,26 @@ parse_link_coin (const struct TALER_EXCHANGE_LinkHandle *lh,
|
||||
&alg_values,
|
||||
&bks);
|
||||
|
||||
/* Derive the age commitment and calculate the hash */
|
||||
if (NULL != lh->age_commitment)
|
||||
{
|
||||
struct TALER_AgeCommitment nac = {0};
|
||||
struct TALER_AgeCommitmentHash h = {0};
|
||||
uint32_t seed = secret.key.bits[0];
|
||||
lci->age_commitment_proof = NULL;
|
||||
lci->h_age_commitment = NULL;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
TALER_age_commitment_derive (
|
||||
lh->age_commitment,
|
||||
seed,
|
||||
&nac))
|
||||
/* Derive the age commitment and calculate the hash */
|
||||
if (NULL != lh->age_commitment_proof)
|
||||
{
|
||||
GNUNET_break_op (0);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
uint64_t seed = (uint64_t) secret.key.bits[0]
|
||||
| (uint64_t) secret.key.bits[1] << 32;
|
||||
lci->age_commitment_proof = GNUNET_new (struct TALER_AgeCommitmentProof);
|
||||
lci->h_age_commitment = GNUNET_new (struct TALER_AgeCommitmentHash);
|
||||
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
TALER_age_commitment_derive (
|
||||
lh->age_commitment_proof,
|
||||
seed,
|
||||
lci->age_commitment_proof));
|
||||
|
||||
TALER_age_commitment_hash (
|
||||
&nac,
|
||||
&h);
|
||||
|
||||
hac = &h;
|
||||
&(lci->age_commitment_proof->commitment),
|
||||
lci->h_age_commitment);
|
||||
}
|
||||
|
||||
if (GNUNET_OK !=
|
||||
@ -174,7 +170,7 @@ parse_link_coin (const struct TALER_EXCHANGE_LinkHandle *lh,
|
||||
&alg_values,
|
||||
&bks,
|
||||
&lci->coin_priv,
|
||||
hac,
|
||||
lci->h_age_commitment,
|
||||
&c_hash,
|
||||
&pd))
|
||||
{
|
||||
@ -207,7 +203,7 @@ parse_link_coin (const struct TALER_EXCHANGE_LinkHandle *lh,
|
||||
/* verify link_sig */
|
||||
{
|
||||
struct TALER_CoinSpendPublicKeyP old_coin_pub;
|
||||
struct TALER_BlindedCoinHash coin_envelope_hash;
|
||||
struct TALER_BlindedCoinHashP coin_envelope_hash;
|
||||
|
||||
GNUNET_CRYPTO_eddsa_key_get_public (&lh->coin_priv.eddsa_priv,
|
||||
&old_coin_pub.eddsa_pub);
|
||||
@ -351,7 +347,6 @@ parse_link_ok (struct TALER_EXCHANGE_LinkHandle *lh,
|
||||
parse_link_coin (lh,
|
||||
json_array_get (jsona,
|
||||
i),
|
||||
i,
|
||||
&trans_pub,
|
||||
lci))
|
||||
{
|
||||
@ -476,7 +471,8 @@ handle_link_finished (void *cls,
|
||||
struct TALER_EXCHANGE_LinkHandle *
|
||||
TALER_EXCHANGE_link (struct TALER_EXCHANGE_Handle *exchange,
|
||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||
const struct TALER_AgeCommitment *age_commitment,
|
||||
const struct
|
||||
TALER_AgeCommitmentProof *age_commitment_proof,
|
||||
TALER_EXCHANGE_LinkCallback link_cb,
|
||||
void *link_cb_cls)
|
||||
{
|
||||
@ -515,7 +511,7 @@ TALER_EXCHANGE_link (struct TALER_EXCHANGE_Handle *exchange,
|
||||
lh->link_cb = link_cb;
|
||||
lh->link_cb_cls = link_cb_cls;
|
||||
lh->coin_priv = *coin_priv;
|
||||
lh->age_commitment = age_commitment;
|
||||
lh->age_commitment_proof = age_commitment_proof;
|
||||
lh->url = TEAH_path_to_url (exchange,
|
||||
arg_str);
|
||||
if (NULL == lh->url)
|
||||
|
@ -215,7 +215,7 @@ handle_ok (struct TALER_EXCHANGE_ManagementGetKeysHandle *gh,
|
||||
}
|
||||
|
||||
{
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct GNUNET_TIME_Relative duration
|
||||
= GNUNET_TIME_absolute_get_difference (
|
||||
denom_key->valid_from.abs_time,
|
||||
|
@ -126,7 +126,7 @@ struct TALER_EXCHANGE_ManagementRevokeDenominationKeyHandle *
|
||||
TALER_EXCHANGE_management_revoke_denomination_key (
|
||||
struct GNUNET_CURL_Context *ctx,
|
||||
const char *url,
|
||||
const struct TALER_DenominationHash *h_denom_pub,
|
||||
const struct TALER_DenominationHashP *h_denom_pub,
|
||||
const struct TALER_MasterSignatureP *master_sig,
|
||||
TALER_EXCHANGE_ManagementRevokeDenominationKeyCallback cb,
|
||||
void *cb_cls)
|
||||
|
@ -199,7 +199,7 @@ verify_melt_signature_denom_conflict (struct TALER_EXCHANGE_MeltHandle *mh,
|
||||
{
|
||||
json_t *history;
|
||||
struct TALER_Amount total;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
memset (&h_denom_pub,
|
||||
0,
|
||||
@ -246,7 +246,7 @@ verify_melt_signature_spend_conflict (struct TALER_EXCHANGE_MeltHandle *mh,
|
||||
};
|
||||
const struct MeltedCoin *mc;
|
||||
enum TALER_ErrorCode ec;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
|
||||
/* parse JSON reply */
|
||||
if (GNUNET_OK !=
|
||||
@ -458,7 +458,7 @@ start_melt (struct TALER_EXCHANGE_MeltHandle *mh)
|
||||
struct GNUNET_CURL_Context *ctx;
|
||||
struct TALER_CoinSpendSignatureP confirm_sig;
|
||||
char arg_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2 + 32];
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
struct TALER_ExchangeWithdrawValues alg_values[mh->rd->fresh_pks_len];
|
||||
|
||||
for (unsigned int i = 0; i<mh->rd->fresh_pks_len; i++)
|
||||
@ -478,6 +478,7 @@ start_melt (struct TALER_EXCHANGE_MeltHandle *mh)
|
||||
&mh->md.melted_coin.fee_melt,
|
||||
&mh->md.rc,
|
||||
&h_denom_pub,
|
||||
mh->md.melted_coin.h_age_commitment,
|
||||
&mh->md.melted_coin.coin_priv,
|
||||
&confirm_sig);
|
||||
GNUNET_CRYPTO_eddsa_key_get_public (&mh->md.melted_coin.coin_priv.eddsa_priv,
|
||||
@ -493,6 +494,12 @@ start_melt (struct TALER_EXCHANGE_MeltHandle *mh)
|
||||
&mh->md.melted_coin.melt_amount_with_fee),
|
||||
GNUNET_JSON_pack_data_auto ("rc",
|
||||
&mh->md.rc),
|
||||
GNUNET_JSON_pack_allow_null (
|
||||
mh->md.melted_coin.h_age_commitment
|
||||
? GNUNET_JSON_pack_data_auto ("age_commitment_hash",
|
||||
mh->md.melted_coin.h_age_commitment)
|
||||
: GNUNET_JSON_pack_string ("age_commitment_hash",
|
||||
NULL)),
|
||||
GNUNET_JSON_pack_allow_null (
|
||||
mh->send_rms
|
||||
? GNUNET_JSON_pack_data_auto ("rms",
|
||||
|
@ -169,7 +169,7 @@ handle_recoup_finished (void *cls,
|
||||
/* Insufficient funds, proof attached */
|
||||
json_t *history;
|
||||
struct TALER_Amount total;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
const struct TALER_EXCHANGE_DenomPublicKey *dki;
|
||||
enum TALER_ErrorCode ec;
|
||||
|
||||
@ -293,7 +293,7 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,
|
||||
struct GNUNET_CURL_Context *ctx;
|
||||
struct TALER_CoinSpendSignatureP coin_sig;
|
||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
json_t *recoup_obj;
|
||||
CURL *eh;
|
||||
char arg_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2 + 32];
|
||||
|
@ -183,7 +183,7 @@ handle_recoup_refresh_finished (void *cls,
|
||||
/* Insufficient funds, proof attached */
|
||||
json_t *history;
|
||||
struct TALER_Amount total;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
const struct TALER_EXCHANGE_DenomPublicKey *dki;
|
||||
enum TALER_ErrorCode ec;
|
||||
|
||||
@ -297,7 +297,7 @@ TALER_EXCHANGE_recoup_refresh (
|
||||
struct GNUNET_CURL_Context *ctx;
|
||||
struct TALER_CoinSpendSignatureP coin_sig;
|
||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||
struct TALER_DenominationHash h_denom_pub;
|
||||
struct TALER_DenominationHashP h_denom_pub;
|
||||
json_t *recoup_obj;
|
||||
CURL *eh;
|
||||
char arg_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2 + 32];
|
||||
|
@ -78,7 +78,8 @@ TALER_EXCHANGE_get_melt_data_ (
|
||||
md->melted_coin.fee_melt = rd->melt_pk.fees.refresh;
|
||||
md->melted_coin.original_value = rd->melt_pk.value;
|
||||
md->melted_coin.expire_deposit = rd->melt_pk.expire_deposit;
|
||||
md->melted_coin.age_commitment = rd->age_commitment;
|
||||
md->melted_coin.age_commitment_proof = rd->melt_age_commitment_proof;
|
||||
md->melted_coin.h_age_commitment = rd->melt_h_age_commitment;
|
||||
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
TALER_amount_set_zero (rd->melt_amount.currency,
|
||||
@ -166,7 +167,7 @@ TALER_EXCHANGE_get_melt_data_ (
|
||||
struct TALER_RefreshCoinData *rcd = &md->rcd[i][j];
|
||||
union TALER_DenominationBlindingKeyP *bks = &fcd->bks[i];
|
||||
struct TALER_PlanchetDetail pd;
|
||||
struct TALER_CoinPubHash c_hash;
|
||||
struct TALER_CoinPubHashP c_hash;
|
||||
struct TALER_AgeCommitmentHash *ach = NULL;
|
||||
|
||||
TALER_transfer_secret_to_planchet_secret (&trans_sec,
|
||||
@ -182,31 +183,26 @@ TALER_EXCHANGE_get_melt_data_ (
|
||||
bks);
|
||||
|
||||
/* Handle age commitment, if present */
|
||||
if (NULL != md->melted_coin.age_commitment)
|
||||
if (NULL != md->melted_coin.age_commitment_proof)
|
||||
{
|
||||
struct TALER_AgeCommitment new_ac;
|
||||
struct TALER_AgeCommitmentHash hac;
|
||||
|
||||
/* We use the first 4 bytes of the trans_sec to generate a new age
|
||||
/* We use the first 8 bytes of the trans_sec to generate a new age
|
||||
* commitment */
|
||||
uint32_t age_seed = trans_sec.key.bits[0];
|
||||
uint64_t age_seed = (uint64_t) trans_sec.key.bits[0]
|
||||
| (uint64_t) trans_sec.key.bits[1] << 32;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
fcd->age_commitment_proof[i] = GNUNET_new (struct
|
||||
TALER_AgeCommitmentProof);
|
||||
ach = GNUNET_new (struct TALER_AgeCommitmentHash);
|
||||
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
TALER_age_commitment_derive (
|
||||
md->melted_coin.age_commitment,
|
||||
age_seed + j,
|
||||
&new_ac))
|
||||
{
|
||||
GNUNET_break_op (0);
|
||||
TALER_EXCHANGE_free_melt_data_ (md);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
md->melted_coin.age_commitment_proof,
|
||||
age_seed,
|
||||
fcd->age_commitment_proof[i]));
|
||||
|
||||
TALER_age_commitment_hash (
|
||||
&new_ac,
|
||||
&hac);
|
||||
|
||||
ach = &hac;
|
||||
&fcd->age_commitment_proof[i]->commitment,
|
||||
ach);
|
||||
}
|
||||
|
||||
if (TALER_DENOMINATION_CS == alg_values[j].cipher)
|
||||
@ -225,7 +221,6 @@ TALER_EXCHANGE_get_melt_data_ (
|
||||
TALER_EXCHANGE_free_melt_data_ (md);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
|
||||
rcd->blinded_planchet = pd.blinded_planchet;
|
||||
rcd->dk = &fcd->fresh_pk;
|
||||
}
|
||||
|
@ -53,11 +53,11 @@ struct MeltedCoin
|
||||
struct TALER_Amount original_value;
|
||||
|
||||
/**
|
||||
* The original age commitment and its hash. MUST be NULL if no age
|
||||
* commitment was set.
|
||||
* The original age commitment, its proof and its hash. MUST be NULL if no
|
||||
* age commitment was set.
|
||||
*/
|
||||
struct TALER_AgeCommitment *age_commitment;
|
||||
struct TALER_AgeCommitmentHash *h_age_commitment;
|
||||
const struct TALER_AgeCommitmentProof *age_commitment_proof;
|
||||
const struct TALER_AgeCommitmentHash *h_age_commitment;
|
||||
|
||||
/**
|
||||
* Timestamp indicating when coins of this denomination become invalid.
|
||||
@ -100,11 +100,11 @@ struct FreshCoinData
|
||||
struct TALER_CoinSpendPrivateKeyP coin_priv;
|
||||
|
||||
/**
|
||||
* Arrays age commitments to be created, one for each cut-and-choose
|
||||
* dimension. The entries in each list might be NULL and indicate no age
|
||||
* commitment/restriction on the particular coin.
|
||||
* Arrays of age commitments and proofs to be created, one for each
|
||||
* cut-and-choose dimension. The entries in each list might be NULL and
|
||||
* indicate no age commitment/restriction on the particular coin.
|
||||
*/
|
||||
struct TALER_AgeCommitment *age_commitment[TALER_CNC_KAPPA];
|
||||
struct TALER_AgeCommitmentProof *age_commitment_proof[TALER_CNC_KAPPA];
|
||||
|
||||
/**
|
||||
* Blinding key secrets for the coins, depending on the
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user