Код, связанный с этим вопросом, находится здесь: https://github.com/jchester/lua-polarssl/tree/master/src
В настоящее время я пытаюсь обернуть часть библиотеки PolarSSL (http://polarssl.org), чтобы предоставить мне доступ к SHA-512 HMAC (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'.
Когда я запускаю тест script, похожий на код 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 vs luasockets), но у всех, похоже, есть другой способ его достижения. Я полностью потерян.