diff --git a/Makefile.am b/Makefile.am index c1784f32..226f9bad 100644 --- a/Makefile.am +++ b/Makefile.am @@ -69,6 +69,7 @@ unittest_sources = \ src/ui/ui.h \ src/otr/otr.h \ src/pgp/gpg.h \ + src/omemo/omemo.h \ src/command/cmd_defs.h src/command/cmd_defs.c \ src/command/cmd_funcs.h src/command/cmd_funcs.c \ src/command/cmd_ac.h src/command/cmd_ac.c \ @@ -168,6 +169,9 @@ otr3_sources = \ otr4_sources = \ src/otr/otrlib.h src/otr/otrlibv4.c src/otr/otr.h src/otr/otr.c +omemo_sources = \ + src/omemo/omemo.h src/omemo/omemo.c + if BUILD_PYTHON_API core_sources += $(python_sources) unittest_sources += $(python_sources) @@ -204,6 +208,10 @@ core_sources += $(otr4_sources) endif endif +if BUILD_OMEMO +core_sources += $(omemo_sources) +endif + AM_CFLAGS = @AM_CFLAGS@ -I$(srcdir)/src bin_PROGRAMS = profanity diff --git a/configure.ac b/configure.ac index 0b8e4512..9cce9840 100644 --- a/configure.ac +++ b/configure.ac @@ -60,6 +60,8 @@ AC_ARG_ENABLE([otr], [AS_HELP_STRING([--enable-otr], [enable otr encryption])]) AC_ARG_ENABLE([pgp], [AS_HELP_STRING([--enable-pgp], [enable pgp])]) +AC_ARG_ENABLE([omemo], + [AS_HELP_STRING([--enable-omemo], [enable omemo encryption])]) AC_ARG_WITH([xscreensaver], [AS_HELP_STRING([--with-xscreensaver], [use libXScrnSaver to determine idle time])]) AC_ARG_WITH([themes], @@ -264,6 +266,17 @@ if test "x$enable_otr" != xno; then [AC_MSG_NOTICE([libotr not found, otr encryption support not enabled])])]) fi +AM_CONDITIONAL([BUILD_OMEMO], [false]) +if test "x$enable_omemo" != xno; then + AC_CHECK_LIB([signal-protocol-c], [signal_context_create], + [AM_CONDITIONAL([BUILD_OMEMO], [true]) + AC_DEFINE([HAVE_LIBSIGNAL_PROTOCOL], [1], [Have omemo]), + LIBS="-lsignal-protocol-c $LIBS"], + [AS_IF([test "x$enable_omemo" = xyes], + [AC_MSG_ERROR([libsignal-protocol-c is required for omemo support])], + [AC_MSG_NOTICE([libsignal-protocol-c not found, omemo support not enabled])])]) +fi + AS_IF([test "x$with_themes" = xno], [THEMES_INSTALL="false"], [THEMES_INSTALL="true"]) diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index 4447020b..23ab2ebf 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -2328,7 +2328,25 @@ static struct cmd_t command_defs[] = CMD_EXAMPLES( "/cmd list", "/cmd exec ping") - } + }, + + { "/omemo", + parse_args, 1, 3, NULL, + CMD_SUBFUNCS( + { "init", cmd_omemo_init }) + CMD_NOMAINFUNC + CMD_TAGS( + CMD_TAG_CHAT, + CMD_TAG_UI) + CMD_SYN( + "/omemo init") + CMD_DESC( + "Omemo commands to manage keys, and perform encryption during chat sessions.") + CMD_ARGS( + { "init", "Initialize omemo" }) + CMD_EXAMPLES( + "/omemo init") + }, }; static GHashTable *search_index; diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index b2f0ee7f..97ce2025 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -85,6 +85,10 @@ #include "pgp/gpg.h" #endif +#ifdef HAVE_LIBSIGNAL_PROTOCOL +#include "omemo/omemo.h" +#endif + #ifdef HAVE_GTK #include "ui/tray.h" #endif @@ -7872,3 +7876,22 @@ _cmd_set_boolean_preference(gchar *arg, const char *const command, g_string_free(enabled, TRUE); g_string_free(disabled, TRUE); } + +gboolean +cmd_omemo_init(ProfWin *window, const char *const command, gchar **args) +{ +#ifdef HAVE_LIBSIGNAL_PROTOCOL + if (connection_get_status() != JABBER_CONNECTED) { + cons_show("You must be connected with an account to initialize omemo"); + return TRUE; + } + + ProfAccount *account = accounts_get_account(session_get_account_name()); + omemo_init(account); + cons_show("Initialized omemo"); + return TRUE; +#else + cons_show("This version of Profanity has not been built with Omemo support enabled"); + return TRUE; +#endif +} diff --git a/src/command/cmd_funcs.h b/src/command/cmd_funcs.h index 89166ba1..fb81721d 100644 --- a/src/command/cmd_funcs.h +++ b/src/command/cmd_funcs.h @@ -214,4 +214,6 @@ gboolean cmd_wins_swap(ProfWin *window, const char *const command, gchar **args) gboolean cmd_form_field(ProfWin *window, char *tag, gchar **args); +gboolean cmd_omemo_init(ProfWin *window, const char *const command, gchar **args); + #endif diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c new file mode 100644 index 00000000..a0da5639 --- /dev/null +++ b/src/omemo/omemo.c @@ -0,0 +1,10 @@ +#include + +#include "config/account.h" + +void +omemo_init(ProfAccount *account) +{ + signal_context *global_context; + signal_context_create(&global_context, NULL); +}