El código relacionado con esta cuestión está aquí: https://github.com/jchester/lua-polarssl/tree/master/srcEnvolviendo una biblioteca C para Lua: ¿cómo creo tablas anidadas de funciones?
Actualmente estoy tratando de envolver una parte de la biblioteca PolarSSL (http://polarssl.org) que me diera acceso a SHA-512 HMAC (luacrypto hace no proporcionar esto).
La API estoy apuntando para es de la forma:
a_sha512_hash = polarssl.hash.sha512('text')
o más plenamente
local polarssl = require 'polarssl'
local hash = polarssl.hash
a_sha512_hash = hash.sha512('test')
Si se refiere a polarssl.c en el enlace anterior, verá que Tiene funciones escritas que envuelven el código PolarSSL. Entonces estoy tratando de construir las tablas de funciones así:
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;
}
Dónde CORE_MOD_NAME = 'polarssl', HASH_MOD_NAME = 'polarssl.hash', HMAC_MOD_NAME = 'polarssl.hmac'.
Cuando ejecuto un script de prueba similar al código Lua en la parte superior de esta pregunta, me sale esto:
lua: test.lua:23: attempt to index global 'polarssl' (a nil value)
stack traceback:
test.lua:23: in main chunk
[C]: ?
He intentado buscar ejemplos de cómo lograr este enfoque module.submodule (por ejemplo, naim vs luasockets), pero todos parecen tener una forma diferente de lograrlo. Estoy completamente perdido.
No puedo enlazar con naim y luasockets porque alcanzo el límite de <10 puntos en los enlaces. –
Parece que el karma se entrega como deliciosos caramelos, así que actualiza la publicación con enlaces. –