All Classes Namespaces Files Functions Variables Macros Pages
C++ Verificatum Verifier Documentation

Purpose

Verificatum is an implementation of a provably secure mix-net. Used for electronic vote, such a protocol has the advantage of providing proofs that its execution went as expected. However, parsing such proofs would be impossible for a human being. Thus, independent pieces of software have to be written by third parties to perform these verifications. Our program is one such verifier and it implements the specification available here.

Installation

As is, this program runs only on UNIX. The C++ code is actually called by a small bash script which deals with the CLI options and the tests are also bash scripts. Maybe it is possible to find a way round using cygwin but I did not test that. Note however that it is written in C++ using the standard library and compiled using cmake, so it should be possible to run it on windows with little work.

Prerequisites

There is no pre-compiled version of this software so you have to compile it "by hand". First of all, you are going to need cmake, a cross-platform build system (it is in most Linux distribution's repositories) and git to be able to retrieve the source code.

Download and compilation

All you have to do is to download the sources and build the software is to run the following commands in the directory of you choice.

git clone --depth=1 git://github.com/picarresursix/verificatum-verifier.git
cd verificatum-verifier
mkdir build
cd build
cmake ..
make

If you want to create a local copy of this documentation (or if you want to update it after modifying it), run the updateDoc.sh script in the doc/ folder. If you want to run some tests to see everything compiled as it should have, go to the tests/ directory and run the bash script test.sh; more info about the tests here. Note that you will need python for this to work.

Usage

The C++ program does not handle verbosity and does not check the existence of the roProof directory and protInfo.xml file. These are left to a small bash script which you should run to perform the actual verification. Once the C++ program has been compiled, run the following command:

./cppvv.sh (-v) <protInfo.xml> <roProof>

Where both <protInfo.xml> and <roProof> are path. Put the -v optional parameter to activate a verbose output.

This will perform some (small) verifications and call the main program. If verbosity is activated, the program will output some hopefully useful data on the standard output (stdout, a.k.a &1). Otherwise, it will send the output of the program to /dev/null. In the end, the value returned by the program is returned by the script:

  • 0 if everything went perfectly.
  • 1 if the computations should be rejected.

Repository

This project is hosted on github, so the source code and the data to generate this documentation the source code can be downloaded there.

Documentation

This website contains the detailed documentation of this program. Each class and each function has its own explanations. However, should you have any problem understanding anything, feel free to contact me at leoperrin plus the at sign plus picarresursix plus fr. If you decide to extend this program, you can add your own pages by putting markdown documents in the doc/files folder. To update the documentation, simply use the doc/updateDoc.sh shell script (requires doxygen and graphviz, both of which are packaged for most Linux distributions).

Authors

This program was written and is maintained by Léo Perrin, an engineering and mathematics student under the supervision of PhD. Douglas Wikström, cryptography teacher at KTH (Stockholm).

Copyright

This program and its documentation are realeased under a BSD licence (one of the most permissive). It relies on the tinyxml library, realeased under a zlib licence, to parse the configuration file.