System Architecture
Components
Adder consists of the following separate
components, which are designed to work together.
- The Main Server: It is written in C++ and uses
the ACE
networking library. It is responsible for recording the votes,
maintaining the audit trail, running the tallying process, and
coordinating the authorities. Its persistent data are stored in a MySQL database.
- libadder: This is the cryptographic library that
accompanies the Adder
system. It implements the threshold ElGamal encryption necessary for
its operation. It is written in C++, and uses the GMP library for multiple precision
arithmetic. The libadder library is used by both the browser plugin
and the Main Server.
- Web Interface: Using the Web interface, a user
interacts with the system. It consists of a set of pages generated by
PHP, as well as PHP procedures that
communicate with the Main Server. Currently, the PHP code runs on the
Apache Web server.
- Browser Applet: This software is installed on
each user's machine, and runs in a Java-enabled Web browser. It is
responsible for performing all cryptographic operations on the client
side. As a result, all major Web browsers are supported by our
system.
- AdderGUI: For users who do not wish to use the
Web interface, we provide a graphical client. This client, AdderGUI,
is written in C++, and uses the Qt library,
and so should work on most common platforms, including GNU/Linux,
Microsoft Windows, MacOS X, and all major Unix variants. It includes
all functionality provided by the Web interface, as well as additional
auditing and administration utilities.
System Diagram
Here is a high-level diagram of the complete system: