1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  */
19 
20 #ifndef PRIVACY_H
21 #define PRIVACY_H
22 
23 typedef struct _PrivacySystem PrivacySystem;
24 typedef struct _PrivacyData PrivacyData;
25 
26 typedef enum {
27 	SIGNATURE_UNCHECKED,
28 	SIGNATURE_OK,
29 	SIGNATURE_WARN,
30 	SIGNATURE_KEY_EXPIRED,
31 	SIGNATURE_INVALID,
32 	SIGNATURE_CHECK_FAILED,
33 	SIGNATURE_CHECK_TIMEOUT
34 } SignatureStatus;
35 
36 #include <glib.h>
37 
38 #include "procmime.h"
39 #include "prefs_account.h"
40 
41 void privacy_register_system			(PrivacySystem *system);
42 void privacy_unregister_system			(PrivacySystem *system);
43 
44 void privacy_free_privacydata			(PrivacyData *);
45 
46 void privacy_msginfo_get_signed_state		(MsgInfo *, gchar **system);
47 gboolean privacy_mimeinfo_is_signed		(MimeInfo *);
48 gint privacy_mimeinfo_check_signature		(MimeInfo *);
49 SignatureStatus privacy_mimeinfo_get_sig_status	(MimeInfo *);
50 gchar *privacy_mimeinfo_sig_info_short		(MimeInfo *);
51 gchar *privacy_mimeinfo_sig_info_full		(MimeInfo *);
52 
53 gboolean privacy_mimeinfo_is_encrypted		(MimeInfo *);
54 gint privacy_mimeinfo_decrypt			(MimeInfo *);
55 
56 GSList *privacy_get_system_ids			();
57 const gchar *privacy_system_get_name		(const gchar *);
58 gboolean privacy_system_can_sign		(const gchar *);
59 gboolean privacy_system_can_encrypt		(const gchar *);
60 
61 gboolean privacy_sign				(const gchar  *system,
62 						 MimeInfo     *mimeinfo,
63 						 PrefsAccount *account,
64 						 const gchar *from_addr);
65 gchar *privacy_get_encrypt_data			(const gchar  *system,
66 						 GSList       *recp_names);
67 const gchar *privacy_get_encrypt_warning	(const gchar  *system);
68 gboolean privacy_encrypt			(const gchar  *system,
69 						 MimeInfo     *mimeinfo,
70 						 const gchar  *encdata);
71 
72 void privacy_set_error				(const gchar *format, ...) G_GNUC_PRINTF(1, 2);
73 void privacy_reset_error				(void);
74 gboolean privacy_peek_error				(void);
75 const gchar *privacy_get_error			(void);
76 
77 struct _PrivacySystem {
78 	/** Identifier for the PrivacySystem that can use in config files */
79 	gchar		 *id;
80 	/** Human readable name for the PrivacySystem for the user interface */
81 	gchar		 *name;
82 
83 	void		 (*free_privacydata)	(PrivacyData *data);
84 
85 	gboolean	 (*is_signed)		(MimeInfo *mimeinfo);
86 	gint		 (*check_signature)	(MimeInfo *mimeinfo);
87 	SignatureStatus	 (*get_sig_status)	(MimeInfo *mimeinfo);
88 	gchar		*(*get_sig_info_short)	(MimeInfo *mimeinfo);
89 	gchar		*(*get_sig_info_full)	(MimeInfo *mimeinfo);
90 
91 	gboolean	 (*is_encrypted)	(MimeInfo *mimeinfo);
92 	MimeInfo	*(*decrypt)		(MimeInfo *mimeinfo);
93 
94 	gboolean	   can_sign;
95 	gboolean	 (*sign)		(MimeInfo *mimeinfo,
96 						 PrefsAccount *account,
97 						 const gchar *from_addr);
98 
99 	gboolean	   can_encrypt;
100 	gchar		*(*get_encrypt_data)	(GSList *recp_names);
101 	gboolean	 (*encrypt)		(MimeInfo *mimeinfo,
102 						 const gchar *encrypt_data);
103 	const gchar	*(*get_encrypt_warning)	(void);
104 	void 		 (*inhibit_encrypt_warning)	(gboolean inhibit);
105 	gboolean	 (*auto_check_signatures)(void);
106 };
107 
108 struct _PrivacyData {
109 	PrivacySystem	*system;
110 };
111 
112 void privacy_inhibit_encrypt_warning		(const gchar *id,
113 						 gboolean inhibit);
114 gboolean privacy_auto_check_signatures(MimeInfo *mimeinfo);
115 
116 #endif /* PRIVACY_H */
117