Интеграция C-кода в Tcl-программу |
||||
Главная | Программные продукты | Freesource программные продукты | Статьи по Tcl/Tk | Статьи | Контакт | Карта сайта | |||
|
Интеграция C-кода в Tcl-программуМне известны два способа интеграции C-кода в Tcl-программу:
В этой статье рассмотрим способ встраивания 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] |
|||||||
Copyright © Эдуард Зозуля | ||||||||