bring in Simon Schubert's general GPG clean up patch
authorAlfons Hoogervorst <alfons@proteus.demon.nl>
Tue, 8 Jan 2002 19:50:20 +0000 (19:50 +0000)
committerAlfons Hoogervorst <alfons@proteus.demon.nl>
Tue, 8 Jan 2002 19:50:20 +0000 (19:50 +0000)
AUTHORS
ChangeLog.claws
src/compose.c
src/prefs_account.c
src/prefs_account.h
src/prefs_common.c
src/prefs_common.h
src/rfc2015.c
src/rfc2015.h

diff --git a/AUTHORS b/AUTHORS
index 28cc516..4100ba8 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -103,3 +103,4 @@ contributors (beside the above; based on Changelog)
        Martin Pool
        Fredrik Olofsen
        Gustavo Noronha Silva
+       Simon 'corecode' Schubert
index 5515df7..f9ef1de 100644 (file)
@@ -7,7 +7,16 @@
                bring in Hiro's last 0.7.0 wm class fixes
 
        * tools/sylprint.pl
-               bring in Ricardo's fix for sylprint script 
+               bring in Ricardo's fix for sylprint script
+
+       * AUTHORS       
+       * src/rfc2015.[ch]
+       * src/prefs_common.[ch]
+       * src/prefs_account.[ch]
+       * src/compose.c
+               clean up account preference poison in rfc2015,
+               and preparation to fix double sign bug 
+               (patch submitted by Simon 'corecode' Schubert) 
 
 2002-01-07 [christoph] 0.6.6claws43
 
index 5332fa4..b6082f6 100644 (file)
@@ -2857,6 +2857,46 @@ static gint compose_bounce_write_to_file(Compose *compose, const gchar *file)
        return -1;
 }
 
