From c94746703a3e0b59372b3bbf9355112c6a85d2dc Mon Sep 17 00:00:00 2001 From: Simeon Simeonov Date: Wed, 14 Mar 2018 12:18:31 +0100 Subject: Implement master password encrypted string tags --- libsylph/masterpassword.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'libsylph/masterpassword.c') diff --git a/libsylph/masterpassword.c b/libsylph/masterpassword.c index d240a7a..23e8f2f 100644 --- a/libsylph/masterpassword.c +++ b/libsylph/masterpassword.c @@ -48,6 +48,15 @@ void unload_master_password(void) { } +gint mpes_string_prefix(const gchar *str) { + + /* this function will be expanded in time as the format changes */ + if (g_str_has_prefix(str, "mpes1:")) + return 6; + return 0; + +} + gboolean master_password_active(void) { #if USE_SSL @@ -59,38 +68,40 @@ gboolean master_password_active(void) { } -gchar *decrypt_with_master_password(gchar *str) { +gchar *decrypt_with_master_password(const gchar *str) { #if USE_SSL gchar *new_str; + gint str_prefix; if ((!str) || (!master_password_active())) - return str; /* do nothing */ + return g_strdup(str); + str_prefix = mpes_string_prefix(str); if (decrypt_data(&new_str, - str, + str + str_prefix, master_password, - strlen(str)) != RC_OK) { + strlen(str) - str_prefix) != RC_OK) { OPENSSL_cleanse(new_str, strlen(new_str)); g_free(new_str); - return str; + return g_strdup(str); } return new_str; #else - return str; /* do nothing */ + return g_strdup(str); #endif } -gchar *encrypt_with_master_password(gchar *str) { +gchar *encrypt_with_master_password(const gchar *str) { #if USE_SSL gchar *new_str; gint length_encrypted; if ((!str) || (!master_password_active())) - return str; /* do nothing */ + return g_strdup(str); if (encrypt_data(&new_str, &length_encrypted, @@ -101,12 +112,12 @@ gchar *encrypt_with_master_password(gchar *str) { TRUE) != RC_OK) { OPENSSL_cleanse(new_str, strlen(new_str)); g_free(new_str); - return str; + return g_strdup(str); } return new_str; #else - return str; /* do nothing */ + return g_strdup(str); #endif } -- cgit v1.3