Код, связанный с этим вопросом, находится здесь: https://github.com / jchester / lua-polarssl / tree / master / src
В настоящее время я пытаюсь обернуть одну часть библиотеки PolarSSL (http://polarssl.org), чтобы предоставить мне доступ к HMAC SHA-512 (luacrypto не предоставьте это).
API, к которому я стремлюсь, имеет форму:
a_sha512_hash = polarssl.hash.sha512('text')
или более подробно
local polarssl = require 'polarssl'
local hash = polarssl.hash
a_sha512_hash = hash.sha512('test')
Если вы обратитесь к polarssl.c в приведенной выше ссылке, вы увидите, что я написал функции, которые являются оболочкой для кода PolarSSL. Затем я пытаюсь построить таблицы функций следующим образом:
LUA_API int luaopen_polarssl( lua_State *L ) {
static const struct luaL_Reg core[] = {
{ NULL, NULL }
};
static const struct luaL_Reg hash_functions[] = {
{ "sha512", hash_sha512 },
{ "sha384", hash_sha384 },
{ NULL, NULL }
};
static const struct luaL_Reg hmac_functions[] = {
{ "sha512", hmac_sha512 },
{ "sha384", hmac_sha384 },
{ NULL, NULL }
};
luaL_register( L, CORE_MOD_NAME, core );
luaL_register( L, HASH_MOD_NAME, hash_functions );
luaL_register( L, HMAC_MOD_NAME, hmac_functions );
return 1;
}
Где CORE_MOD_NAME = 'polarssl', HASH_MOD_NAME = 'polarssl.hash', HMAC_MOD_NAME = 'polarssl.hmac'.
Когда я запускаю тестовый сценарий, похожий на код Lua в верхней части этого вопроса, я получаю следующее:
lua: test.lua:23: attempt to index global 'polarssl' (a nil value)
stack traceback:
test.lua:23: in main chunk
[C]: ?
Я пробовал искать примеры того, как достичь этого подхода module.submodule (например, naim против luasockets ), но, похоже, у каждого есть свой способ достичь этого. Я совершенно заблудился.