Il codice relativo a questa domanda è qui: https://github.com/jchester/lua-polarssl/tree/master/srcDisposizione di una libreria C per Lua: come si creano tabelle di funzioni nidificate?
Attualmente sto cercando di avvolgere una parte della libreria PolarSSL (http://polarssl.org) per darmi l'accesso a SHA-512 HMAC (luacrypto fa non fornire questo).
L'API che sto puntando è della forma:
a_sha512_hash = polarssl.hash.sha512('text')
o più pienamente
local polarssl = require 'polarssl'
local hash = polarssl.hash
a_sha512_hash = hash.sha512('test')
Se si fa riferimento al polarssl.c nel link qui sopra, vedrete I Ho scritto funzioni che avvolgono il codice PolarSSL. Poi sto cercando di costruire le tabelle di funzione così:
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;
}
Dove CORE_MOD_NAME = 'polarssl', HASH_MOD_NAME = 'polarssl.hash', HMAC_MOD_NAME = 'polarssl.hmac'.
Quando eseguo uno script di test simile al codice Lua nella parte superiore di questa domanda, ottengo questo:
lua: test.lua:23: attempt to index global 'polarssl' (a nil value)
stack traceback:
test.lua:23: in main chunk
[C]: ?
Ho provato a cercare esempi di come raggiungere questo approccio module.submodule (es. naim vs luasockets), ma tutti sembrano avere un modo diverso di raggiungerlo. Sono completamente perso.
Non riesco a collegarmi a naim e luasockets perché ho raggiunto il limite <10 punti sui collegamenti. –
Sembra che il karma venga distribuito come deliziosi lecca lecca, quindi post aggiornato con link. –