# E-Voting Crypto Primitives in Rust
## Introduction
This crate implements functionalities of the crpyto primitives for the E-Voting system of Swiss Post. It is based on the specifications of Swiss Post, according to the following document version:
- [Crypo-primitives](https://gitlab.com/swisspost-evoting/crypto-primitives/crypto-primitives), version 1.5.2
It implements only the functionalities that are necessary for the implementation of the Verifier.
See [API Documentation](https://docs.rs/rust_ev_crypto_primitives/) for details
## Development guide
The crate is tested with the version of Rust defined in [Cargo.toml](Cargo.toml).
## Installation
The crate uses the crate [openssl](https://docs.rs/openssl/latest/openssl/) to wrap the functions of the library openssl for the basic cryptographic functions. Please check the installation guide of the crate.
The crate uses the crate [rug](https://crates.io/crates/rug) to wrap the functions of the library GMP for the performant big integers. Please check the installation guide of the crate.
In particular the build on Windows must be perfomerd with MSYS2 (see [windows](https://docs.rs/gmp-mpfr-sys/1.6.4/gmp_mpfr_sys/index.html#building-on-windows) for details).
Following packagess must be installed with pacman:
```
pacman -S pacman-mirrors
pacman -S diffutils m4 make mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-openssl
pacman -S openssl-devel pkgconf
```
## Licence
Rug is free software: you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version. See the full text of the [GNU GPL](LICENSE.md) for details.
## Third party
See [THIRD_PARTY](THIRD_PARTY)