ngi-pointer-ap3/m3/ngi-ap3-m3-report.tex

285 lines
8.3 KiB
TeX

\documentclass{scrarticle}
\usepackage[a4paper]{geometry}
\usepackage{hyperref}
\usepackage{xcolor}
\hypersetup{
colorlinks = true,
allcolors = {black},
linkcolor = [rgb]{0.6 0.1 0.1},
urlcolor = [rgb]{0.1 0.1 0.7}
}
\usepackage{url}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{pdfpages}
\usepackage{graphicx}
\usepackage{listings}
\lstdefinelanguage{typescript}{
keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break, interface},
keywordstyle=\color{purple}\bfseries,
ndkeywords={class, export, boolean, number, Amount, string, Timestamp, RelativeTime, EddsaPublicKey, BrandtVickreyAuction, BrandtVickreyAuctionMessage, BrandtVickreyAuctionWinner, EddsaSignature, HashCode, throw, implements, import, this},
ndkeywordstyle=\color{blue},
identifierstyle=\color{black},
sensitive=false,
comment=[l]{//},
morecomment=[s]{/*}{*/},
commentstyle=\color{darkgray}\ttfamily,
stringstyle=\color{red}\ttfamily,
morestring=[b]',
morestring=[b]"
}
\lstset{
language=typescript,
%backgroundcolor=\color{lightgray},
extendedchars=true,
basicstyle=\footnotesize\ttfamily,
showstringspaces=false,
showspaces=false,
%numbers=left,
%numberstyle=\footnotesize,
%numbersep=9pt,
tabsize=2,
breaklines=true,
showtabs=false,
captionpos=b
}
\begin{document}
\title{AP³\\
Report for Milestone III\\
NGI Pointer}
\author{Özgür Kesim\\
Christan Grothoff\\
Florian Dold\\
Stefan Kügel\\
Emmanuel Benoist\\[\bigskipamount]
\normalsize Mentor: Mirko Ross \href{mailto:m.ross@digital-worx.de}{<m.ross@digital-worx.de>}\\[\medskipamount]
}
\date{October 15, 2022}
\maketitle
\section*{Management summary}
\begin{abstract}
The AP³ project presents here the report for the milestone III for NGI Pointer.
The deliverables for this milestone are:
\begin{description}
\item[P2P payments] --
\item[Anonymous auction] --
\end{description}
\end{abstract}
\vfill
\hfill {\footnotesize Version: 1.0}
\thispagestyle{empty}
\newpage
\tableofcontents
\newpage
\section{P2P payments}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\section{Anonymous auctions}
\subsection{Transscript and Replay for libbrandt}
At the beginning of our project, the most recent implementation of
Brandt-Vickrey auctions was from Markus Teich
(\url{https://git.gnunet.org/libbrandt.git/}). In our own fork at
\url{https://git.kesim.org/oec/libbrandt}, we added the following functionality:
\begin{description}
\item[Transscript generation] The unit-test file
\href{https://git.kesim.org/oec/libbrandt/src/branch/transcript/test\_brandt.c}{test\_brandt.c}
has been extended to generate and print a transscript for each
auction, containing parameters of the auction---such as number
of bidders, prices and auction type---and the list of all
messages that the seller has received during the protocol
execution.
The definition of the transcript structure is given in appendix
\ref{transcript}.
\item[Replay of transscript] The new file
\href{https://git.kesim.org/oec/libbrandt/src/branch/transcript/replay.c}{replay.c}
reads a transcript from stdin, parses it and executes an
auction, replaying all messages from the transcript.
On success, it prints a result in JSON form to stdout:
\begin{lstlisting}[language=typescript]
interface BrandtVickreyAuctionWinner {
// The index of the bidder into the
// `BrandtVickreyAuctionTranscript`.bidder array.
bidder: number;
// The index of the winning price into the
// `BrandtVickreyAuction`.prices array.
price_idx: number;
// The winning price
price: Amount;
}
\end{lstlisting}
\end{description}
\subsection{Policy extensions framework for GNUN Taler}
General policy extension framework
\subsection{Brandt-Vickrey-auction extension for GNU Taler}
Extension \verb|policy_brandt_vickrey_auction| added
\begin{itemize}
\item \verb|get_policy_details| generates hash-code for
a policy by building the hash $H(h_a || p_b)$,
where $h_a$ is the hash of the auction meta
data and $p_b$ is the public key of the bidder.
Both parameters are part of the policy
structure provided during a deposit.
\item the POST-handler receives the transcript and the
list of policy-details of former
deposit-operations. It parses the transcript
and calls an external program to replay the
auction and determine the winners and winning
price.
\end{itemize}
\subsection{Future work}
\subsubsection{libbrandt}
use libsodium
make it compatible with current version of GNUNET
\subsubsection{policy framework}
add escrow policy and merge refund to it
\subsubsection{brandt-vickrey-auction}
verify signatures of transscript
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\part*{Appendix}
\addcontentsline{toc}{part}{Appendix}
\appendix
\section{Definition of a Transcript of Brandt-Vickrey-Auctions}
\label{transcript}
The following definition is provided in TypeScript and taken from
\url{https://docs.taler.net/core/api-exchange.html#tsref-type-BrandtVickreyAuction}.
\begin{lstlisting}[language=typescript]
// This structure defines an auction of Brandt-Vickory kind.
// It is used for the PolicyBrandtVickreyAuction.
interface BrandtVickreyAuction {
// Start date of the auction
time_start: Timestamp;
// Maximum duration per round. There are four rounds in an auction of
// Brandt-Vickrey kind.
time_round: RelativeTime;
// This integer m refers to the (m+1)-type of the Brandt-Vickrey-auction.
// - Type 0 refers to an auction with one highest-price winner,
// - Type 1 refers to an auction with one winner, paying the second
// highest price,
// - Type 2 refers to an auction with two winners, paying
// the third-highest price,
// - etc.
auction_type: number;
// The vector of prices for the Brandt-Vickrey auction. The values MUST
// be in strictly increasing order.
prices: Amount[];
// The type of outcome of the auction.
// In case the auction is declared public, each bidder can calculate the
// winning price. This field is not relevant for the replay of a
// transcript, as the transcript must be provided by the seller who sees
// the winner(s) and winning price of the auction.
outcome_public: boolean;
// The public key of the seller.
pubkey: EddsaPublicKey;
// The seller's account details.
payto_uri: string;
}
// This structure defines the transcript of an auction
// of Brandt-Vickrey kind.
interface BrandtVickreyAuctionTranscript {
// The auction definition.
auction: BrandtVickreyAuction;
// The public keys of the bidders, in Crockford Base32 encoding.
bidders: EddsaPublicKey[];
// Signatures of the auction in Crockford Base32 encoding.
// One signature per bidder.
signatures: EddsaSignature[];
// List of policy hash codes that identify policy details associated with
// each bidder. Those codes were generated by the policy extension
// policy_brandt_vickrey_auction during the deposit of coins for this
// auction.
policy_hash_codes: HashCode[];
// The transcript of all messages received by the seller.
transcript: BrandtVickreyAuctionMessage[];
// Optionally, the seller can provide the winners it had calculated.
winners?: BrandtVickreyAuctionWinner[];
// The signature over the hash of this JSON object, without the
// key ``sig`` and in normalized form, basically over
// H(auction, bidders, signatures, transcripts, winners?)
// It is signed by the private key that corresponds to the public key
// in `BrandtVickreyAuction`.``pubkey``.
// This signature is in Crockford Base32 encoding.
sig: EddsaSignature;
}
interface BrandtVickreyAuctionMessage {
// The index of the bidder into the
// `BrandtVickreyAuctionTranscript`.``bidders`` array.
bidder: number;
// The raw message in Crockford Base32 encoding.
msg: string;
// The signature over the message. The signature is in Crockford Base32
// encoding. It must be signed by the private key corresponding to the
// bidder's public key in `BrandtVickreyAuctionTranscript`.``bidders``.
sig: EddsaSignature;
}
\end{lstlisting}
\newpage
%\includepdf[pagecommand=\section{Age restriction and Legal Issues}\label{legal},frame=true,pages=1,scale=.9]{Age_restriction_and_legal_issues.pdf}
%\includepdf[pages=2-,scale=.9,frame=true]{Age_restriction_and_legal_issues.pdf}
\end{document}