+
+#ifdef USE_GPGME
+/*
+ * interfaces to rfc2015 to keep out the prefs stuff there.
+ * returns 0 on success and -1 on error. */
+static int compose_create_signers_list (Compose *compose, GSList **pkey_list)
+{
+       const char *keyid = NULL;
+       GSList *key_list;
+
+       switch (compose->account->sign_key) {
+       case SIGN_KEY_DEFAULT:
+               *pkey_list = NULL;
+               return 0;               /* nothing to do */
+
+       case SIGN_KEY_BY_FROM:
+               keyid = compose->account->address;
+               break;
+
+       case SIGN_KEY_CUSTOM:
+               keyid = compose->account->sign_key_id;
+               break;
+
+       default:
+               g_assert_not_reached ();
+       }
+
+       key_list = rfc2015_create_signers_list(keyid);
+
+       if (!key_list) {
+           alertpanel_error("Could not find any key associated with currently "
+                               "selected keyid `%s'!", keyid);
+           return -1;
+       }
+       
+       *pkey_list = key_list;
+       return 0;
+}
+#endif /* USE_GPGME */
+
 static gint compose_write_to_file(Compose *compose, const gchar *file,
                                  gboolean is_draft)
 {
@@ -2972,13 +3012,17 @@ static gint compose_write_to_file(Compose *compose, const gchar *file,
 
 #if USE_GPGME
        if (compose->use_signing) {
-               if (rfc2015_sign(file, compose->account) < 0) {
+               GSList *key_list;
+               
+               if (compose_create_signers_list(compose, &key_list) == -1 ||
+                       rfc2015_sign(file, key_list) < 0) {
+                   
                        unlink(file);
                        return -1;
                }
        }
        if (compose->use_encryption) {
-               if (rfc2015_encrypt(file, compose->to_list) < 0) {
+               if (rfc2015_encrypt(file, compose->to_list, compose->account->ascii_armored) < 0) {
                        unlink(file);
                        return -1;
                }
@@ -4555,10 +4599,10 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
 #if USE_GPGME
        menuitem = gtk_item_factory_get_item(ifactory, "/Message/Sign");
        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
-                                      prefs_common.default_sign);
+                                      account->default_sign);
        menuitem = gtk_item_factory_get_item(ifactory, "/Message/Encrypt");
        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
-                                      prefs_common.default_encrypt);
+                                      account->default_encrypt);
 #endif /* USE_GPGME */
 
        addressbook_set_target_compose(compose);
index dffb3e7..da15a4c 100644 (file)
@@ -121,6 +121,9 @@ static struct Compose {
 
 #if USE_GPGME
 static struct Privacy {
+       GtkWidget *checkbtn_default_encrypt;
+       GtkWidget *checkbtn_ascii_armored;
+       GtkWidget *checkbtn_default_sign;
        GtkWidget *defaultkey_radiobtn;
        GtkWidget *emailkey_radiobtn;
        GtkWidget *customkey_radiobtn;
@@ -167,6 +170,8 @@ static void prefs_account_protocol_activated                (GtkMenuItem *menuitem);
 #if USE_GPGME || USE_SSL
 static void prefs_account_enum_set_data_from_radiobtn  (PrefParam *pparam);
 static void prefs_account_enum_set_radiobtn            (PrefParam *pparam);
+static void prefs_account_ascii_armored_warning(GtkWidget* widget, 
+                                              gpointer unused);
 #endif /* USE_GPGME || USE_SSL */
 
 static void prefs_account_nntpauth_toggled(GtkToggleButton *button,
@@ -307,6 +312,15 @@ static PrefParam param[] = {
 
 #if USE_GPGME
        /* Privacy */
+       {"default_encrypt", "FALSE", &tmp_ac_prefs.default_encrypt, P_BOOL,
+        &privacy.checkbtn_default_encrypt,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+       {"ascii_armored", "FALSE", &tmp_ac_prefs.ascii_armored, P_BOOL,
+        &privacy.checkbtn_ascii_armored,
+        prefs_set_data_from_toggle, prefs_set_toggle},
+       {"default_sign", "FALSE", &tmp_ac_prefs.default_sign, P_BOOL,
+        &privacy.checkbtn_default_sign,
+        prefs_set_data_from_toggle, prefs_set_toggle},
        {"sign_key", NULL, &tmp_ac_prefs.sign_key, P_ENUM,
         &privacy.defaultkey_radiobtn,
         prefs_account_enum_set_data_from_radiobtn,
@@ -1244,8 +1258,13 @@ static void prefs_account_privacy_create(void)
        GtkWidget *vbox1;
        GtkWidget *frame1;
        GtkWidget *vbox2;
+       GtkWidget *frame2;
+       GtkWidget *vbox3;
        GtkWidget *hbox1;
        GtkWidget *label;
+       GtkWidget *checkbtn_default_encrypt;
+       GtkWidget *checkbtn_ascii_armored;
+       GtkWidget *checkbtn_default_sign;
        GtkWidget *defaultkey_radiobtn;
        GtkWidget *emailkey_radiobtn;
        GtkWidget *customkey_radiobtn;
@@ -1256,17 +1275,35 @@ static void prefs_account_privacy_create(void)
        gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
 
-       PACK_FRAME (vbox1, frame1, _("Sign key"));
+       PACK_FRAME (vbox1, frame1, _("Default Actions"));
 
-       vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
+       vbox2 = gtk_vbox_new (FALSE, 0);
        gtk_widget_show (vbox2);
        gtk_container_add (GTK_CONTAINER (frame1), vbox2);
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
 
+       PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
+                          _("Encrypt message by default"));
+
+       PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
+                          _("Plain ASCII armored"));
+       gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
+                               prefs_account_ascii_armored_warning, (gpointer)0);
+
+       PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
+                          _("Sign message by default"));
+
+       PACK_FRAME (vbox1, frame2, _("Sign key"));
+
+       vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW);
+       gtk_widget_show (vbox3);
+       gtk_container_add (GTK_CONTAINER (frame2), vbox3);
+       gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
+
        defaultkey_radiobtn = gtk_radio_button_new_with_label
                (NULL, _("Use default GnuPG key"));
        gtk_widget_show (defaultkey_radiobtn);
-       gtk_box_pack_start (GTK_BOX (vbox2), defaultkey_radiobtn,
+       gtk_box_pack_start (GTK_BOX (vbox3), defaultkey_radiobtn,
                            FALSE, FALSE, 0);
        gtk_object_set_user_data (GTK_OBJECT (defaultkey_radiobtn),
                                  GINT_TO_POINTER (SIGN_KEY_DEFAULT));
@@ -1275,7 +1312,7 @@ static void prefs_account_privacy_create(void)
                (GTK_RADIO_BUTTON (defaultkey_radiobtn),
                 _("Select key by your email address"));
        gtk_widget_show (emailkey_radiobtn);
-       gtk_box_pack_start (GTK_BOX (vbox2), emailkey_radiobtn,
+       gtk_box_pack_start (GTK_BOX (vbox3), emailkey_radiobtn,
                            FALSE, FALSE, 0);
        gtk_object_set_user_data (GTK_OBJECT (emailkey_radiobtn),
                                  GINT_TO_POINTER (SIGN_KEY_BY_FROM));
@@ -1284,14 +1321,14 @@ static void prefs_account_privacy_create(void)
                (GTK_RADIO_BUTTON (defaultkey_radiobtn),
                 _("Specify key manually"));
        gtk_widget_show (customkey_radiobtn);
-       gtk_box_pack_start (GTK_BOX (vbox2), customkey_radiobtn,
+       gtk_box_pack_start (GTK_BOX (vbox3), customkey_radiobtn,
                            FALSE, FALSE, 0);
        gtk_object_set_user_data (GTK_OBJECT (customkey_radiobtn),
                                  GINT_TO_POINTER (SIGN_KEY_CUSTOM));
 
        hbox1 = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox1);
-       gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
 
        label = gtk_label_new ("");
        gtk_widget_show (label);
@@ -1309,11 +1346,26 @@ static void prefs_account_privacy_create(void)
 
        SET_TOGGLE_SENSITIVITY (customkey_radiobtn, customkey_entry);
 
+       privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
+       privacy.checkbtn_ascii_armored   = checkbtn_ascii_armored;
+       privacy.checkbtn_default_sign    = checkbtn_default_sign;
        privacy.defaultkey_radiobtn = defaultkey_radiobtn;
        privacy.emailkey_radiobtn = emailkey_radiobtn;
        privacy.customkey_radiobtn = customkey_radiobtn;
        privacy.customkey_entry = customkey_entry;
 }
+
+static void prefs_account_ascii_armored_warning(GtkWidget* widget,
+                                              gpointer unused)
+{
+       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
+               && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
+               alertpanel_message(_("Warning - Privacy/Plain ASCII armored"),
+                       _("Its not recommend to use the old style plain ASCII\n"
+                       "armored mode for encypted messages. It doesn't comply\n"
+                       "with the RFC 3156 - MIME security with OpenPGP."));
+       }
+}
 #endif /* USE_GPGME */
 
 #if USE_SSL
index 20e9370..f317d3f 100644 (file)
@@ -30,6 +30,10 @@ typedef struct _PrefsAccount PrefsAccount;
 
 #include "folder.h"
 
+#ifdef USE_GPGME
+#  include "rfc2015.h"
+#endif
+
 typedef enum {
        A_POP3,
        A_APOP,
@@ -119,6 +123,9 @@ struct _PrefsAccount
 
 #if USE_GPGME
        /* Privacy */
+       gboolean default_encrypt;
+       gboolean ascii_armored;
+       gboolean default_sign;
        SignKeyType sign_key;
        gchar *sign_key_id;
 #endif /* USE_GPGME */
index 1dbba1d..8a586d8 100644 (file)
@@ -181,9 +181,6 @@ static struct Message {
 
 #if USE_GPGME
 static struct Privacy {
-       GtkWidget *checkbtn_default_encrypt;
-        GtkWidget *checkbtn_ascii_armored;
-       GtkWidget *checkbtn_default_sign;
        GtkWidget *checkbtn_auto_check_signatures;
        GtkWidget *checkbtn_gpg_signature_popup;
        GtkWidget *checkbtn_passphrase_grab;
@@ -235,8 +232,6 @@ static void prefs_common_charset_set_optmenu              (PrefParam *pparam);
 static void prefs_common_default_signkey_set_data_from_optmenu
                                                        (PrefParam *pparam);
 static void prefs_common_default_signkey_set_optmenu   (PrefParam *pparam);
-static void prefs_common_ascii_armored_warning(GtkWidget* widget, 
-                                              gpointer unused);
 #endif
 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
@@ -627,15 +622,6 @@ static PrefParam param[] = {
 
 #if USE_GPGME
        /* Privacy */
-       {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
-        &privacy.checkbtn_default_encrypt,
-        prefs_set_data_from_toggle, prefs_set_toggle},
-       {"ascii_armored", "FALSE", &prefs_common.ascii_armored, P_BOOL,
-        &privacy.checkbtn_ascii_armored,
-        prefs_set_data_from_toggle, prefs_set_toggle},
-       {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
-        &privacy.checkbtn_default_sign,
-        prefs_set_data_from_toggle, prefs_set_toggle},
        {"auto_check_signatures", "TRUE",
         &prefs_common.auto_check_signatures, P_BOOL,
         &privacy.checkbtn_auto_check_signatures,
@@ -2216,9 +2202,6 @@ static void prefs_privacy_create(void)
        GtkWidget *vbox1;
        GtkWidget *vbox2;
        GtkWidget *hbox1;
-       GtkWidget *checkbtn_default_encrypt;
-        GtkWidget *checkbtn_ascii_armored;
-       GtkWidget *checkbtn_default_sign;
        GtkWidget *checkbtn_auto_check_signatures;
        GtkWidget *checkbtn_gpg_signature_popup;
        GtkWidget *checkbtn_passphrase_grab;
@@ -2237,17 +2220,6 @@ static void prefs_privacy_create(void)
        gtk_widget_show (vbox2);
        gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
 
-       PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
-                          _("Encrypt message by default"));
-
-       PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
-                          _("Plain ASCII armored"));
-       gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
-                               prefs_common_ascii_armored_warning, (gpointer)0);
-
-       PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
-                          _("Sign message by default"));
-
        PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
                           _("Automatically check signatures"));
 
@@ -2282,9 +2254,6 @@ static void prefs_privacy_create(void)
        /* FIXME: disabled because not implemented */
        gtk_widget_set_sensitive(optmenu, FALSE);
 
-       privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
-        privacy.checkbtn_ascii_armored   = checkbtn_ascii_armored;
-       privacy.checkbtn_default_sign    = checkbtn_default_sign;
        privacy.checkbtn_auto_check_signatures
                                         = checkbtn_auto_check_signatures;
        privacy.checkbtn_gpg_signature_popup
@@ -2339,18 +2308,6 @@ static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
        prefs_common_charset_set_data_from_optmenu(pparam);
 #endif
 }
-
-static void prefs_common_ascii_armored_warning(GtkWidget* widget,
-                                              gpointer unused)
-{
-       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
-               && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
-               alertpanel_message(_("Warning - Privacy/Plain ASCII armored"),
-                       _("Its not recommend to use the old style plain ASCII\n"
-                       "armored mode for encypted messages. It doesn't comply\n"
-                       "with the RFC 3156 - MIME security with OpenPGP."));
-       }
-}
 #endif /* USE_GPGME */
 
 static void prefs_interface_create(void)
