Copyright © 2007 The Adder Team
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being just the section called “What is Adder?”, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
February, 2007
Table of Contents
List of Figures
Table of Contents
Adder is a free and open-source electronic voting system. employing strong cryptography. Our system is a fully functional e-voting platform and enjoys a number of security properties, such as robustness, trust distribution, ballot privacy, auditability and verifiability. It can readily implement and carry out various voting procedures in parallel and can be used for small scale boardroom/department-wide voting as well as large-scale elections. In addition, Adder employs a flexible voting scheme which allows the system to carry out procedures such as surveys or other data collection activities. Adder offers a unique opportunity to study cryptographic voting protocols from a systems perspective and to explore the security and usability of electronic voting systems.
By "free," we mean that you are free to do with Adder as you please. You can run it in your organization, study the source code, make changes, share it with your friends, sell it, or anything else you like. We feel that reliable electronic voting is something that everyone should have access to, which is why we created this system.
By "open-source," we mean that the source code to Adder is out in the open. We believe that this is the only realistic way to create an electronic voting system. Commercial vendors of electronic voting systems often hide their source code, possibly to avoid revealing embarassing security flaws. With Adder, you can be assured that the software blueprints are visible at all times. If you would like to use Adder to conduct an election, you can perform your own audit of the code to ensure its security and correctness. If you are not yourself a programmer, you can hire someone to inspect the code for you.
We hope that Adder will be used for many types of elections, not just large-scale political ones.
Small political elections. If there is little risk of a large-scale attack on the system, then Adder would be well-suited. For example, Adder would be well-suited for town government elections.
Student government elections. Adder's easy-to-use voting applet is ideal for students to run over the Web. Adder can help students at universities and colleges become more involved in their schools.
Organizational elections. In small organizations, where voting members are likely to know each other, election privacy may be important.
Experimenting with cryptography. Adder's cryptographic library is well-documented, and we hope that people who are interested in cryptography will explore it. Adder provides an interesting opportunity as a cryptographic system that is designed to be used by non-technical users. It will hopefully provide good insight into how ordinary users understand security and cryptography.
From a technological perspective, Adder strives toward the following goals.
Transparency. All of the data in the main server database should be accessible to the public. This includes the encrypted votes, public encryption keys, and final totals. The main server database does not store secrets.
Universal Verifiability. Any result obtained by the system should be verifiable by any third party. By inspecting the election transcript, it should be possible to perform a complete audit of any procedure.
Privacy. All voters in an election should be confident that their individual choices will remain hidden. Only the total is made available to the public.
Distributed Trust. Each procedure is "supervised" by multiple authorities, and the final sum cannot be revealed without the cooperation of a given number of authorities. Any attempt to undermine the procedure will require the corruption of a set number of authorities. Authorities and voters may overlap arbitrarily. Thus, it is possible for the voters themselves to ensure trustworthiness.
Adder consists of the following components.
libadder - the cryptographic library
cryptoserver - the main server
php-adder - a set of php scripts to allow voting over the Web
mozilla-plugin-adder/AdderCtrl/libadder-java - respectively, Mozilla plugin, IE control, and Java applet to be used with php-adder (all henceforth refered to as "browser plugins.")
AdderGUI - a Qt-based GUI and verification suite for administration and advanced election functionality.
If you would like to administer your own election server, you will want to install libadder, cryptoserver, and php-adder on the server, and AdderGUI and/or a browser plugin on each of the clients. If you would like to participate in Adder elections that are already running, you will only need to install either a browser plugin or AdderGUI.
The dependencies of libadder are:
GMP, version 4.1.3 or greater
OpenSSL
Doxygen API documentation can be built by running 'doxygen' in the 'src' directory.
The system requirements of AdderGUI are:
libadder
Qt 4
QConf
Boost.Regex
QCA2
QCA2-OpenSSL
Type the following commands to build and install AdderGUI:
$ qconf
$ ./configure --prefix=<prefix> --bindir=<bindir> --qtdir=<qtdir>
$ make
$ make INSTALL_ROOT=<INSTALL_ROOT> install
![]() | Important |
|---|---|
There seems to be a problem with GCC
4.1. It takes forever to compile
|
To install an Adder server, you must install the following components.
libadder
cryptoserver
php-adder
This section explains how to configure the cryptoserver. For help with libadder and php-adder, you should read the sections on those two components.
The dependencies of cryptoserver are:
libadder
ACE, version 5.4.2 or greater
MySQL++, version 1.7.19
MySQL, version 4.0.21 or greater
OpenSSL, version 0.9.7d or greater
Once all of the dependencies are installed, you can compile and install cryptoserver as follows.
$ ./configure
$ make
$ make install
Next, you must configure the MySQL database. Change into the 'database' directory, and enter the following commands.
# mysqladmin create adder
# mysql adder < schema.sql
# mysql adder < permissions.sql
You should now configure the
/etc/cryptoserver.conf file to your liking.
![]() | Warning |
|---|---|
In our experience running Ubuntu on linux/ppc, MySQL++ does not work with the cryptoserver. It will crash frequently. |
Table of Contents
This chapter gives an overview of the Adder system. It explains some of the cryptographic background necessary to understand the operation of the system, as well as how an Adder election procedure is conducted.
We can divide users of a voting system into four distinct roles: voters, authorities, auditors, and administrators.
As expected, voters are the players who cast ballots.
Authorities are responsible for maintaining the integrity of the election. They possess shares of the secret decryption key needed to recover the final election result. Authorities do not have more power than any other users.
Administrators are tasked with creating and maintaining current elections.
Auditors can consist of members of the previous three groups, as well as members of the public at large. They are able to perform tasks guaranteed by the property of universal verifiability, e.g., inspecting the election transcript, double-checking the final tally, etc.
These groups may overlap arbitrarily. For instance, it may be desirable to make the authorities a subset of the voters, so that the voters themselves can ensure the integrity of the election. Furthermore, the administrators might contain some members who are authorities, and some who are neutral parties. Finally, the auditors would contain all of the above members, as well as additional neutral parties.
An Adder procedure is complicated, and it is important to go through the steps one by one. A graphical depiction of the procedure is shown in Figure 2.1, “A Sequence Diagram of an Adder Procedure”
Procedure creation. An election begins when an administrator logs onto the bulletin board server and submits the procedure creation data. Among the parameters specified are the procedure identifier, the identities of voters and authorities that are eligible to participate, the authority threshold, the minimum and maximum number of candidates that voters can select, the list of candidates, and the election duration. Once the administrator submits this form, the bulletin board server populates the database with the corresponding information.
The bulletin board server subsequently generates the cryptographic values for the election.
Authority public key generation. Once the procedure has been created, the authorities collaborate to create the public encryption key of the system. At the end of the election, they each contribute a part to the decryption of the result. Note that no authority has the ability to decrypt a single vote because the actual private key of the system does not exist in the private memory of any one entity. Rather, it is broken up in the form of the authorities' individual private keys. In order to decrypt a single vote, an amount of authorities greater than the authority threshold would all have to collaborate. To counter this, election officials should designate authorities with differing political interests, so they would have no incentive to collude.
An authority downloads the cryptographic parameters from the bulletin board. He then generates a public key, and stores the corresponding secret key. The public key is stored on the bulletin board. Once all authorities have completed this stage, the public key of each authority is stored on the bulletin board. If not enough authorities complete this step, then the server terminates the procedure.
Polynomial generation. At this stage, the authorities will participate in a protocol that will compute the public key for the election using a distributed key generation protocol.
An authority logs in, reads the public keys for all authorities, and the authority threshold. The authority creates his secret share information, and publishes a value as a form of encryption using each other authority's public key. Again, if too few authorities participate, the server terminates the procedure.
Private key generation. Each authority connects to the bulletin board server and reads the secret share encryption from each other authority. Note that authority can decrypt all of these values, as they were encrypted with his public key. Thus, he retrieves his private key from his private memory. He decrypts these values, combines them, and stores the result in private memory. Once more, if less than the threshold number of authorities completes this step, the server terminates the procedure.
Public key publication. The bulletin board server combines the secret share information publishes by each authority into a public key, and publishes this value. This key serves as the public key of the procedure, which voters will use when they encrypt their ballots.
Voting. Now, the election may begin. Each voter downloads the public key from the bulletin board, as well as the cryptographic parameters. The voter is permitted to vote between a minimum and maximum number of candidates. The voter thus forms a ciphertext for each candidate, encrypting 1 if the voter votes for that candidate, and 0 otherwise. The encrypted vote is therefore a vector of ciphertexts, one for each candidate. Along with the encrypted vote, the voter computes a proof of ballot validity.
The bulletin board server then verifies the proof. If the proof is valid, and the voter has not already voted, it posts the vote and proof on the bulletin board. Otherwise, it discards the vote and proof and returns an error.
Result tabulation. When duration of the election has expired, or when an administrator manually ends the election, result tabulation occurs. The encrypted sum of the votes is computed by the bulletin board server combining the votes according to the homomorphic property of the encryption. This combined sum is then posted on the bulletin board.
Authority decryption. Now, each authority logs in again, downloads the encrypted result of the election, and submits his partial decryption. These partial decryptions are posted on the bulletin board.
Result decryption. Once each authority has submitted his partial decryption, the bulletin board server combines the partial decryptions and decrypts the result.
Result publication. The end result is finally published on the bulletin board. The election is over, and no more logins are accepted. Anyone can now view the final result.
Table of Contents
Please read this chapter if you are a voter trying to use Adder.
Before you can cast your vote, you need to have some authentication credentials. When you were registered as a voter on the Adder server, you should have been presented with a username and password. If you have not received these credentials, then you should contact the system administrator who set up the election server and ask for them.
Provided you have received your username and password, there are two ways you can cast your vote. The first is through the Adder Web interface, and the second is through the AdderGUI. If you are simply a voter, then you probably want to use the Adder Web interface. In this case, please proceed to the section called “Using the Web Interface”. If you are also functioning as an authority or an auditor in the election, then you will probably want to use the AdderGUI interface, as it provides you with several enhanced options. In this case, please proceed to the section called “Using the Graphical Frontend”.
The Adder Web interface provides an easy way to voters to cast ballots without needing to install any additional software.
The election administrator should have provided you with a URL, a username, and a password. To begin, point your browser at the provided URL. You should be presented with a page as in Figure 3.1, “The Participation Page”.
This page provides a list of actively running procedures, with
the option to log in next to each one. When you have located
the procedure you would like to participate in, click on the
Login link below its name. You will be
presented with the Login page, shown in Figure 3.2, “The Login Page”.
Once you have logged in successfully, you may vote. You will be shown the Vote page, as in Figure 3.3, “The Vote Page”
Select the choices that you would like to vote for, and then click on . When you are presented with a page indicating success, then you are all set. If you receive an error message, contact your election administrator.
Your administrator should have provided you with a username, a password, a hostname, a procedure name, and an SSL certificate. You will need all of these pieces of information in order to use AdderGUI for voting.
To begin with, launch AdderGUI. If you have not already entered the SSL certificate into AdderGUI, you must do so now. The certificate should be in the form of a PEM file. That is, it will look something like below.
-----BEGIN CERTIFICATE-----
MIICsDCCAhmgAwIBAgIJAMSPY0eacRVuMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMDUxMTE0MDIzMDQxWhcNMDUxMjE0MDIzMDQxWjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
gQCx/Etjk4lSZxvSZKsp1ODy38LNjNNkQZTvXsCENV2xBMGFY09HY6O5KJpI2ehp
jXO+dHcxmfDf3WAzfYigGktvxHqI2kv+mzZAQbdOIYwn0Je3+hE/V59qik5Ueh2q
UWDJGwdpddBsGEcF93N9KeBkIjaty2AJRAn8noLr6cgIVQIDAQABo4GnMIGkMB0G
A1UdDgQWBBTOU105Lit4QxpQb2u45FNyZ6C8iDB1BgNVHSMEbjBsgBTOU105Lit4
QxpQb2u45FNyZ6C8iKFJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUt
U3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAMSPY0ea
cRVuMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAqJTlDXQGBChFNzEn
qf7IPfHzL1d/MIfJSeN7+BHrxIIXO+l6JRRhZqBmEaxHA34+OTumCBX/72ugRHx4
l7Ys11rFeNvjmL2OQJBf+bj4eqCJwEet3LILnP0puu999MRumcMIlrHYQCgn0Y+w
hWeBvDENaPzo8JS19+HZp4y5p8E=
-----END CERTIFICATE-----
![]() | Important |
|---|---|
You must install the SSL certificate before trying to connect to the server. |
To install the certificate, select the item from the list. Next, select the item. You will be presented with the dialog shown in Figure 3.4, “The SSL Settings Dialog”. Copy the certificate text into the box as shown. Finally, select .
Select the option from the menu. You will be presented with the Connect to Server dialog. At this point, you should enter the hostname your administrator has provided you with. Unless you are told otherwise by your administrator, leave the Port setting at the default of 6999. Finally, ensure that the Use SSL box is checked. Once the dialog looks similar to that in Figure 3.5, “The Connect to Server Dialog”, press .
Once you are connected to the server, you should select the procedure given to you by your administrator. In the example shown in Figure 3.6, “The Procedure Selection Window”, there is only one procedure. Select it, and click on the button, as shown in the screenshot.
![]() | Important |
|---|---|
You must ensure that the Stage field of the procedure reads "Voting" before you try to vote. If it reads anything else, check to ensure that you are voting at the correct time. If you are voting at the correct time, then please contact your election administrator for assistance. |
AdderGUI will prompt you for your name and password, which you should now enter. You will then be presented with the Select Choice dialog, shown in Figure 3.7, “The Select Choice Dialog”
This dialog shows you the ballot question, i.e., the issue to be voted on, followed by a list of choices. You should also notice that there are two election parameters, the Minimum and Maximum, indicating the minimum and maximum number of choices you are allowed to select. You may toggle between selecting and unselecting a choice by clicking on it. Once you are through filling out your ballot, click on .
When AdderGUI informs you that the ballot has been cast successfully, you are now done voting. If AdderGUI gives you any error message after you submit your ballot, contact your election administrator.
Table of Contents
As an authority, you are tasked with sharing the responsibility of maintaining the security of an election. As daunting as that sounds, this job fortunately requires little work on your part.
If you would like a greater understanding of the reasons behind why Adder uses a multi-authority system, refer to Chapter 2, Basic Concepts.
Before you can begin functioning as an authority, you must have the proper information from your election administrator, including a username, password, hostname, and an SSL certficate. Assuming you have this information, following the instructions in the section called “Installing the SSL Certificate” to install the SSL certficate and in the section called “Connecting to the Server” to connect to the server. Next, you must select a key directory as shown in Figure 4.1, “The Key Locations Dialog”. This must be a directory that you have write access to. The default filenames should be fine.
As an authority, you are required to participate in several stages of an election. Once you connect to the server, you should be able to perform these tasks by selecting the option, logging in, and following the instructions.
Please ensure that you have taken as the following security measures.
Protecting key files from being read by anyone else.
Protecting key files from being accidentally deleted.
Ensuring that your passwords is kept secret
Verifying that you install the correct SSL certificate as given to you by the election administrator.
Notifying the administrator of and suspicions you notice.
To administer an election, you must have installed the
cryptoserver on a machine accessible to AdderGUI over the
network. In /etc/cryptoserver.conf, you must
specify a line with the administrator password as
admin_password mypassword
where 'mypassword' is replaced by a password of your choosing. Once your password is set, use AdderGUI to open a connection to the server, specifying your password as shown in Figure 5.1, “Connecting as an Administrator”.
To create a new procedure, select the item as shown in Figure 5.2, “The Procedure Creation Option”. You will be presented with the Procedure Creation Wizard, which will guide you through the process of creating a new procedure.
To create a new user, select the item from the menu. Fill out the form shown in Figure 5.3, “The User Creation Dialog” to create the user.
You can perform the following procedure administration functions from AdderGUI.
Advance/Start. Begin a new procedure, or advance the stage of a running one.
Reset. Return a procedure back to a non-running state. This procedure will still show up in the procedure list. Be aware that any votes cast, or any other data stored in the procedure will be lost if you reset it.
Delete. This will completely delete the procedure. Any data will be lost.
Version 1.2, November 2002
Copyright © 2000,2001,2002 Free Software Foundation, Inc.
Version 1.2, November 2002
Table of Contents
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
GNU FDL Modification Conditions
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.
To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Sample Invariant Sections list
Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:
Sample Invariant Sections list
with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.