Tcl

Tk

Tcl/Tk

Статьи

Интеграция C-кода в Tcl-программу

Единая страна

Интеграция C-кода в Tcl-программу

Интеграция C-кода в Tcl-программу - doro.poltava.ua

Интеграция C-кода в Tcl-программу

Мне известны два способа интеграции C-кода в Tcl-программу:

  • С помощью библиотеки Critcl - выполняющая компиляцию посредством компилятора host машины
  • С помощью библиотеки Tcc4Tcl - выполняющего компиляцию посредством встроенного C99 компилятора

В этой статье рассмотрим способ встраивания C-кода в Tcl-программу с помощью Critcl библиотеки, на примере создания Tcl-функции AESDecrypt для декриптования данных по AES128 алгоритму ECB методом.

C-код, реализующий этот метод криптования, представлен в следующих файлах:

Для встраивания C-кода в исходный текст Tcl-программы, воспользуемся процедурой critcl::ccode библиотеки Critcl.

# Загружаем Critcl библиотеку
package require critcl

# Подключение файла aesarm.h
critcl::ccode {
  сюда помещаем содержимое файла aesarm.h
  . . .
  . . .
  . . .
}

# Подключение файла aesarm.c
critcl::ccode {
  сюда помещаем содержимое файла aesarm.c
  . . .
  . . .
  . . .
}

Для создания Tcl-процедуры по декриптованию данных, вызывающей C-код, воспользуемся процедурой critcl::ccommand библиотеки Critcl.

# Создание Tcl-процедуры AESDecrypt
critcl::ccommand AESDecrypt { dummy ip objc objv } {
  int i, dlen, klen;
  unsigned char *data, *key;
  aes_context ctx;

  if (objc != 3) {
    Tcl_WrongNumArgs(ip, 1, objv, "key data");
    return TCL_ERROR;
  }  
  
  data = Tcl_GetByteArrayFromObj(objv[2], &dlen);
  key = Tcl_GetByteArrayFromObj(objv[1], &klen);

  Tcl_Obj *result = Tcl_NewObj();
  unsigned char *output = Tcl_SetByteArrayLength(result, dlen);
  
  aes_setkey_dec(&ctx, key, 128);
  for(i=0;i<(dlen>>4);i++) aes_crypt_ecb(&ctx, (int) AES_DECRYPT, data+(i<<4), output+(i<<4));

  Tcl_SetObjResult(ip, result);
  return TCL_OK;
}

# Вызов процедуры AESDecrypt из Tcl-кода
set decryptedData [AESDecrypt $myKey $myEncryptedData]



Главная
Программные продукты
Freesource программные продукты
Статьи
Контакт
GPSMTA - GPS трекер / GPS мониторинг для Android
GPSM - программно-аппаратный комплекс GPS мониторинга
MapTour - GPS навигация для Туристов
MapSurfing - просмотрщик географических карт
DGraf - визуализация графов
ViCer - домашняя система видеонаблюдения
FPS - бесплатная система GPS мониторинга
Jeans - Финансово-складской учёт
Cerber - Финансовый учёт игорного зала
Visimap - Визуальная карта
BIB - Картотека книг
2DO - Учёт рабочего времени
Выписка - склад
Расчёт зарплаты
Krp - визуализатор связанных структур
Xboat - проэктировщик малых судов
XSQLite - visualisator DB SQLite
Текстовый редактор XEdJ
Copyright © Эдуард Зозуля
Проверка PR и ТИЦ