Add sha1 to lua utils. (#6563)
parent
a95e0d1876
commit
65c5539035
|
@ -630,6 +630,9 @@ Minetest namespace reference
|
||||||
version entirely. To check for the presence of engine features, test
|
version entirely. To check for the presence of engine features, test
|
||||||
whether the functions exported by the wanted features exist. For example:
|
whether the functions exported by the wanted features exist. For example:
|
||||||
`if minetest.check_for_falling then ... end`.
|
`if minetest.check_for_falling then ... end`.
|
||||||
|
* `minetest.sha1(data, [raw])`: returns the sha1 hash of data
|
||||||
|
* `data`: string of data to hash
|
||||||
|
* `raw`: return raw bytes instead of hex digits, default: false
|
||||||
|
|
||||||
### Logging
|
### Logging
|
||||||
* `minetest.debug(...)`
|
* `minetest.debug(...)`
|
||||||
|
|
|
@ -2391,6 +2391,9 @@ Strings that need to be translated can contain several escapes, preceded by `@`.
|
||||||
version entirely. To check for the presence of engine features, test
|
version entirely. To check for the presence of engine features, test
|
||||||
whether the functions exported by the wanted features exist. For example:
|
whether the functions exported by the wanted features exist. For example:
|
||||||
`if minetest.check_for_falling then ... end`.
|
`if minetest.check_for_falling then ... end`.
|
||||||
|
* `minetest.sha1(data, [raw])`: returns the sha1 hash of data
|
||||||
|
* `data`: string of data to hash
|
||||||
|
* `raw`: return raw bytes instead of hex digits, default: false
|
||||||
|
|
||||||
### Logging
|
### Logging
|
||||||
* `minetest.debug(...)`
|
* `minetest.debug(...)`
|
||||||
|
|
|
@ -37,6 +37,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
#include "util/base64.h"
|
#include "util/base64.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
#include "util/hex.h"
|
||||||
|
#include "util/sha1.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
|
||||||
|
@ -423,6 +425,32 @@ int ModApiUtil::l_get_version(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ModApiUtil::l_sha1(lua_State *L)
|
||||||
|
{
|
||||||
|
NO_MAP_LOCK_REQUIRED;
|
||||||
|
size_t size;
|
||||||
|
const char *data = luaL_checklstring(L, 1, &size);
|
||||||
|
bool hex = !lua_isboolean(L, 2) || !lua_toboolean(L, 2);
|
||||||
|
|
||||||
|
// Compute actual checksum of data
|
||||||
|
std::string data_sha1;
|
||||||
|
{
|
||||||
|
SHA1 ctx;
|
||||||
|
ctx.addBytes(data, size);
|
||||||
|
unsigned char *data_tmpdigest = ctx.getDigest();
|
||||||
|
data_sha1.assign((char*) data_tmpdigest, 20);
|
||||||
|
free(data_tmpdigest);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hex) {
|
||||||
|
std::string sha1_hex = hex_encode(data_sha1);
|
||||||
|
lua_pushstring(L, sha1_hex.c_str());
|
||||||
|
} else {
|
||||||
|
lua_pushlstring(L, data_sha1.data(), data_sha1.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void ModApiUtil::Initialize(lua_State *L, int top)
|
void ModApiUtil::Initialize(lua_State *L, int top)
|
||||||
{
|
{
|
||||||
|
@ -455,6 +483,7 @@ void ModApiUtil::Initialize(lua_State *L, int top)
|
||||||
API_FCT(decode_base64);
|
API_FCT(decode_base64);
|
||||||
|
|
||||||
API_FCT(get_version);
|
API_FCT(get_version);
|
||||||
|
API_FCT(sha1);
|
||||||
|
|
||||||
LuaSettings::create(L, g_settings, g_settings_path);
|
LuaSettings::create(L, g_settings, g_settings_path);
|
||||||
lua_setfield(L, top, "settings");
|
lua_setfield(L, top, "settings");
|
||||||
|
@ -478,6 +507,7 @@ void ModApiUtil::InitializeClient(lua_State *L, int top)
|
||||||
API_FCT(decode_base64);
|
API_FCT(decode_base64);
|
||||||
|
|
||||||
API_FCT(get_version);
|
API_FCT(get_version);
|
||||||
|
API_FCT(sha1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModApiUtil::InitializeAsync(lua_State *L, int top)
|
void ModApiUtil::InitializeAsync(lua_State *L, int top)
|
||||||
|
@ -503,6 +533,7 @@ void ModApiUtil::InitializeAsync(lua_State *L, int top)
|
||||||
API_FCT(decode_base64);
|
API_FCT(decode_base64);
|
||||||
|
|
||||||
API_FCT(get_version);
|
API_FCT(get_version);
|
||||||
|
API_FCT(sha1);
|
||||||
|
|
||||||
LuaSettings::create(L, g_settings, g_settings_path);
|
LuaSettings::create(L, g_settings, g_settings_path);
|
||||||
lua_setfield(L, top, "settings");
|
lua_setfield(L, top, "settings");
|
||||||
|
|
|
@ -92,6 +92,9 @@ private:
|
||||||
// get_version()
|
// get_version()
|
||||||
static int l_get_version(lua_State *L);
|
static int l_get_version(lua_State *L);
|
||||||
|
|
||||||
|
// sha1(string, raw)
|
||||||
|
static int l_sha1(lua_State *L);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void Initialize(lua_State *L, int top);
|
static void Initialize(lua_State *L, int top);
|
||||||
static void InitializeAsync(lua_State *L, int top);
|
static void InitializeAsync(lua_State *L, int top);
|
||||||
|
|
Loading…
Reference in New Issue