index 7308a7a..d268f7d 100644 (file)
@@ -185,15 +185,14 @@ struct _PrefsCommon
 
        GList *mime_open_cmd_history;
 
+#if USE_GPGME 
        /* Privacy */
-       gboolean default_encrypt;
-       gboolean ascii_armored;
-       gboolean default_sign;
        gboolean auto_check_signatures;
        gboolean gpg_signature_popup;
        gboolean passphrase_grab;
        gchar *default_signkey;
        gboolean gpg_warning;
+#endif /* USE_GPGME */
 
        /* Interface */
        gboolean sep_folder;
index 80ed4d5..27e6c1c 100644 (file)
@@ -677,13 +677,52 @@ pgp_encrypt ( GpgmeData plain, GpgmeRecipients rset )
     return cipher;
 }
 
+/*
+ * Create and return a list of keys matching a key id
+ */
+
+GSList *rfc2015_create_signers_list (const char *keyid)
+{
+       GSList *key_list = NULL;
+       GpgmeCtx list_ctx = NULL;
+       GSList *p;
+       GpgmeError err;
+       GpgmeKey key;
+
+       err = gpgme_new (&list_ctx);
+       if (err)
+               goto leave;
+       err = gpgme_op_keylist_start (list_ctx, keyid, 1);
+       if (err)
+               goto leave;
+       while ( !(err = gpgme_op_keylist_next (list_ctx, &key)) ) {
+               key_list = g_slist_append (key_list, key);
+       }
+       if (err != GPGME_EOF)
+               goto leave;
+       err = 0;
+       if (key_list == NULL) {
+               debug_print ("no keys found for keyid \"%s\"\n", keyid);
+       }
+
+leave:
+       if (err) {
+               debug_print ("rfc2015_create_signers_list failed: %s\n", gpgme_strerror (err));
+               for (p = key_list; p != NULL; p = p->next)
+                       gpgme_key_unref ((GpgmeKey) p->data);
+               g_slist_free (key_list);
+       }
+       if (list_ctx)
+               gpgme_release (list_ctx);
+       return err ? NULL : key_list;
+}
 
 /*
  * Encrypt the file by extracting all recipients and finding the
  * encryption keys for all of them.  The file content is then replaced
  * by the encrypted one.  */
 int
