You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"An election in ElectionGuard is defined as a set of metadata and cryptographic artifacts necessary to encrypt, conduct, tally, decrypt, and verify an election. The Data format used for election metadata is based on the [NIST Election Common Standard Data Specification](https://www.nist.gov/itl/voting/interoperability) but includes some modifications to support the end-to-end cryptography of ElectionGuard.\n",
9
+
"\n",
10
+
"Election metadata is described in a specific format parseable into an `Manifest` and it's validity is checked to ensure that it is of an appropriate structure to conduct an End-to-End Verified ElectionGuard Election. ElectionGuard only verifies the components of the election metadata that are necessary to encrypt and decrypt the election. Some components of the election metadata are not checked for structural validity, but are used when generating a hash representation of the `Manifest`.\n",
11
+
"\n",
12
+
"From an `Manifest` we derive an `InternalManifest` that includes a subset of the elements from the `Manifest` required to verify ballots are correct. Additionally a `CiphertextElectionContext` is created during the [Key Ceremony](/1_Key_Ceremony.md) that includes the cryptographic artifacts necessary for encrypting ballots.\n",
13
+
"\n",
14
+
"## Glossary\n",
15
+
"\n",
16
+
"- **Election Manifest** The election metadata in json format that is parsed into an Election Description\n",
17
+
"- **Election Description** The election metadata that describes the structure and type of the election, including geopolitical units, contests, candidates, and ballot styles, etc.\n",
18
+
"- **Internal Election Description** The subset of the `Manifest` required by ElectionGuard to validate ballots are correctly associated with an election. This component mutates the state of the Election Description.\n",
19
+
"- **Ciphertext Election Context** The cryptographic context of an election that is configured during the `Key Ceremony`\n",
20
+
"- **Description Hash** a Hash representation of the original Manifest.\n",
21
+
"\n",
22
+
"## Process\n",
23
+
"\n",
24
+
"1. Define an election according to the `Manifest` requirements.\n",
25
+
"2. Use the [NIST Common Standard Data Specification](https://www.nist.gov/itl/voting/interoperability) as a guide, but note the differences in [election.py](https://github.com/microsoft/electionguard-python/tree/main/src/electionguard.election.py) and the provided [sample manifest](https://github.com/microsoft/electionguard-python/tree/main/data/election_manifest_simple.json).\n",
26
+
"3. Parse the `Manifest` into the application.\n",
27
+
"4. Define the encryption parameters necessary for conducting an election (see `Key Ceremony`).\n",
28
+
"5. Create the Pubic Key either from a single secret, or from the Key Ceremony.\n",
29
+
"6. Build the `InternalManifest` and `CiphertextElectionContext` from the `Manifest` and `ElGamalKeyPair.public_key`.\n",
"# get an `InternalElectionDescription` and `CiphertextElectionContext`\n",
66
+
"# that are used for the remainder of the election.\n",
67
+
"(internal_manifest, context) = builder.build()"
68
+
],
69
+
"outputs": [],
70
+
"metadata": {
71
+
"attributes": {
72
+
"classes": [
73
+
"code-cell"
74
+
],
75
+
"id": ""
76
+
}
77
+
}
78
+
},
79
+
{
80
+
"cell_type": "markdown",
81
+
"source": [
82
+
"## Constants\n",
83
+
"\n",
84
+
"The election constants are the four constants that sit underneath most of the mathematical operations. The election constants can be configured, but there is a standard set which is recommended for most use cases. These can be found in `constants.py`.\n",
85
+
"\n",
86
+
"**⚠️ Warning ⚠️**\n",
87
+
"\n",
88
+
"There are some test constants used for testing code, but these are never to be used in any production system. The small and extra small constants are unlikely to be used except in rare cases for property testing due to collisions that will happen for smaller number sets."
0 commit comments