Metadata-Version: 2.4
Name: FHEMP
Version: 0.4.6
Summary: Гомоморфное шифрование на основе матричных полиномов
Author: EvZait
License: MIT
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: numpy
Dynamic: author
Dynamic: description
Dynamic: description-content-type
Dynamic: license
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# Гомоморфное шифрование на основе матричных полиномов

# Описание

Библиотека содержит алгоритм гомоморфного шифрования на основе матричных полиномов. Подходит для создания систем, в которых можно выполнятьвычисления над зашифрованными данными без их расшифровки.

# Возможности

Библиотека "FHEMP" поддерживает функции:
1. Генерация ключей: секртеный ключ, секретный вектор, ключ вычислений;
2. Шифрование целых чисел;
3. Расшифровка с использованием секретного ключа и вектора;
4. Гомоморфне операции: сложение и умножение зашифрованных данных.

## Установка

Необходимо прописать команду с указанием версии, которую нужно скачать

```bash
pip install FHEMP=="version"
```

# Пример использования

Перед началом работы необходимо определится с параметрами криптосистемы, такими как N, размерность матрицы, p, модуль по которому будут проходить вычисления, и 4 переменные λ, γ, δ и ψ, они влиют на степень матричных полиномов.

Важное примечение. p — должно быть больше максимального возможного значения результата после гомоморфных операций, иначе расшифровка будет приводить к некоректному резульату.

Для сохранения данных, во время первого выполнения функций, создаться
папка "FHEMP_data", содержащая папку "key", для сгенерированных ключей, и
папку "cipher", для хранения зашифрованных данных.

В начале необходимо создать секретный ключ, секретный
вектор и ключ вычислений, это можно выполнить вызовом функции

```bash
generate_keys(N, p, lam, omega, delta, sk_name, k_name, evk_name)
```

В ней необходимо указать значение переменных, выбранных ранее, так же необходимо указать навзание файлов в которые будут сохранены секретный ключ, вектор и ключ вычислений. 

Для выполнения шифрования необходимо вызвать функцию 

```bash
encrypt(message, filename, N, p, lam, psi, name_secret_key_file, name_vector_file)
```

Для работы функции шифрования необходимо указать сообщение (целое число), которое нужно зашифровать, название файла в который сохранится зашифрованное сообщение, значение переменных N, p, lam, psi, и название файлов содержащих секретный ключ и вектор.

Для выполнения операций сложений и умножения необходимо вызвать функию 

```bash
operate(ciphertext_file1,  operation, ciphertext_file2, p name_evaluation_key_file, filename)
```

В ней необходимо указать названия двух файлов с которыми нужно выполнить операцию, далее нужно указать операцию "add", для сложения, и "mul", для умножения, далее прописываем значение p, модуля, и название файла содержащего ключ вычисления.

Последней функцией является функция расшифровки

```bash
decrypt(ciphertext_file, secret_key_file, vector_file, p)
```

В ней необходимо указать название файлов содрежащих зашифрованный текст, секретный ключ, секретный вектор и значение модуля.