-rfc2015_encrypt (const char *file, GSList *recp_list)
+rfc2015_encrypt (const char *file, GSList *recp_list, gboolean ascii_armored)
 {
     FILE *fp = NULL;
     char buf[BUFFSIZE];
@@ -822,7 +861,7 @@ rfc2015_encrypt (const char *file, GSList *recp_list)
     if (!mime_version_seen) 
         fputs ("MIME-Version: 1\r\n", fp);
 
-    if (prefs_common.ascii_armored) {
+    if (ascii_armored) {
         fprintf(fp, 
             "Content-Type: text/plain; charset=us-ascii\r\n"
             "Content-Transfer-Encoding: 7bit\r\n"  
@@ -861,7 +900,7 @@ rfc2015_encrypt (const char *file, GSList *recp_list)
     }
 
     /* and the final boundary */
-    if (!prefs_common.ascii_armored) {
+    if (!ascii_armored) {
         fprintf (fp,
                "\r\n"
                "--%s--\r\n"
@@ -888,74 +927,14 @@ failure:
     return -1; /* error */
 }
 
-int
-set_signers (GpgmeCtx ctx, PrefsAccount *ac)
-{
-    GSList *key_list = NULL;
-    GpgmeCtx list_ctx = NULL;
-    const char *keyid = NULL;
-    GSList *p;
-    GpgmeError err;
-    GpgmeKey key;
-
-    if (ac == NULL)
-       return 0;
-
-    switch (ac->sign_key) {
-    case SIGN_KEY_DEFAULT:
-       return 0;               /* nothing to do */
-
-    case SIGN_KEY_BY_FROM:
-       keyid = ac->address;
-       break;
-
-    case SIGN_KEY_CUSTOM:
-       keyid = ac->sign_key_id;
-       break;
-
-    default:
-       g_assert_not_reached ();
-    }
-
-    err = gpgme_new (&list_ctx);
-    if (err)
-       goto leave;
-    err = gpgme_op_keylist_start (list_ctx, keyid, 1);
-    if (err)
-       goto leave;
-    while ( !(err = gpgme_op_keylist_next (list_ctx, &key)) ) {
-       key_list = g_slist_append (key_list, key);
-    }
-    if (err != GPGME_EOF)
-       goto leave;
-    if (key_list == NULL) {
-       debug_print ("no keys found for keyid \"%s\"\n", keyid);
-    }
-    gpgme_signers_clear (ctx);
-    for (p = key_list; p != NULL; p = p->next) {
-       err = gpgme_signers_add (ctx, (GpgmeKey) p->data);
-       if (err)
-           goto leave;
-    }
-
-leave:
-    if (err)
-        debug_print ("set_signers failed: %s\n", gpgme_strerror (err));
-    for (p = key_list; p != NULL; p = p->next)
-       gpgme_key_unref ((GpgmeKey) p->data);
-    g_slist_free (key_list);
-    if (list_ctx)
-       gpgme_release (list_ctx);
-    return err;
-}
-
 /* 
  * plain contains an entire mime object.  Sign it and return an
  * GpgmeData object with the signature of it or NULL in case of error.
  */
 static GpgmeData
-pgp_sign (GpgmeData plain, PrefsAccount *ac)
+pgp_sign (GpgmeData plain, GSList *key_list)
 {
+    GSList *p;
     GpgmeCtx ctx = NULL;
     GpgmeError err;
     GpgmeData sig = NULL;
@@ -976,7 +955,16 @@ pgp_sign (GpgmeData plain, PrefsAccount *ac)
     }
     gpgme_set_textmode (ctx, 1);
     gpgme_set_armor (ctx, 1);
-    err = set_signers (ctx, ac);
+    gpgme_signers_clear (ctx);
+    for (p = key_list; p != NULL; p = p->next) {
+       err = gpgme_signers_add (ctx, (GpgmeKey) p->data);
+       if (err)
+           goto leave;
+    }
+    for (p = key_list; p != NULL; p = p->next)
+       gpgme_key_unref ((GpgmeKey) p->data);
+    g_slist_free (key_list);
+
     if (err)
        goto leave;
     err = gpgme_op_sign (ctx, plain, sig, GPGME_SIG_MODE_DETACH);
@@ -999,7 +987,7 @@ leave:
  * Sign the file and replace its content with the signed one.
  */
 int
-rfc2015_sign (const char *file, PrefsAccount *ac)
+rfc2015_sign (const char *file, GSList *key_list)
 {
     FILE *fp = NULL;
     char buf[BUFFSIZE];
@@ -1081,7 +1069,7 @@ rfc2015_sign (const char *file, PrefsAccount *ac)
         goto failure;
     }
 
-    sigdata = pgp_sign (plain, ac);
+    sigdata = pgp_sign (plain, key_list);
     if (!sigdata) 
         goto failure;
 
index d9ebb9c..5dd6dff 100644 (file)
@@ -24,7 +24,6 @@
 #include <stdio.h>
 
 #include "procmime.h"
-#include "prefs_account.h"
 
 void rfc2015_disable_all (void);
 void rfc2015_secure_remove (const char *fname);
@@ -33,7 +32,8 @@ gboolean rfc2015_has_signature (MimeInfo *mimeinfo);
 void rfc2015_check_signature (MimeInfo *mimeinfo, FILE *fp);
 int rfc2015_is_encrypted (MimeInfo *mimeinfo);
 void rfc2015_decrypt_message (MsgInfo *msginfo, MimeInfo *mimeinfo, FILE *fp);
-int rfc2015_encrypt (const char *file, GSList *recp_list);
-int rfc2015_sign (const char *file, PrefsAccount *ac);
+GSList *rfc2015_create_signers_list (const char *keyid);
+int rfc2015_encrypt (const char *file, GSList *recp_list, gboolean ascii_armored);
+int rfc2015_sign (const char *file, GSList *key_list);
 
 #endif /* __RFC2015_H__ */