Browse Source

[Fix] Fix keypair creation method to actually create keypair...

tags/1.7.6
Vsevolod Stakhov 6 years ago
parent
commit
6d2dd994b9
1 changed files with 53 additions and 53 deletions
  1. 53
    53
      src/lua/lua_cryptobox.c

+ 53
- 53
src/lua/lua_cryptobox.c View File

@@ -328,64 +328,13 @@ lua_cryptobox_pubkey_gc (lua_State *L)
}

/***
* @function rspamd_cryptobox_keypair.load(file)
* Loads public key from UCL file
* @function rspamd_cryptobox_keypair.load(file|table)
* Loads public key from UCL file or directly from Lua
* @param {string} file filename to load
* @return {cryptobox_keypair} new keypair
*/
static gint
lua_cryptobox_keypair_load (lua_State *L)
{
struct rspamd_cryptobox_keypair *kp, **pkp;
const gchar *filename;
struct ucl_parser *parser;
ucl_object_t *obj;

filename = luaL_checkstring (L, 1);
if (filename != NULL) {
parser = ucl_parser_new (0);

if (!ucl_parser_add_file (parser, filename)) {
msg_err ("cannot open keypair from file: %s, %s",
filename,
ucl_parser_get_error (parser));
ucl_parser_free (parser);
lua_pushnil (L);
}
else {
obj = ucl_parser_get_object (parser);
kp = rspamd_keypair_from_ucl (obj);
ucl_parser_free (parser);

if (kp == NULL) {
msg_err ("cannot open keypair from file: %s",
filename);
ucl_object_unref (obj);
lua_pushnil (L);
}
else {
pkp = lua_newuserdata (L, sizeof (gpointer));
*pkp = kp;
rspamd_lua_setclass (L, "rspamd{cryptobox_keypair}", -1);
ucl_object_unref (obj);
}
}
}
else {
return luaL_error (L, "bad input arguments");
}

return 1;
}

/***
* @function rspamd_cryptobox_keypair.create(ucl_data)
* Loads public key from UCL data
* @param {string} ucl_data ucl to load
* @return {cryptobox_keypair} new keypair
*/
static gint
lua_cryptobox_keypair_create (lua_State *L)
{
struct rspamd_cryptobox_keypair *kp, **pkp;
const gchar *buf;
@@ -447,6 +396,57 @@ lua_cryptobox_keypair_create (lua_State *L)
return 1;
}

/***
* @function rspamd_cryptobox_keypair.create([type='encryption'[, alg='curve25519']])
* Generates new keypair
* @param {string} type type of keypair: 'encryption' (default) or 'sign'
* @param {string} alg algorithm of keypair: 'curve25519' (default) or 'nist'
* @return {cryptobox_keypair} new keypair
*/
static gint
lua_cryptobox_keypair_create (lua_State *L)
{
struct rspamd_cryptobox_keypair *kp, **pkp;
enum rspamd_cryptobox_keypair_type type = RSPAMD_KEYPAIR_KEX;
enum rspamd_cryptobox_mode alg = RSPAMD_CRYPTOBOX_MODE_25519;

if (lua_isstring (L, 1)) {
const gchar *str = lua_tostring (L, 1);

if (strcmp (str, "sign") == 0) {
type = RSPAMD_KEYPAIR_SIGN;
}
else if (strcmp (str, "encryption") == 0) {
type = RSPAMD_KEYPAIR_KEX;
}
else {
return luaL_error (L, "invalid keypair type: %s", str);
}
}

if (lua_isstring (L, 2)) {
const gchar *str = lua_tostring (L, 2);

if (strcmp (str, "nist") == 0 || strcmp (str, "openssl") == 0) {
alg = RSPAMD_CRYPTOBOX_MODE_NIST;
}
else if (strcmp (str, "curve25519") == 0 || strcmp (str, "default") == 0) {
alg = RSPAMD_CRYPTOBOX_MODE_25519;
}
else {
return luaL_error (L, "invalid keypair algorithm: %s", str);
}
}

kp = rspamd_keypair_new (type, alg);

pkp = lua_newuserdata (L, sizeof (gpointer));
*pkp = kp;
rspamd_lua_setclass (L, "rspamd{cryptobox_keypair}", -1);

return 1;
}

static gint
lua_cryptobox_keypair_gc (lua_State *L)
{

Loading…
Cancel
Save