FHEMP 0.6.0
Гомоморфное шифрование на основе матричных полиномов
License: MIT
Requires Python: >=3.8

# Гомоморфное шифрование на основе матричных полиномов

# Описание

Библиотека содержит алгоритм гомоморфного шифрования на основе матричных полиномов. Подходит для создания систем, в которых необходимо выполнить вычисления над зашифрованными данными без их расшифровки.

# Возможности

Библиотека "FHEMP" поддерживает функции:
1. Генерация ключей: секртеный ключ, секретный вектор, ключ вычислений;
2. Шифрование целых чисел;
3. Расшифровка с использованием секретного ключа и вектора;
4. Гомоморфне операции: сложение и умножение зашифрованных данных.

## Установка

Для установки необходимо выполнить команду

```bash
pip install FHEMP
```

Для обновления версии до последней необходиом выполнить команду

```bash
pip install --upgrade FHEMP
```

# Инструкция по использованию

Перед началом работы необходимо определится с параметрами криптосистемы, такими как N, размерность матрицы, p, модуль по которому будут проходить вычисления, и 4 переменные λ, γ, δ и ψ, они влиют на степень матричных полиномов.

Важное примечение. p — должно быть больше максимального возможного значения результата после гомоморфных операций, иначе расшифровка будет приводить к некоректному резульату.

Для хранения данных, таких как ключи шфирования и шифртексты, будет использоваться папки "key" и "cipher", которые будут созданы в папке "FHEMP_data"

# Описание использования функций

1) generate_keys, данная функция геерирует секртеный ключ, вектор и ключ вычислений 

```bash
generate_keys(N, p, lam, omega, delta, sk_name, k_name, evk_name)
```

В ней необходимо указать значение переменных N, p, lam, omega, delta, так же необходимо указать навзание файлов в которые будут сохранены секретный ключ, вектор и ключ вычислений. 

Пример вызова функции генерации ключей

```bash
generate_keys(5, 97, 3, 3, 3, "secret_key", "vector", "evk")
```

2) encrypt, данная функция выполняет шифрование открытого текста. 

```bash
encrypt(message, filename, N, p, lam, psi, name_secret_key_file, name_vector_file)
```

Для работы функции шифрования необходимо указать сообщение (целое число), которое нужно зашифровать, название файла в который сохранится зашифрованное сообщение, значение переменных N, p, lam, psi, и название файлов содержащих секретный ключ и вектор.

Пример вызова функции шифрования

```bash
encrypt(10, "cipher1", 5, 97, 3, 3, "secret_key", "vector")
```

3) operate_add, данная функция выполняет сложение двух шфиртекстов

```bash
operate(ciphertext_file1, ciphertext_file2, p, filename)
```

В ней необходимо указать названия двух файлов с которыми нужно выполнить операцию сложения,  и значение p, модуля и название 

Пример вызова функции выполнения операции сложения

```bash
operate_add("cipher1", "cipher2", 97, "multi")
```

4) operate_multi, данная функция вычисляет произведение двух шфиртекстов

```bash
operate_multi(ciphertext_file1, ciphertext_file2, p, evk, filename)
```

В ней необходимо указать названия двух файлов, которые необходимо перемножить между собой, значение p, модуля, и название файла, в который сохранится результат.

Пример вызова функции выполнения операции умножения

```bash
operate_multi("cipher1", "cipher2", 97, "evk", "multi")
```

5) decrypt, данная функция выполняет расшифровку шифртекста

```bash
decrypt(ciphertext_file, secret_key_file, vector_file, p)
```

В ней необходимо указать название файлов содрежащих зашифрованный текст, секретный ключ, секретный вектор и значение p, модуля.

Пример вызова функции расшифровки

```bash
decrypt("multi", "secret_key", "vector", 97)
```