Metadata-Version: 2.4
Name: FHEMP
Version: 0.3.1
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 FHEM=="версия"
```

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

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

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

```bash
generate_secret_key(N,p,lam,omega,delta, save_dir).
```

Для работы необходимо указать выбранные ранее параметры и путь до папки в которую они сохраняться после генерации. файлы будут иметь формат json и названия secret_key, secret_vector и evalition_key.

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

```bash
encrypt(secret_key_file, vector_file, message, N, p, lam, psi, output_file)
```

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

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

```bash
operate(ciphertext_file1, ciphertext_file2, operation, p, output_file, evaluation_key_file=None)
```

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

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

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

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