Просмотр исходного кода

[Feature] Now cryptobox lua API accepts rspamd text as input

tags/1.3.0
Vsevolod Stakhov 8 лет назад
Родитель
Сommit
5c478aeebc
1 измененных файлов: 72 добавлений и 21 удалений
  1. 72
    21
      src/lua/lua_cryptobox.c

+ 72
- 21
src/lua/lua_cryptobox.c Просмотреть файл

@@ -217,7 +217,7 @@ lua_cryptobox_pubkey_load (lua_State *L)
}
}
else {
luaL_error (L, "bad input arguments");
return luaL_error (L, "bad input arguments");
}

return 1;
@@ -280,7 +280,7 @@ lua_cryptobox_pubkey_create (lua_State *L)

}
else {
luaL_error (L, "bad input arguments");
return luaL_error (L, "bad input arguments");
}

return 1;
@@ -343,7 +343,7 @@ lua_cryptobox_keypair_load (lua_State *L)
}
}
else {
luaL_error (L, "bad input arguments");
return luaL_error (L, "bad input arguments");
}

return 1;
@@ -527,7 +527,7 @@ lua_cryptobox_signature_save (lua_State *L)
}
}
else {
lua_pushboolean (L, FALSE);
return luaL_error (L, "invalid arguments");
}

return 1;
@@ -543,10 +543,23 @@ static gint
lua_cryptobox_signature_create (lua_State *L)
{
rspamd_fstring_t *sig, **psig;
struct rspamd_lua_text *t;
const gchar *data;
gsize dlen;

data = luaL_checklstring (L, 1, &dlen);
if (lua_isuserdata (L, 1)) {
t = lua_check_text (L, 1);

if (!t) {
return luaL_error (L, "invalid arguments");
}

data = t->start;
dlen = t->len;
}
else {
data = luaL_checklstring (L, 1, &dlen);
}

if (data != NULL) {
if (dlen == rspamd_cryptobox_signature_bytes (RSPAMD_CRYPTOBOX_MODE_25519)) {
@@ -557,7 +570,7 @@ lua_cryptobox_signature_create (lua_State *L)
}
}
else {
luaL_error (L, "bad input arguments");
return luaL_error (L, "bad input arguments");
}

return 1;
@@ -616,7 +629,7 @@ lua_cryptobox_hash_create_keyed (lua_State *L)
rspamd_lua_setclass (L, "rspamd{cryptobox_hash}", -1);
}
else {
luaL_error (L, "invalid arguments");
return luaL_error (L, "invalid arguments");
}

return 1;
@@ -632,15 +645,28 @@ lua_cryptobox_hash_update (lua_State *L)
{
rspamd_cryptobox_hash_state_t *h = lua_check_cryptobox_hash (L, 1);
const gchar *data;
struct rspamd_lua_text *t;
gsize len;

data = luaL_checklstring (L, 2, &len);
if (lua_isuserdata (L, 2)) {
t = lua_check_text (L, 2);

if (!t) {
return luaL_error (L, "invalid arguments");
}

data = t->start;
len = t->len;
}
else {
data = luaL_checklstring (L, 2, &len);
}

if (h && data) {
rspamd_cryptobox_hash_update (h, data, len);
}
else {
luaL_error (L, "invalid arguments");
return luaL_error (L, "invalid arguments");
}

return 0;
@@ -666,7 +692,7 @@ lua_cryptobox_hash_hex (lua_State *L)
lua_pushstring (L, out_hex);
}
else {
luaL_error (L, "invalid arguments");
return luaL_error (L, "invalid arguments");
}

return 1;
@@ -688,7 +714,7 @@ lua_cryptobox_hash_bin (lua_State *L)
lua_pushlstring (L, out, sizeof (out));
}
else {
luaL_error (L, "invalid arguments");
return luaL_error (L, "invalid arguments");
}

return 1;
@@ -718,13 +744,27 @@ lua_cryptobox_verify_memory (lua_State *L)
{
struct rspamd_cryptobox_pubkey *pk;
rspamd_fstring_t *signature;
struct rspamd_lua_text *t;
const gchar *data;
gsize len;
gint ret;

pk = lua_check_cryptobox_pubkey (L, 1);
signature = lua_check_cryptobox_sign (L, 2);
data = luaL_checklstring (L, 3, &len);

if (lua_isuserdata (L, 3)) {
t = lua_check_text (L, 3);

if (!t) {
return luaL_error (L, "invalid arguments");
}

data = t->start;
len = t->len;
}
else {
data = luaL_checklstring (L, 3, &len);
}

if (pk != NULL && signature != NULL && data != NULL) {
ret = rspamd_cryptobox_verify (signature->str, data, len,
@@ -738,7 +778,7 @@ lua_cryptobox_verify_memory (lua_State *L)
}
}
else {
luaL_error (L, "invalid arguments");
return luaL_error (L, "invalid arguments");
}

return 1;
@@ -780,7 +820,7 @@ lua_cryptobox_verify_file (lua_State *L)
}
}
else {
luaL_error (L, "invalid arguments");
return luaL_error (L, "invalid arguments");
}

if (map != NULL) {
@@ -802,16 +842,29 @@ lua_cryptobox_sign_memory (lua_State *L)
{
struct rspamd_cryptobox_keypair *kp;
const gchar *data;
struct rspamd_lua_text *t;
gsize len = 0;
rspamd_fstring_t *sig, **psig;

kp = lua_check_cryptobox_keypair (L, 1);
data = luaL_checklstring (L, 2, &len);

if (!kp || !data) {
luaL_error (L, "invalid arguments");
if (lua_isuserdata (L, 2)) {
t = lua_check_text (L, 2);

return 1;
if (!t) {
return luaL_error (L, "invalid arguments");
}

data = t->start;
len = t->len;
}
else {
data = luaL_checklstring (L, 2, &len);
}


if (!kp || !data) {
return luaL_error (L, "invalid arguments");
}

sig = rspamd_fstring_sized_new (rspamd_cryptobox_signature_bytes (
@@ -847,9 +900,7 @@ lua_cryptobox_sign_file (lua_State *L)
filename = luaL_checkstring (L, 2);

if (!kp || !filename) {
luaL_error (L, "invalid arguments");

return 1;
return luaL_error (L, "invalid arguments");
}

data = rspamd_file_xmap (filename, PROT_READ, &len);

Загрузка…
Отмена
Сохранить