Python-cellframe

From wiki.cellframe.net
Revision as of 13:49, 2 December 2019 by Alexey.Stratulat (talk | contribs) (Добавил информацию о библиотеки libdap-chain-net-python)
Jump to navigation Jump to search

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.

libdap-chain-net-python

libdap-chain-net-python - это библиотека, цель и задачей взаимодействовать с libdap-chain-net с программами написанными на Python, посредством Python-cellframe и непосредственно libdap-chain-net-python