Python-cellframe
Contents
python-cellframe
Это библиотека, которая объединяет следующие библиотеки
- libdap-python
- libdap-crypto-python
- libdap-server-core-python
Также одной из главных задач этого модуля, является инициализация/деинициализация подключаемых библиотек.
Сборка и установка
Установка пакета с помощью PIP
Данный тип установки на данный момент не поддерживается.
Установка из исходного кода
Для установки python-cellframe. Вам необходимо python3.7, python3.7-dev scikit-build, git, cmake, make, gcc, g++.
Скачать исходный код из репозитория можно командой
$ git clone https://gitlab.demlabs.net/cellframe/python-cellframe.git
Затем необходимо перейти в директорию python-cellframe
$ cd python-cellframe
После этого необходимо обновить под модули
$ git submodule update --init --recursive
После этого можно приступать установки необходимо с правами администратора (обычно использую команду sudo)
$ python3.7 setup.py install
Инициализация
Инициализация python-cellframe происходит с помощью вызова функции init. В качестве параметра этой функции передаётся строка, которая содержит JSON. JSON обязательно должен содержать:
- массив с названием modules с перечислением названий модулей, которые нужно инициализировать, данный массив может быть пустым, если необходимо инициализировать только модуль libdap-python
- объект с названием DAP, который содержит пары ключ значений:
- config_dir - директория в которой хранятся конфигурационные файлы
- log_level - отвечает за установку уровня логирования
- application_name - отвечает за установку названия приложения
- file_name_log - отвечает за установку названия файла логов
Также JSON должен содержать название модуля и конфигурационную информацию необходимою для инициализации данного модуля.
Внимание! Модуль libdap-python должен пройти инициализацию обязательно, поэтому в JSON необходим объект DAP, а в список модулей его вносить не обязательно
Пример JSON строки, которая инициализирует библиотеку libdap-crypto-python
{ "modules": ["crypto"], "DAP": { "config_dir": \""""+os.getcwd()+"""\", "log_level": "L_DEBUG", "application_name": \""""+app_name+"""\", "file_name_log": \""""+app_name+""".text\" } }
libdap-python и python-cellframe
Данные библиотеки являются основой DAP (Deus Applicaions Prototypes). Библиотека libdap-python является обёрткой над библиотекой libdap.
Функции
- init - Предоставляет python-cellframe и данная функция производит всю работу по инициализации, принимает один параметр JSON строку.
- deinit - Предоставляет python-cellframe и данная функция производит всю работу по деинициализации, не принимает параметров.
- setLogLevel - Предоставляет libdap-python данная функция устанавливает уровень логирования, принимает на вход один параметр числовой параметр
- logIt - Выводит на экран и записывает в файл логов сообщение, принимает два параметра уровень логирования и текст
- logItDebug - Тоже что и предыдущий только уровень логирования установлен DEBUG (0).
- logItInfo - Тоже что и предыдущий только уровень логирования установлен INFO (1).
- logItNotice - Тоже что и предыдущий только уровень логирования установлен NOTICE (2).
- logItMessage - Тоже что и предыдущий только уровень логирования установлен MSG (3).
- logItDap - Тоже что и предыдущий только уровень логирования установлен DAP (4).
- logItWarning - Тоже что и предыдущий только уровень логирования установлен WARNING (5).
- logItAtt - Тоже что и предыдущий только уровень логирования установлен ATT (6).
- logItError - Тоже что и предыдущий только уровень логирования установлен ERROR (7).
- logItCritical - Тоже что и предыдущий только уровень логирования установлен CRITICAL (8).
- configGetItem - Получает данные из конфигурационного файла, принимает два входных параметра: селектор, ключ.
- configGetItemDefault - Получает данные из конфигурационного файла, принимает два входных параметра: селектор, ключ.
libdap-python-crypto
Эта библиотека является обёрткой над libdap-crypto. И предоставляет доступ к функциям libdap-crypto, через объект типа Crypto. А так же предоставляет объекты типа CryptoKeyType и CryptoDataType.
Инициализация
Для инициализации библиотеки необходимо в JSON строку, которая передаётся в качестве параметра функции инициализации модуля. Данная JSON строка в массиве modules должен содержать запись "crypto".
Типы объектов
CryptoKey
Объект типа CryptoKey - хранит в себе ключ шифрование/дешифровки, по сути является обёрткой для структуры dap_enc_key библиотеки libdap-crypto. Соответственно данный объект необходим и используется для работы алгоритмов шифрования/дешифровки.
CryptoKeyType
Объект типа CryptoKeyType - является аналогам обычного enum. И предоставляет функции для получения значений их перечисление dap_enc_key_type. Поэтому все функции, которые он предоставляет являются статическими, возвращают числовое значение и не принимают аргументов.
Название | Возвращаемое значение |
---|---|
DAP_ENC_KEY_TYPE_IAES | 0 |
DAP_ENC_KEY_TYPE_OAES | 1 |
DAP_ENC_KEY_TYPE_RLWE_NEWHOPE | 2 |
DAP_ENC_KEY_TYPE_SIDH_CLN16 | 3 |
DAP_ENC_KEY_TYPE_DEFEO | 4 |
DAP_ENC_KEY_TYPE_MSRLN | 5 |
DAP_ENC_KEY_TYPE_MSRLN16 | 6 |
DAP_ENC_KEY_TYPE_RLWE_BCNS15 | 7 |
DAP_ENC_KEY_TYPE_LWE_FRODO | 8 |
DAP_ENC_KEY_TYPE_SIDH_IQC_REF | 9 |
DAP_ENC_KEY_TYPE_CODE_MCBITS | 10 |
DAP_ENC_KEY_TYPE_NTRU | 11 |
DAP_ENC_KEY_TYPE_MLWE_KYBER | 12 |
DAP_ENC_KEY_TYPE_SIG_PICNIC | 13 |
DAP_ENC_KEY_TYPE_SIG_BLISS | 14 |
DAP_ENC_KEY_TYPE_SIG_TESLA | 15 |
DAP_ENC_KEY_TYPE_SIG_DILITHIUM | 16 |
DAP_ENC_KEY_TYPE_NULL | 0 |
CryptoDataType
Объект типа CryptoDataType - является аналогам обычного enum. И предоставляет функции для получения значений их перечисление dap_enc_data_type. Поэтому все функции, которые он предоставляет являются статическими, возвращают числовое значение и не принимают аргументов.
Название | Возвращаемое значение |
---|---|
DAP_ENC_DATA_TYPE_RAW | 0 |
DAP_ENC_DATA_TYPE_B64 | 1 |
DAP_ENC_DATA_TYPE_B64_URLSAFE | 2 |
Функции
Внимание функции отмеченные серым цветом не реализованы
libdap-python-crypto - предоставляет следующие функции
- Для работы с реализацией алгоритмам Base58
- encodeBase58 - Данная функция принимает в качестве аргумента объект типа bytes, кодирует их алгоритмам Base58 и возвращает строку.
- decodeBase58 - Данная функция принимает в качестве аргумента строку, декодирует её с помощью алгоритма Base58 и возвращает объект типа bytes.
- Для работы с реализацией алгоритмам Base64
- encodeBase64 - Данная функция принимает в качестве аргументов два параметра объект типа bytes и число от одного до двух, которое определяет тип кодируемых данных, число так же можно получить с помощью. объекта Crypto.DataType и его функций. Функция возвращает закодированные данные в виде строки.
- decodeBase64 - Данная функция принимает в качестве аргументов два параметра объект строку и число от одного до двух, которое определяет тип кодируемых данных, число так же можно получить с помощью. объекта Crypto.DataType и его функций. Функция возвращает объект типа bytes, который содержит декодированные данные.
- Для работы с ключами шифрования. Примечание: Для работы с ключами шифрования возможно придётся указывать тип этих ключей. Поэтому рекомендуется ознакомиться с объектом типа Crypto.KeyType.
- newKey - Данная функция принимает в качестве первого параметра, число обозначающая тип генерируемого ключа и возвращает объект типа CryptoKey.
- generateNewKey - Данная функция принимает на вход шесть аргументов, число - тип генерируемого ключа, объект типа bytes - kex буфер, размер данного объекта,объект типа bytes - seed, размер данного объекта, размер ключа - по умолчанию указывать 0. Функция генерирует ключ заданного типа, помещает его в объект CryptoKey и возвращает его.
- getEncSizeKey - Данная функция принимает два параметра объект CryptoKey и размер шифруемых данных. Функция возвращает размер зашифрованных данных с помощью алгоритма, к которому относиться этот ключ.
- getDecSizeKey - Данная функция принимает два параметра объект CryptoKey и размер дешифруемых данных. Функция возвращает размер дешифрованных данных с помощью алгоритма, к которому относиться этот ключ.
- Для работы с реализацией алгоритмам IAES256
- newKeyIAES - Данная функция принимает на вход объект типа CryptoKey и отвечает за добавление в него ключа IAES
- deleteKeyIAES - Данная функция принимает на вход объект типа CryptoKey и отвечает за удаление из него ключа IAES
- generateKeyIAES - Данная функция принимает на вход пять аргументов, объект типа CryptoKey, объект типа bytes, размер данного объекта,объект типа bytes, размер данного объекта. И генерирует ключ типа IAES добавляя его в объект типа CryptoKey. Второй аргумент - это kex буфер. Четвертый seed.
- encodeSizeIAES256 - Данная функция принимает на вход один числовой аргумент - размер данных, которые необходимо закодировать. И вычисляет размер, который будет содержать закодированные данные с помощью алгоритма IAES256. Соответственно функция возвращает число
- decodeSizeIAES256 - Данная функция принимает на вход один числовой аргумент - размер данных, которые необходимо декодировать. И вычисляет размер, который будет содержать декодированные данные с помощью алгоритма IAES256. Соответственно функция возвращает число
- encryptIAES256CBCFast - Данная функция принимает четыре аргумента: объект типа CryptoKey - ключ шифрования, объект типа bytes - входные данные, числовое значение - кол-во элементов в исходном объекте bytes, числовое значение - кол-во элементов в выходном объекте bytes. Данная функция кодирует входные данные и возвращает объект типа bytes, который содержит закодированные данные с помощью алгоритма IAES256.
- decryptIAES256CBCFast - Данная функция принимает четыре аргумента: объект типа CryptoKey - ключ шифрования, объект типа bytes - входные данные, числовое значение - кол-во элементов в исходном объекте bytes, числовое значение - кол-во элементов в выходном объекте bytes. Данная функция декодирует входные данные и возвращает объект типа bytes, который содержит декодированные данные с помощью алгоритма IAES256.
- Для работы с реализацией алгоритмам OAES
- newKeyOAES - Данная функция принимает на вход объект типа CryptoKey и отвечает за добавление в него ключа OAES
- deleteKeyOAES - Данная функция принимает на вход объект типа CryptoKey и отвечает за удаление из него ключа OAES
- generateKeyOAES - Данная функция принимает на вход пять аргументов, объект типа CryptoKey, объект типа bytes, размер данного объекта,объект типа bytes, размер данного объекта. И генерирует ключ типа OAES добавляя его в объект типа CryptoKey. Второй аргумент - это kex буфер. Четвертый seed.
- encodeSizeOAES - Данная функция принимает на вход один числовой аргумент - размер данных, которые необходимо закодировать. И вычисляет размер, который будет содержать закодированные данные с помощью алгоритма OAES. Соответственно функция возвращает число
- decodeSizeOAES - Данная функция принимает на вход один числовой аргумент - размер данных, которые необходимо декодировать. И вычисляет размер, который будет содержать декодированные данные с помощью алгоритма OAES. Соответственно функция возвращает число
- encryptOAESFast - Данная функция принимает четыре аргумента: объект типа CryptoKey - ключ шифрования, объект типа bytes - входные данные, числовое значение - кол-во элементов в исходном объекте bytes, числовое значение - кол-во элементов в выходном объекте bytes. Данная функция кодирует входные данные и возвращает объект типа bytes, который содержит закодированные данные с помощью алгоритма OAES.
- decryptOAESFast - Данная функция принимает четыре аргумента: объект типа CryptoKey - ключ шифрования, объект типа bytes - входные данные, числовое значение - кол-во элементов в исходном объекте bytes, числовое значение - кол-во элементов в выходном объекте bytes. Данная функция декодирует входные данные и возвращает объект типа bytes, который содержит декодированные данные с помощью алгоритма OAES.
libdap-server-core-python
libdap-server-core-python - это враппинг библиотеки libdap-server-core. Так же библиотека предоставляет некоторые объекты DapServer, Events и EventsSocket.
Инициализация
Для инициализации библиотеки необходимо в JSON строку, которая передаётся в качестве параметра функции инициализации модуля. Данная JSON строка в массиве modules должен содержать запись "ServerCore", так же JSON строка должна содержать объект "ServerCore" у которого есть два числовых поля:
- thread_cnt - Данной поле содержит количество потоков, допускаемые значение от 0.
- conn - Данной поле содержит количество подключений, допускаемые значение от 0.
Типы объектов
DapServer
Объект типа DapServer хранит в себе переменную типа dap_server_t и обеспечивает её передачу к другим функциям, которые взаимодействуют с ней.
Events
Объект типа Events хранит в себе переменную типа dap_events_t, и предоставляет следующие функции
- start - Данная функция не принимает ни каких параметров. Задача функции инициализировать и подготовить Events. Данная функция является обёрткой над функцией dap_events_start
- wait - Данная функция не принимает ни каких параметров. Задача функции начать ожидание событие. Данная функция является обёрткой над функцией dap_events_wait
- killSocket - Данная функция принимает один параметр, объект типа EventsSocket. Задача данной функции является уничтожение сокета. Данная функция является обёрткой для функции dap_events_kill_socket.
- removeAndDeleteSocket - Данная функция принимает два параметра: объект типа EventsSocket, переменную логического типа которая если истина, то наследники будут сохранены. Данная функция является обёрткой для функции dap_events_socket_remove_and_delete.
EventsSocket
Объект типа EventsSocket хранит в себе переменную типа dap_events_socket_t , и предоставляет следующие функции
- createAfter - Данная функция не принимает ни каких параметров, является обёрткой для функции dap_events_socket_create_after
- find - Данная функция принимает два параметра: число - номер сокета и объект Events, функция присваивает текущему объекту, найденный. Данная функция является обёрткой для функции dap_events_socket_find
- setReadable - Данная функция принимает в качестве аргументов, один логический параметр. И устанавливает захват сокета на чтение в состояние, которое устанавливается первом параметром
- setWritable - Данная функция принимает в качестве аргументов, один логический параметр. И устанавливает захват сокета на запись в состояние, которое устанавливается первом параметром
- write - Данная функция принимает на вход два параметр, объект bytes и количество элементов в объекте bytes. Данная функция производит запись данных в сокет. Данная функция возвращает количество записанных байт.
- writeF - Данная функция принимает на вход два параметр, строку формата данных и кортеж, данные в котором соответствуют переданному формату. Данная функция парсит принятый, кортеж в va_list и производит быструю запись в сокет, опираясь на строковую переменную описывающею формат данных и va_list. Данная функция возвращает количество записанных байт.
- read - Данная функция принимает на вход один параметр, количество читаемых байт. Данная функция производит чтение. Данная функция возвращает кортеж состоящий из количества прочитанных байт и объекта bytes.
- delete - Данная функция принимает на вход один логический параметр, который отвечает за удаляет клиента из списка, если установлен в значение истина. Данная функция производит удаление сокета.
- shringBufIn - Данная функция принимает на вход числовое значение - размер. Данная функция уменьшает размер буфера (сдвигая его влево).
Функции
libdap-server-core-python предоставляет объект ServerCore для доступа к основным функциям:
- loop - Данная функция принимает один параметр: объект типа DapServer. Данная функция запускает цикл прослушивание сервера.
- listen - Данная функция принимает три параметра: строку - адрес сервера, число - порт, число - тип сервера. Данная функция создаёт экземпляр DapServer и начните прослушивать TCP-порт с выбранным адресом.
libdap-chain-python
libdap-chain-python - это библиотека для python-cellframe, которая оборачивает libdap-chain и даёт возможность взаимодействовать с ней с помощью языка программирования Python и python-cellframe.