[wip] age restriction section done
This commit is contained in:
parent
aecc4dbeec
commit
906a22de47
91
m4/definitions.tex
Normal file
91
m4/definitions.tex
Normal file
@ -0,0 +1,91 @@
|
||||
\newcommand{\orange}[1]{{\color{orange}#1}}
|
||||
\newcommand{\blue}[1]{{\color{blue}#1}}
|
||||
\newcommand{\red}[1]{{\color{red}#1}}
|
||||
\newcommand{\Guardian}{\mathcal{G}}
|
||||
\newcommand{\Child}{\mathcal{C}}
|
||||
\newcommand{\Customer}{\mathcal{C}}
|
||||
\newcommand{\Merchant}{\mathcal{M}}
|
||||
\newcommand{\Exchange}{\mathcal{E}}
|
||||
|
||||
\newcommand{\Commit}{\mathsf{Commit}}
|
||||
\newcommand{\Attest}{\mathsf{Attest}}
|
||||
\newcommand{\Verify}{\mathsf{Verify}}
|
||||
\newcommand{\Derive}{\mathsf{Derive}}
|
||||
\newcommand{\DeriveCompare}{\mathsf{DeriveCompare_\kappa}}
|
||||
\newcommand{\Compare}{\mathsf{Compare}}
|
||||
\newcommand{\AgeVer}{\mathsf{AgeVer}}
|
||||
|
||||
\newcommand{\HashF}{\mathsf{H}}
|
||||
\newcommand{\Hash}{\mathsf{H}}
|
||||
\newcommand{\Block}{\mathbb{B}}
|
||||
\newcommand{\Pub}{\mathsf{Pub}}
|
||||
\newcommand{\Sign}{\mathsf{Sig}}
|
||||
\newcommand{\Ver}{\mathsf{Ver}}
|
||||
\newcommand{\Encoding}{\mathsf{Encoding}}
|
||||
\newcommand{\ECDSA}{\mathsf{ECDSA}}
|
||||
\newcommand{\Null}{\mathcal{O}}
|
||||
\newcommand{\EC}{\mathrm{ec}}
|
||||
\newcommand{\Curve}{\mathsf{Curve25519}}
|
||||
\newcommand{\SHA}{\mathsf{SHA256}}
|
||||
\newcommand{\SHAF}{\mathsf{SHA252}}
|
||||
\newcommand{\FDH}{\mathsf{FDH}}
|
||||
|
||||
\newcommand{\negl}{\epsilon}
|
||||
|
||||
\newcommand{\rand}{\mathsf{rand}}
|
||||
\newcommand{\age}{\mathsf{a}}
|
||||
\newcommand{\Age}{\mathsf{M}}
|
||||
\newcommand{\bage}{\mathsf{b}}
|
||||
\newcommand{\minage}{\mathsf{m}}
|
||||
\newcommand{\attest}{\mathsf{T}}
|
||||
\newcommand{\commitment}{\mathsf{Q}}
|
||||
\newcommand{\pruf}{\mathsf{P}}
|
||||
\newcommand{\Vcommitment}{\vec{\mathsf{Q}}}
|
||||
\newcommand{\Vpruf}{\vec{\mathsf{P}}}
|
||||
\newcommand{\blinding}{\beta}
|
||||
|
||||
\newcommand{\ZN}{\mathbb{Z}_N}
|
||||
\newcommand{\Z}{\mathbb{Z}}
|
||||
\newcommand{\N}{\mathbb{N}}
|
||||
\newcommand{\A}{\mathbb{A}}
|
||||
\newcommand{\E}{\mathbb{E}}
|
||||
\newcommand{\F}{\mathbb{F}}
|
||||
\newcommand{\seck}{\mathsf{s}}
|
||||
\newcommand{\pubk}{\mathsf{P}}
|
||||
\renewcommand{\H}{\mathbb{H}}
|
||||
\newcommand{\K}{\mathbb{K}}
|
||||
\newcommand{\Proofs}{\mathbb{P}}
|
||||
\newcommand{\Commitments}{\mathbb{O}}
|
||||
\newcommand{\Attests}{\mathbb{T}}
|
||||
\newcommand{\Blindings}{\mathbb{B}}
|
||||
\newcommand{\Nil}{\perp}
|
||||
|
||||
\newcommand{\p}{\mathsf{p}}
|
||||
\newcommand{\com}{\mathsf{com}}
|
||||
\newcommand{\prf}{\mathsf{prf}}
|
||||
|
||||
\newcommand{\Adv}{\mathcal{A}}
|
||||
\newcommand{\PPT}{\mathfrak{A}}
|
||||
\newcommand{\Probability}{\mathrm{Pr}}
|
||||
\newcommand{\Algorithm}{f}
|
||||
\renewcommand{\Game}[1]{G_\Adv^\mathsf{#1}}
|
||||
|
||||
\DeclareMathOperator{\Image}{Im}
|
||||
\DeclareMathOperator{\Mod}{mod}
|
||||
|
||||
\newcommand{\Encode}[1]{\overbracket[0.5pt][2pt]{\,#1\,}}
|
||||
\newcommand{\Decode}[1]{\underbracket[0.5pt][3pt]{\,#1\,}}
|
||||
\newcommand{\FDHg}[1]{[#1]_g\,}
|
||||
\newcommand{\logg}{{\breve{g}}}
|
||||
|
||||
|
||||
\newcommand{\drawfrom}{\xleftarrow{\$}}
|
||||
\newcommand\Exists{%
|
||||
\mathop{\lower0.75ex\hbox{\ensuremath{%
|
||||
\mathlarger{\mathlarger{\mathlarger{\mathlarger{\exists}}}}}}}%
|
||||
\limits}
|
||||
|
||||
\newcommand\Forall{%
|
||||
\mathop{\lower0.75ex\hbox{\ensuremath{%
|
||||
\mathlarger{\mathlarger{\mathlarger{\mathlarger{\forall}}}}}}}%
|
||||
\limits}
|
@ -16,6 +16,11 @@
|
||||
\usepackage{graphicx}
|
||||
\usepackage{listings}
|
||||
\usepackage{fontspec}
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{tikzmark}
|
||||
\usetikzlibrary{shapes,arrows,arrows.meta}
|
||||
\usetikzlibrary{positioning,patterns}
|
||||
\usetikzlibrary{calc}
|
||||
\setmonofont[Path = ../fonts/,
|
||||
Extension = .ttf,
|
||||
UprightFont = *-Regular,
|
||||
@ -55,6 +60,7 @@
|
||||
emphstyle=\bfseries
|
||||
}
|
||||
\newcommand{\TODO}[1]{{\color{orange}#1}\marginpar{{\color{orange}TODO}}}
|
||||
\include{definitions}
|
||||
|
||||
\begin{document}
|
||||
|
||||
@ -75,7 +81,7 @@ Emmanuel Benoist\\[\bigskipamount]
|
||||
|
||||
\section*{Management summary}
|
||||
\begin{abstract}
|
||||
|
||||
\noindent
|
||||
For the \textsc{NGI Pointer} programme, the AP³ project team extended GNU Taler with
|
||||
\begin{itemize}
|
||||
\item age-restricted payments,
|
||||
@ -85,8 +91,8 @@ For the \textsc{NGI Pointer} programme, the AP³ project team extended GNU Taler
|
||||
\end{itemize}
|
||||
|
||||
This document provides the report for the final milestone IV with details on
|
||||
the state of the implementation, the results of user experience studies
|
||||
and projected future work.
|
||||
the results of our usability study, the state of the implementation of
|
||||
the features and projected future work.
|
||||
|
||||
\end{abstract}
|
||||
|
||||
@ -102,13 +108,297 @@ This document provides the report for the final milestone IV with details on
|
||||
|
||||
\section{Age Restriction}
|
||||
|
||||
\TODO{}
|
||||
We designed and implemented a scheme for age restriction in GNU Taler based on
|
||||
the following basic ideas:
|
||||
|
||||
Parents/warden can choose to \textbf{commit} a certain maximum age out of a
|
||||
predefined list of age groups and bind that commitment to a particular coin.
|
||||
The minors receive those coins and can now \textbf{attest} a required minimum
|
||||
age (provided that age is less or equal to the committed age of the coins) to
|
||||
merchants, who can \textbf{verify} the minimum age. For the rest values
|
||||
(change) after an transaction, the minor/ward can \textbf{derive} new
|
||||
age-restricted coins. The exchange can \textbf{compare} the equality of the
|
||||
age-restriction of the old coin with the new coin (in a zero-knowledge
|
||||
protocol $\DeriveCompare$, that gives the minor a 1/$\kappa$ chance to raise
|
||||
the minimum age for the new coin).
|
||||
|
||||
The following figure gives an overview of the scheme for age restriction
|
||||
detached from the payment flow:
|
||||
|
||||
\begin{figure}[h]
|
||||
\begin{center}\footnotesize
|
||||
\begin{tikzpicture}[scale=.8]
|
||||
\node[circle,minimum size=25pt,fill=black!15] at ( 0:0) (Client) {$\Child$};
|
||||
\node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$};
|
||||
\node[circle,minimum size=25pt,fill=black!15] at ( 0:5) (Merchant) {$\Merchant$};
|
||||
\node[circle,minimum size=25pt,fill=blue!15] at (130:3) (Guardian) {$\Guardian$};
|
||||
|
||||
\draw[orange,<->] (Client) to node[sloped,below,align=center]
|
||||
{\orange{$\DeriveCompare$}} (Exchange);
|
||||
\draw[blue,->] (Client) to node[sloped, below]
|
||||
{\blue{$(\attest_\minage, \commitment)$}} (Merchant);
|
||||
|
||||
\draw[->] (Guardian) to [out=150,in=70, loop] node[above]
|
||||
{$\Commit(\age)$} (Guardian);
|
||||
\draw[->] (Guardian) to node[below,sloped]
|
||||
{($\commitment$, $\pruf_\age$)} (Client);
|
||||
\draw[->,blue] (Client) to [out=-50,in=-130, loop] node[below]
|
||||
{\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client);
|
||||
\draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below]
|
||||
{\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant);
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\caption{Scheme of the age restriction performed between a guardian
|
||||
$\Guardian$, a child $\Child$, a merchant $\Merchant$ and an exchange
|
||||
$\Exchange$, using the functions $\Commit$, $\Attest$, $\Verify$ and
|
||||
the zero-knowledge protocol $\DeriveCompare$ which is based on
|
||||
functions $\Derive$ and $\Compare$. $\commitment$ is the age
|
||||
commitment for a maximum age $\age \in \{1,...,\Age\}$ and
|
||||
$\pruf_{\age}$ is the corresponding proof. $\attest_{\minage}$ is an
|
||||
attestation of a required age $\minage \leq \age$.}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Technical details}
|
||||
\TODO{}
|
||||
|
||||
Our implementation of the five functions $\Commit$, $\Attest$, $\Verify$,
|
||||
$\Derive$ and $\Compare$ is based on the following main building blocks:
|
||||
|
||||
\begin{itemize}
|
||||
\item The exchange $\Exchange$ defines and publishes M+1 different
|
||||
\textit{age groups} of increasing order: $0 < a_1 < \ldots <
|
||||
a_M$ with $a_i \in \mathbb{N}$. The zeroth age group is
|
||||
$\{0,\ldots,a_1-1\}$.
|
||||
|
||||
\item An \textit{unrestricted} age commitment is defined as a vector of
|
||||
length $\Age$ of pairs of
|
||||
\href{https://docs.taler.net/design-documents/024-age-restriction.html#edx25519}{Edx25519}
|
||||
public and private keys on Curve25519. In other words: one key
|
||||
pair for each age group after the zeroth: $\bigl\langle (p_1,
|
||||
q_1), \ldots, (p_M, q_M) \bigr\rangle$. (Here, $p_i$ are
|
||||
\textit{private} and $q_i$ are public keys).
|
||||
|
||||
\item A \textit{restricted} age commitment to age group m (or m-th age
|
||||
group) is derived from an unrestricted age commitment by
|
||||
removing all private keys for indices larger than m:
|
||||
\[
|
||||
\bigl\langle (p_1, q_1), \ldots, (p_m, q_m),
|
||||
\, (\perp, q_{m+1}),
|
||||
\ldots, (\perp, q_M)\bigr\rangle
|
||||
\] F.e. if none of the private keys is provided, the age
|
||||
commitment would be restricted to the zeroth age group. Note
|
||||
that the action of dropping private keys is performed by the
|
||||
guardian $\Guardian$.
|
||||
|
||||
\item An \textit{age commitment} (without prefix) is just the vector of
|
||||
public keys: $\commitment := \langle q_1, \ldots, q_M \rangle$.
|
||||
Note that from just the age commitment one can not deduce if it
|
||||
was originated from an unrestricted or restricted age
|
||||
commitment (and what age).
|
||||
|
||||
\item A child $\Child$ receives the commitment $\commitment$ along with
|
||||
the proof, the restricted vector\\
|
||||
$\pruf_\age := (p_1,\ldots,p_\age,\perp,\ldots,\perp)$.
|
||||
The child can now create an \textit{attestation}
|
||||
$\attest_\minage$ for age group $\minage \leq \age$, which is
|
||||
simply a signature to some message with the private key
|
||||
$p_\minage$.
|
||||
|
||||
\item An age commitment $\commitment$ is bound to a particular coin
|
||||
$C_p$ by incorporating the SHA256 hash value of $\commitment$
|
||||
into the signature of the coin. So, instead of signing the
|
||||
full-domain-hash $\text{FDH}(C_p)$ with the RSA private key of
|
||||
a denomination, the exchange signs $\text{FDH}(C_p,
|
||||
\orange{H(\commitment)})$.
|
||||
\end{itemize}
|
||||
|
||||
The schemes for age restriction and the scheme for payment in GNU Taler
|
||||
(protocols \textsf{withdraw}, \textsf{purchase}, \textsf{deposit} and
|
||||
\textsf{refresh}) are integrated as sketched in the following figure:
|
||||
\begin{figure}[h]
|
||||
\begin{center}\footnotesize
|
||||
\begin{tikzpicture}[scale=.8]
|
||||
\node[circle,minimum size=25pt,fill=black!15] at ( 0:0) (Client) {$\Child$};
|
||||
\node[circle,minimum size=25pt,fill=black!15] at ( 60:5) (Exchange) {$\Exchange$};
|
||||
\node[circle,minimum size=25pt,fill=black!15] at ( 0:5) (Merchant) {$\Merchant$};
|
||||
\node[circle,minimum size=25pt,fill=blue!15] at (130:3) (Guardian) {$\Guardian$};
|
||||
|
||||
\draw[<->] (Guardian) to node[sloped,above,align=center]
|
||||
{\textsf{withdraw}\orange{, using}\\ $\FDH(C_p\orange{, H(\commitment)})$} (Exchange);
|
||||
\draw[<->] (Client) to node[sloped,below,align=center]
|
||||
{\textsf{refresh} \orange{ + }\\ \orange{$\DeriveCompare$}} (Exchange);
|
||||
\draw[<->] (Client) to node[sloped, below]
|
||||
{\textsf{purchase} \blue{+ $(\attest_\minage, \commitment)$}} (Merchant);
|
||||
\draw[<->] (Merchant) to node[sloped, above]
|
||||
{\textsf{deposit} \orange{+ $H(\commitment)$}} (Exchange);
|
||||
|
||||
\draw[->] (Guardian) to [out=70,in=150, loop] node[above]
|
||||
{$\Commit(\age)$} (Guardian);
|
||||
\draw[->] (Guardian) to node[below,sloped]
|
||||
{($\commitment$, $\pruf_\age$)} (Client);
|
||||
\draw[->,blue] (Client) to [out=-50,in=-130, loop] node[below]
|
||||
{\blue{$\Attest(\minage, \commitment, \pruf_{\age})$}} (Client);
|
||||
\draw[->,blue] (Merchant) to [out=-50,in=-130, loop] node[below]
|
||||
{\blue{$\Verify(\minage, \commitment, \attest_{\minage})$}} (Merchant);
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\caption{Sketch of the integration of the schemes for age restriction
|
||||
and payment in GNU Taler.}
|
||||
\end{figure}
|
||||
|
||||
\filbreak
|
||||
The cut-and-choose protocol $\DeriveCompare$ is defined roughly as follows:
|
||||
\begin{center}
|
||||
\parbox{0.75\textwidth}{
|
||||
\begin{enumerate}
|
||||
\item $\Child$ derives commitments $(\commitment_1,\dots,\commitment_\kappa)$
|
||||
from $\commitment_0$ \\
|
||||
by calling $\Derive()$ with blindings $(\beta_1,\dots,\beta_\kappa)$
|
||||
\item $\Child$ calculates $h_0:=H\left(H(\commitment_1, \beta_1)||\dots||H(\commitment_\kappa, \beta_\kappa)\right)$
|
||||
\item $\Child$ sends $\commitment_0$ and $h_0$ to $\Exchange$
|
||||
\item $\Exchange$ chooses $\gamma \in \{1,\dots,\kappa\}$ randomly
|
||||
\item $\Child$ reveals $h_\gamma:=H(\commitment_\gamma, \beta_\gamma)$ and all $(\commitment_i, \beta_i)$, except $(\commitment_\gamma, \beta_\gamma)$
|
||||
\item $\Exchange$ compares $h_0$ and
|
||||
$H\left(H(\commitment_1, \beta_1)||...||h_\gamma||...||H(\commitment_\kappa, \beta_\kappa)\right)$\\
|
||||
and evaluates $\Compare(\commitment_0, \commitment_i, \beta_i)$.
|
||||
\end{enumerate}}
|
||||
\end{center}
|
||||
|
||||
|
||||
The proposed solution maintains the guarantees of GNU Taler with respect to
|
||||
anonymity and unlinkability. Precise formulations of the functions, protocols,
|
||||
requirements and security guarantees---together with proofs---can be found in
|
||||
our paper
|
||||
\href{https://taler.net/papers/esorics2022-age-restriction.pdf}
|
||||
{\textit{Zero-Knowledge Age Restriction for GNU Taler}},
|
||||
published in the
|
||||
\href{https://link.springer.com/chapter/10.1007/978-3-031-17140-6\_6}
|
||||
{proceedings to ESORICS 2022}.
|
||||
|
||||
|
||||
|
||||
\subsection{Future Works}
|
||||
\TODO{}
|
||||
|
||||
\begin{description}
|
||||
\item[Complete support for all GNU Taler protocols:] So far, age restriction is
|
||||
only implemented for the GNU Taler protocols \textsf{withdraw},
|
||||
\textsf{purchase}, \textsf{deposit} and \textsf{refresh}. We
|
||||
will extend the support for age restriction in GNU Taler to
|
||||
include the protocols for P2P payments, tipping and refund.
|
||||
|
||||
\item[Support for minors with bank accounts:] The current design
|
||||
of age restriction is based on the assumption that only
|
||||
adults can have bank accounts. That is: wire transfers to the
|
||||
exchange are assumed to be originated by adults.
|
||||
|
||||
However, in some countries, like Germany, it is possible for
|
||||
minors to have bank accounts, too, starting from a certain age.
|
||||
In those cases, the wire transfer record will indicate that the
|
||||
originating account is owned by a minor.
|
||||
|
||||
We plan to extend the current design and implementation of age
|
||||
restriction to handle those situations as well: After the
|
||||
exchange receives a wire transfer from a bank account of a
|
||||
minor, it will require in a zero-knowledge-proof for a) the
|
||||
presence of age restriction and b) the appropriate
|
||||
\textit{maximum} age for the age commitment during the
|
||||
\textsf{withdraw} protocol.
|
||||
|
||||
\item[Legal certification of our age restriction scheme:] We are in
|
||||
correspondence with the
|
||||
\href{https://www.kjm-online.de/en/}{German Commission for the
|
||||
Protections of Minors in the Media (KJM)} which evaluates and
|
||||
recommends concepts for protection of minors. GNU Taler has
|
||||
been recognized as a potential candidate in the so-called
|
||||
``cross-channel concepts for the protection of minors''.
|
||||
|
||||
We will prepare a white paper about GNU Taler's age restriction
|
||||
as input for the commission's next meeting on December 7, 2022,
|
||||
in Berlin. Our goal is to convince the commission of GNU
|
||||
Taler's age restriction scheme as a legally acceptable form of
|
||||
age verification and add it to its list of
|
||||
\href{https://www.kjm-online.de/aufsicht/technischer-jugendmedienschutz/uebergreifende-konzepte}%
|
||||
{positively evaluated concepts}.
|
||||
|
||||
|
||||
\end{description}
|
||||
|
||||
\subsection{Links}
|
||||
\TODO{}
|
||||
|
||||
Our scheme for age restriction in GNU Taler has been
|
||||
\href{https://link.springer.com/chapter/10.1007/978-3-031-17140-6\_6}{published
|
||||
in the proceedings to ESORICS 2022}.
|
||||
In addition,
|
||||
\href{https://docs.taler.net/design-documents/024-age-restriction.html}%
|
||||
{document 24} at \url{https://docs.taler.net/design-documents} also lays out
|
||||
the design. The implementation is distributed across multiple repositories:
|
||||
|
||||
{ \small
|
||||
\begin{description}
|
||||
\item[Exchange:] The following REST endpoint handlers and their
|
||||
accompanying helper functions in
|
||||
\url{https://git.taler.net/exchange.git/tree/src}:
|
||||
\begin{itemize}
|
||||
\item \href{https://git.taler.net/exchange.git/tree/src/exchange/taler-exchange-httpd_deposit.c}{\texttt{TEH\_handler\_deposit}}
|
||||
\item \href{https://git.taler.net/exchange.git/tree/src/exchange/taler-exchange-httpd_melt.c}{\texttt{TEH\_handler\_melt}}
|
||||
\item \href{https://git.taler.net/exchange.git/tree/src/exchange/taler-exchange-httpd_refreshes_reveal.c}{\texttt{TEH\_handler\_reveal}}
|
||||
\item \href{https://git.taler.net/exchange.git/tree/src/exchange/taler-exchange-httpd_recoup.c}{\texttt{TEH\_handler\_recoup}}
|
||||
\item \href{https://git.taler.net/exchange.git/tree/src/exchange/taler-exchange-httpd_recoup-refresh.c}{\texttt{TEH\_handler\_recoup\_refresh}}
|
||||
\end{itemize}
|
||||
|
||||
Under \url{https://git.taler.net/exchange.git/tree/src/exchangedb}:\\
|
||||
\href{https://git.taler.net/exchange.git/tree/src/exchangedb/common.sql}{common.sql},
|
||||
\href{https://git.taler.net/exchange.git/tree/src/exchangedb/exchange-0001.sql}{exchange-0001.sql},
|
||||
\href{https://git.taler.net/exchange.git/tree/src/exchangedb/plugin\_exchangedb\_postgres.c}{plugin\_exchangedb\_postgres.c}.
|
||||
\item[Merchant:]
|
||||
Under \url{https://git.taler.net/merchant.git/tree/src/},
|
||||
\begin{itemize}
|
||||
\item schema changes in
|
||||
\href{https://git.taler.net/merchant.git/tree/src/backenddb/merchant-0001.sql}{backenddb/merchant-0001.sql} and\\
|
||||
\href{https://git.taler.net/merchant.git/tree/src/backenddb/plugin_merchantdb_postgres.c}{backenddb/plugin\_merchantdb\_postgres.c}
|
||||
\item functions \verb|process_pay_with_exchange| and \verb|parse_pay| in\\
|
||||
\href{https://git.taler.net/merchant.git/tree/src/backend/taler-merchant-httpd_post-orders-ID-pay.c}{backend/taler-merchant-httpd\_post-orders-ID-pay.c}
|
||||
\end{itemize}
|
||||
|
||||
\item[Wallet:]
|
||||
Under \url{https://git.taler.net/wallet-core.git/tree/packages/taler-util}
|
||||
\begin{itemize}
|
||||
\item low-level cryptographic primitives in
|
||||
\href{https://git.taler.net/wallet-core.git/tree/packages/taler-util/src/nacl-fast.ts}{\texttt{crypto\_edx25519}} and
|
||||
\href{https://git.taler.net/wallet-core.git/tree/packages/taler-util/src/talerCrypto.ts#n851}{namespace \texttt{Edx25519}}
|
||||
\item high-level cryptographic primitives in
|
||||
\href{https://git.taler.net/wallet-core.git/tree/packages/taler-util/src/talerCrypto.ts#n966}{namespace \texttt{AgeRestrictions}}
|
||||
\item API changes to wallet-core RPC API in
|
||||
\href{https://git.taler.net/wallet-core.git/tree/packages/taler-util/src/walletTypes.ts}{\texttt{restrictAge}}
|
||||
\end{itemize}
|
||||
Under \url{https://git.taler.net/wallet-core.git/tree/packages/taler-wallet-core/}
|
||||
\begin{itemize}
|
||||
\item withdrawal and refresh primitives in \href{https://git.taler.net/wallet-core.git/tree/packages/taler-wallet-core/src/crypto/cryptoImplementation.ts}{\texttt{crypto/cryptoImplementation.ts}}
|
||||
\item wallet database requests and HTTP requests in \\
|
||||
\href{https://git.taler.net/wallet-core.git/tree/packages/taler-wallet-core/src/db.ts}{\texttt{db.ts}},
|
||||
\href{https://git.taler.net/wallet-core.git/tree/packages/taler-wallet-core/src/operations/withdraw.ts}{\texttt{withdraw.ts}} and
|
||||
\href{https://git.taler.net/wallet-core.git/tree/packages/taler-wallet-core/src/operations/refresh.ts}{\texttt{refresh.ts}}
|
||||
\item coin/denomination selection in
|
||||
\href{https://git.taler.net/wallet-core.git/tree/packages/taler-wallet-core/src/util/coinSelection.ts}{\texttt{util/coinSelection.ts}}
|
||||
\end{itemize}
|
||||
|
||||
|
||||
\item[Tests:] Under \url{https://git.taler.net/exchange.git/tree/src}:
|
||||
\begin{itemize}
|
||||
\item \href{https://git.taler.net/exchange.git/tree/src/util/test\_crypto.c}{util/test\_crypto.c}
|
||||
\item \href{https://git.taler.net/exchange.git/tree/src/util/test\_age\_restriction.c}{util/test\_age\_restriction.c}
|
||||
\item \href{https://git.taler.net/exchange.git/tree/src/util/tv\_age\_restriction.c}{util/tv\_age\_restriction.c}
|
||||
\item \href{https://git.taler.net/exchange.git/tree/src/testing/test\_exchange\_api.c}{testing/test\_exchange\_api.c}
|
||||
\end{itemize}
|
||||
\end{description}
|
||||
|
||||
|
||||
The definition of Edx25519, a variant of EdDSA that we designed for usage in
|
||||
our age restriction scheme in GNU Taler, and its implementation is located at
|
||||
\url{https://git.gnunet.org/gnunet.git/} in file
|
||||
\href{https://git.gnunet.org/gnunet.git/tree/src/util/crypto\_edx25519.c}{util/crypto\_edx25519.c}.
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
\newpage
|
||||
@ -264,7 +554,7 @@ locations under \url{https://git.taler.net/wallet-core.git/tree/packages/}
|
||||
|
||||
|
||||
\newpage
|
||||
\section{User Experience Studies}
|
||||
\section{Usability Study}
|
||||
|
||||
For the \textsc{NGI Pointer} programme, the AP³ project team performed a
|
||||
usability study to gather feedback and inform further development of the
|
||||
|
Loading…
Reference in New Issue
Block a user