# A lattice based group signature scheme

Implementation of the scheme as proposed in:
> [DEL PINO, R., LYUBASHEVSKY, V., SEILER, G. Lattice-Based Group Signatures and Zero-Knowledge Proofs of Automorphism Stability. IACR Cryptology ePrint Archive. 2018.](https://eprint.iacr.org/2018/779.pdf)

Original implementation was received from Dr. Seiler. The received implementation was subjected to minor changes to allow for time and space measurements of selected operations and parameters. Modified implementation is therefore attached.

## Prerequisites
Implementation is made in the C programming language.
It requires the following compiler and libraries to be installed:
```
sudo apt-get install gcc
sudo apt-get install libgmp-dev
sudo apt-get install libmpc-dev
```
It also requires a [Fast Library for Number Theory (FLINT)](https://www.flintlib.org/), which is not available through ```apt-get```. Download the latest release [here](https://www.flintlib.org/downloads.html). Extract the library and run the following commands in the folder:
```
./configure
make
```
FLINT takes about 10 to 20 minutes to build as it is a huge library.
## Compilation
Run the following command to create a ```test_sign``` executable:
```
make
```
## Running the scheme
Finally run the executable with the following command.
```
./test_sign    
```
### Changing the group size and message
Group signature parameters and message length are hard coded. Scheme therefore can only be run using the default hardcoded parameters. Group consists of one member which repeatedly signs a message. Message size is 32 bytes. Message is being verified. Open is not implemented. 

---
### Authors of the original implementation:
del Pino, R. et al.

---
### README, modifications:
Hluckova, P.
