Mercurial > ~mikael > mcabber > hg
annotate mcabber/mcabber/pgp.c @ 2225:dc3b3ac1ba76
Free the buffdata structures when buffers are closed
Free the buffdata strcutures when buffers are closed and there are no
more users (these structures can be shared if the "symlink" shared history
is used).
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sat, 07 Nov 2015 12:21:12 +0100 |
parents | 778280b01bcb |
children | 90c25a29fb35 |
rev | line source |
---|---|
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
1 /* |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
2 * pgp.c -- PGP utility functions |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
3 * |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
4 * Copyright (C) 2006-2015 Mikael Berthe <mikael@lilotux.net> |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
5 * Some parts inspired by centericq (impgp.cc) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
6 * |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
7 * This program is free software; you can redistribute it and/or modify |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
8 * it under the terms of the GNU General Public License as published by |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
9 * the Free Software Foundation; either version 2 of the License, or (at |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
10 * your option) any later version. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
11 * |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
15 * General Public License for more details. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
16 * |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU General Public License |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
18 * along with this program; if not, write to the Free Software |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
20 * USA |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
21 */ |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
22 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
23 #include <config.h> |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
24 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
25 #ifdef HAVE_GPGME |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
26 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
27 #include <stdlib.h> |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
28 #include <string.h> |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
29 #include <unistd.h> |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
30 #include <locale.h> |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
31 #include <sys/mman.h> |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
32 #include <glib.h> |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
33 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
34 #include "pgp.h" |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
35 #include "logprint.h" |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
36 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
37 #define MIN_GPGME_VERSION "1.0.0" |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
38 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
39 static struct gpg_struct |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
40 { |
2196
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
41 int enabled; |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
42 int version1; |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
43 char *private_key; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
44 char *passphrase; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
45 } gpg; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
46 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
47 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
48 // gpg_init(priv_key, passphrase) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
49 // Initialize the GPG sub-systems. This function must be invoked early. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
50 // Note: priv_key & passphrase are optional, they can be set later. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
51 // This function returns 0 if gpgme is available and initialized; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
52 // if not it returns the gpgme error code. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
53 int gpg_init(const char *priv_key, const char *passphrase) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
54 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
55 gpgme_error_t err; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
56 |
2196
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
57 gpgme_ctx_t ctx; |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
58 gpgme_engine_info_t info; |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
59 |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
60 // Check for version and OpenPGP protocol support. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
61 if (!gpgme_check_version(MIN_GPGME_VERSION)) { |
1057
4cdf19d9c74e
PGP: Fix a small bug in initialization
Mikael Berthe <mikael@lilotux.net>
parents:
1054
diff
changeset
|
62 scr_LogPrint(LPRINT_LOGNORM, |
4cdf19d9c74e
PGP: Fix a small bug in initialization
Mikael Berthe <mikael@lilotux.net>
parents:
1054
diff
changeset
|
63 "GPGME initialization error: Bad library version"); |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
64 return -1; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
65 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
66 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
67 err = gpgme_engine_check_version(GPGME_PROTOCOL_OpenPGP); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
68 if (err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
69 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
70 "GPGME initialization error: %s", gpgme_strerror(err)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
71 return err; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
72 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
73 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
74 // Set the locale information. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
75 gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
76 gpgme_set_locale(NULL, LC_MESSAGES, setlocale(LC_MESSAGES, NULL)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
77 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
78 // Store private data. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
79 gpg_set_private_key(priv_key); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
80 gpg_set_passphrase(passphrase); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
81 |
2196
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
82 err = gpgme_new(&ctx); |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
83 if (err) return -1; |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
84 |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
85 // Check OpenPGP engine version; with version 2+ the agent is mandatory |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
86 // and we do not manage the passphrase. |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
87 gpgme_set_protocol(ctx, GPGME_PROTOCOL_OpenPGP); |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
88 if (err) return -1; |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
89 |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
90 err = gpgme_get_engine_info (&info); |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
91 if (!err) { |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
92 while (info && info->protocol != gpgme_get_protocol (ctx)) |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
93 info = info->next; |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
94 |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
95 if (info && info->version) { |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
96 if (!strncmp(info->version, "1.", 2)) |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
97 gpg.version1 = TRUE; |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
98 scr_log_print(LPRINT_DEBUG, "GPGME: Engine version is '%s'.", |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
99 info->version); |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
100 } |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
101 } |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
102 |
2212 | 103 gpgme_release(ctx); |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
104 gpg.enabled = 1; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
105 return 0; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
106 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
107 |
2196
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
108 // gpg_is_version1() |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
109 // Return TRUE if the GnuPG OpenPGP engine version is 1.x |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
110 int gpg_is_version1(void) |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
111 { |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
112 return gpg.version1; |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
113 } |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
114 |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
115 // gpg_terminate() |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
116 // Destroy data and free memory. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
117 void gpg_terminate(void) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
118 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
119 gpg.enabled = 0; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
120 gpg_set_passphrase(NULL); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
121 gpg_set_private_key(NULL); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
122 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
123 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
124 // gpg_set_passphrase(passphrase) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
125 // Set the current passphrase (use NULL to erase it). |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
126 void gpg_set_passphrase(const char *passphrase) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
127 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
128 // Remove current passphrase |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
129 if (gpg.passphrase) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
130 ssize_t len = strlen(gpg.passphrase); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
131 memset(gpg.passphrase, 0, len); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
132 munlock(gpg.passphrase, len); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
133 g_free(gpg.passphrase); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
134 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
135 if (passphrase) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
136 gpg.passphrase = g_strdup(passphrase); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
137 mlock(gpg.passphrase, strlen(gpg.passphrase)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
138 } else { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
139 gpg.passphrase = NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
140 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
141 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
142 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
143 // gpg_set_private_key(keyid) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
144 // Set the current private key id (use NULL to unset it). |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
145 void gpg_set_private_key(const char *priv_keyid) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
146 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
147 g_free(gpg.private_key); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
148 if (priv_keyid) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
149 gpg.private_key = g_strdup(priv_keyid); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
150 else |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
151 gpg.private_key = NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
152 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
153 |
2188
84252c616919
PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents:
2187
diff
changeset
|
154 // gpg_get_private_key_id() |
84252c616919
PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents:
2187
diff
changeset
|
155 // Return the current private key id (static string). |
84252c616919
PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents:
2187
diff
changeset
|
156 const char *gpg_get_private_key_id(void) |
84252c616919
PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents:
2187
diff
changeset
|
157 { |
84252c616919
PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents:
2187
diff
changeset
|
158 return gpg.private_key; |
84252c616919
PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents:
2187
diff
changeset
|
159 } |
84252c616919
PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents:
2187
diff
changeset
|
160 |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
161 // strip_header_footer(data) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
162 // Remove PGP header & footer from data. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
163 // Return a new string, or NULL. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
164 // The string must be freed by the caller with g_free() when no longer needed. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
165 static char *strip_header_footer(const char *data) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
166 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
167 char *p, *q; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
168 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
169 if (!data) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
170 return NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
171 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
172 // p: beginning of real data |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
173 // q: end of real data |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
174 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
175 // Strip header (to the first empty line) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
176 p = strstr(data, "\n\n"); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
177 if (!p) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
178 return g_strdup(data); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
179 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
180 // Strip footer |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
181 // We want to remove the last lines, until the line beginning with a '-' |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
182 p += 2; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
183 for (q = p ; *q; q++) ; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
184 // (q is at the end of data now) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
185 for (q--; q > p && (*q != '\n' || *(q+1) != '-'); q--) ; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
186 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
187 if (q <= p) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
188 return NULL; // Shouldn't happen... |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
189 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
190 return g_strndup(p, q-p); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
191 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
192 |
1598 | 193 // GCC ignores casts to void, thus we need to hack around that |
194 static inline void ignore(void*x) {} | |
195 | |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
196 // passphrase_cb() |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
197 // GPGME passphrase callback function. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
198 static gpgme_error_t passphrase_cb(void *hook, const char *uid_hint, |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
199 const char *passphrase_info, int prev_was_bad, int fd) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
200 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
201 ssize_t len; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
202 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
203 // Abort if we do not have the password. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
204 if (!gpg.passphrase) { |
1598 | 205 ignore((void*)write(fd, "\n", 1)); // We have an error anyway, thus it does |
206 // not matter if we fail again. | |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
207 return gpg_error(GPG_ERR_CANCELED); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
208 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
209 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
210 // Write the passphrase to the file descriptor. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
211 len = strlen(gpg.passphrase); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
212 if (write(fd, gpg.passphrase, len) != len) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
213 return gpg_error(GPG_ERR_CANCELED); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
214 if (write(fd, "\n", 1) != 1) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
215 return gpg_error(GPG_ERR_CANCELED); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
216 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
217 return 0; // Success |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
218 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
219 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
220 // gpg_verify(gpg_data, text, *sigsum) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
221 // Verify that gpg_data is a correct signature for text. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
222 // Return the key id (or fingerprint), and set *sigsum to |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
223 // the gpgme signature summary value. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
224 // The returned string must be freed with g_free() after use. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
225 char *gpg_verify(const char *gpg_data, const char *text, |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
226 gpgme_sigsum_t *sigsum) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
227 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
228 gpgme_ctx_t ctx; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
229 gpgme_data_t data_sign, data_text; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
230 char *data; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
231 char *verified_key = NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
232 gpgme_key_t key; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
233 gpgme_error_t err; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
234 const char prefix[] = "-----BEGIN PGP SIGNATURE-----\n\n"; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
235 const char suffix[] = "\n-----END PGP SIGNATURE-----\n"; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
236 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
237 // Reset the summary. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
238 *sigsum = 0; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
239 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
240 if (!gpg.enabled) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
241 return NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
242 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
243 err = gpgme_new(&ctx); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
244 if (err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
245 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
246 "GPGME error: %s", gpgme_strerror(err)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
247 return NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
248 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
249 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
250 gpgme_set_protocol(ctx, GPGME_PROTOCOL_OpenPGP); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
251 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
252 // Surround the given data with the prefix & suffix |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
253 data = g_new(char, sizeof(prefix) + sizeof(suffix) + strlen(gpg_data)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
254 strcpy(data, prefix); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
255 strcat(data, gpg_data); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
256 strcat(data, suffix); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
257 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
258 err = gpgme_data_new_from_mem(&data_sign, data, strlen(data), 0); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
259 if (!err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
260 err = gpgme_data_new_from_mem(&data_text, text, strlen(text), 0); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
261 if (!err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
262 err = gpgme_op_verify(ctx, data_sign, data_text, 0); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
263 if (!err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
264 gpgme_verify_result_t vr = gpgme_op_verify_result(ctx); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
265 if (vr && vr->signatures) { |
2200
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
266 gpgme_signature_t s = NULL; |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
267 // check all signatures and stop if the first could be verified |
2208
7c843b29571b
Fix changeset fec172dbacc7
Mikael Berthe <mikael@lilotux.net>
parents:
2202
diff
changeset
|
268 for (s = vr->signatures; s && !verified_key; s = s->next) { |
2200
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
269 // Found the fingerprint. Let's try to get the key id. |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
270 if (NULL != s->fpr) { |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
271 if (!gpgme_get_key(ctx, s->fpr, &key, 0)) { |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
272 if (key) { |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
273 verified_key = g_strdup(key->subkeys->keyid); |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
274 gpgme_key_release(key); |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
275 } |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
276 } |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
277 } |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
278 *sigsum = s->summary; |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
279 // For some reason summary could be 0 when status is 0 too, |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
280 // which means the signature is valid... |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
281 if ((!*sigsum) && (!s->status)) |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
282 *sigsum = GPGME_SIGSUM_GREEN; |
fec172dbacc7
Check all signatures and stop immediately if one could be verified
Sven Gaerner <sgaerner@gmx.net>
parents:
2196
diff
changeset
|
283 } |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
284 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
285 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
286 gpgme_data_release(data_text); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
287 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
288 gpgme_data_release(data_sign); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
289 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
290 if (err) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
291 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, |
1047
0dc104d51dce
PGP: Better error messages
Mikael Berthe <mikael@lilotux.net>
parents:
1041
diff
changeset
|
292 "GPGME verification error: %s", gpgme_strerror(err)); |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
293 gpgme_release(ctx); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
294 g_free(data); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
295 return verified_key; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
296 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
297 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
298 // gpg_sign(gpg_data) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
299 // Return a signature of gpg_data (or NULL). |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
300 // The returned string must be freed with g_free() after use. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
301 char *gpg_sign(const char *gpg_data) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
302 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
303 gpgme_ctx_t ctx; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
304 gpgme_data_t in, out; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
305 char *signed_data = NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
306 size_t nread; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
307 gpgme_key_t key; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
308 gpgme_error_t err; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
309 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
310 if (!gpg.enabled || !gpg.private_key) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
311 return NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
312 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
313 err = gpgme_new(&ctx); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
314 if (err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
315 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
316 "GPGME error: %s", gpgme_strerror(err)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
317 return NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
318 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
319 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
320 gpgme_set_protocol(ctx, GPGME_PROTOCOL_OpenPGP); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
321 gpgme_set_textmode(ctx, 0); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
322 gpgme_set_armor(ctx, 1); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
323 |
2196
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
324 if (gpg.version1) { |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
325 // GPG_AGENT_INFO isn't used by GnuPG version 2+ |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
326 char *p = getenv("GPG_AGENT_INFO"); |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
327 if (!(p && strchr(p, ':'))) |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
328 gpgme_set_passphrase_cb(ctx, passphrase_cb, 0); |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
329 } |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
330 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
331 err = gpgme_get_key(ctx, gpg.private_key, &key, 1); |
1105
265e1d873d3e
PGP: Improve checks for missing keys
Mikael Berthe <mikael@lilotux.net>
parents:
1057
diff
changeset
|
332 if (err || !key) { |
1049
ad5de4d1ee56
PGP: Give a more useful error message when the private key isn't found
Mikael Berthe <mikael@lilotux.net>
parents:
1047
diff
changeset
|
333 scr_LogPrint(LPRINT_LOGNORM, "GPGME error: private key not found"); |
ad5de4d1ee56
PGP: Give a more useful error message when the private key isn't found
Mikael Berthe <mikael@lilotux.net>
parents:
1047
diff
changeset
|
334 gpgme_release(ctx); |
ad5de4d1ee56
PGP: Give a more useful error message when the private key isn't found
Mikael Berthe <mikael@lilotux.net>
parents:
1047
diff
changeset
|
335 return NULL; |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
336 } |
1049
ad5de4d1ee56
PGP: Give a more useful error message when the private key isn't found
Mikael Berthe <mikael@lilotux.net>
parents:
1047
diff
changeset
|
337 |
ad5de4d1ee56
PGP: Give a more useful error message when the private key isn't found
Mikael Berthe <mikael@lilotux.net>
parents:
1047
diff
changeset
|
338 gpgme_signers_clear(ctx); |
ad5de4d1ee56
PGP: Give a more useful error message when the private key isn't found
Mikael Berthe <mikael@lilotux.net>
parents:
1047
diff
changeset
|
339 gpgme_signers_add(ctx, key); |
ad5de4d1ee56
PGP: Give a more useful error message when the private key isn't found
Mikael Berthe <mikael@lilotux.net>
parents:
1047
diff
changeset
|
340 gpgme_key_release(key); |
ad5de4d1ee56
PGP: Give a more useful error message when the private key isn't found
Mikael Berthe <mikael@lilotux.net>
parents:
1047
diff
changeset
|
341 err = gpgme_data_new_from_mem(&in, gpg_data, strlen(gpg_data), 0); |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
342 if (!err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
343 err = gpgme_data_new(&out); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
344 if (!err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
345 err = gpgme_op_sign(ctx, in, out, GPGME_SIG_MODE_DETACH); |
2202
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
346 if (err) { |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
347 gpgme_data_release(out); |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
348 } else { |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
349 signed_data = gpgme_data_release_and_get_mem(out, &nread); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
350 if (signed_data) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
351 // We need to add a trailing NULL |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
352 char *dd = g_strndup(signed_data, nread); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
353 free(signed_data); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
354 signed_data = strip_header_footer(dd); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
355 g_free(dd); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
356 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
357 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
358 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
359 gpgme_data_release(in); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
360 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
361 if (err && err != GPG_ERR_CANCELED) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
362 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, |
1047
0dc104d51dce
PGP: Better error messages
Mikael Berthe <mikael@lilotux.net>
parents:
1041
diff
changeset
|
363 "GPGME signature error: %s", gpgme_strerror(err)); |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
364 gpgme_release(ctx); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
365 return signed_data; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
366 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
367 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
368 // gpg_decrypt(gpg_data) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
369 // Return decrypted gpg_data (or NULL). |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
370 // The returned string must be freed with g_free() after use. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
371 char *gpg_decrypt(const char *gpg_data) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
372 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
373 gpgme_ctx_t ctx; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
374 gpgme_data_t in, out; |
2196
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
375 char *data; |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
376 char *decrypted_data = NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
377 size_t nread; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
378 gpgme_error_t err; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
379 const char prefix[] = "-----BEGIN PGP MESSAGE-----\n\n"; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
380 const char suffix[] = "\n-----END PGP MESSAGE-----\n"; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
381 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
382 if (!gpg.enabled) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
383 return NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
384 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
385 err = gpgme_new(&ctx); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
386 if (err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
387 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
388 "GPGME error: %s", gpgme_strerror(err)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
389 return NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
390 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
391 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
392 gpgme_set_protocol(ctx, GPGME_PROTOCOL_OpenPGP); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
393 |
2196
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
394 if (gpg.version1) { |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
395 // GPG_AGENT_INFO isn't used by GnuPG version 2+ |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
396 char *p = getenv("GPG_AGENT_INFO"); |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
397 if (!(p && strchr(p, ':'))) |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
398 gpgme_set_passphrase_cb(ctx, passphrase_cb, 0); |
8811fe9d6ef0
Improve support for GnuPG v2+
Mikael Berthe <mikael@lilotux.net>
parents:
2195
diff
changeset
|
399 } |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
400 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
401 // Surround the given data with the prefix & suffix |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
402 data = g_new(char, sizeof(prefix) + sizeof(suffix) + strlen(gpg_data)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
403 strcpy(data, prefix); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
404 strcat(data, gpg_data); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
405 strcat(data, suffix); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
406 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
407 err = gpgme_data_new_from_mem(&in, data, strlen(data), 0); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
408 if (!err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
409 err = gpgme_data_new(&out); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
410 if (!err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
411 err = gpgme_op_decrypt(ctx, in, out); |
2202
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
412 if (err) { |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
413 gpgme_data_release(out); |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
414 } else { |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
415 decrypted_data = gpgme_data_release_and_get_mem(out, &nread); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
416 if (decrypted_data) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
417 // We need to add a trailing NULL |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
418 char *dd = g_strndup(decrypted_data, nread); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
419 free(decrypted_data); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
420 decrypted_data = dd; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
421 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
422 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
423 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
424 gpgme_data_release(in); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
425 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
426 if (err && err != GPG_ERR_CANCELED) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
427 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, |
1047
0dc104d51dce
PGP: Better error messages
Mikael Berthe <mikael@lilotux.net>
parents:
1041
diff
changeset
|
428 "GPGME decryption error: %s", gpgme_strerror(err)); |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
429 gpgme_release(ctx); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
430 g_free(data); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
431 return decrypted_data; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
432 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
433 |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
434 // gpg_encrypt(gpg_data, keyids[], n) |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
435 // Return encrypted gpg_data with the n keys from the keyids array (or NULL). |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
436 // The returned string must be freed with g_free() after use. |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
437 char *gpg_encrypt(const char *gpg_data, const char *keyids[], size_t nkeys) |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
438 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
439 gpgme_ctx_t ctx; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
440 gpgme_data_t in, out; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
441 char *encrypted_data = NULL, *edata; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
442 size_t nread; |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
443 gpgme_key_t *keys; |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
444 gpgme_error_t err; |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
445 unsigned i; |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
446 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
447 if (!gpg.enabled) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
448 return NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
449 |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
450 if (!keyids || !nkeys) { |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
451 return NULL; |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
452 } |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
453 |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
454 err = gpgme_new(&ctx); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
455 if (err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
456 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
457 "GPGME error: %s", gpgme_strerror(err)); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
458 return NULL; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
459 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
460 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
461 gpgme_set_protocol(ctx, GPGME_PROTOCOL_OpenPGP); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
462 gpgme_set_textmode(ctx, 0); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
463 gpgme_set_armor(ctx, 1); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
464 |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
465 keys = g_new0(gpgme_key_t, 1+nkeys); |
2195
40ddaebeb81e
PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents:
2188
diff
changeset
|
466 if (!keys) { |
40ddaebeb81e
PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents:
2188
diff
changeset
|
467 gpgme_release(ctx); |
40ddaebeb81e
PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents:
2188
diff
changeset
|
468 return NULL; |
40ddaebeb81e
PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents:
2188
diff
changeset
|
469 } |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
470 |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
471 for (i = 0; i < nkeys; i++) { |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
472 err = gpgme_get_key(ctx, keyids[i], &keys[i], 0); |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
473 if (err || !keys[i]) { |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
474 scr_LogPrint(LPRINT_LOGNORM, "GPGME encryption error: cannot use key %s", |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
475 keyids[i]); |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
476 // We need to have err not null to ensure we won't try to encrypt |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
477 // without this key. |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
478 if (!err) err = GPG_ERR_UNKNOWN_ERRNO; |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
479 break; |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
480 } |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
481 } |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
482 |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
483 if (!err) { |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
484 err = gpgme_data_new_from_mem(&in, gpg_data, strlen(gpg_data), 0); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
485 if (!err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
486 err = gpgme_data_new(&out); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
487 if (!err) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
488 err = gpgme_op_encrypt(ctx, keys, GPGME_ENCRYPT_ALWAYS_TRUST, in, out); |
2202
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
489 if (err) { |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
490 gpgme_data_release(out); |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
491 } else { |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
492 encrypted_data = gpgme_data_release_and_get_mem(out, &nread); |
2202
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
493 if (encrypted_data) { |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
494 // We need to add a trailing NULL |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
495 char *dd = g_strndup(encrypted_data, nread); |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
496 free(encrypted_data); |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
497 encrypted_data = dd; |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
498 } |
ff18feb75a6d
PGP: Add a trailing NULL after a message is PGP-encrypted
Mikael Berthe <mikael@lilotux.net>
parents:
2200
diff
changeset
|
499 } |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
500 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
501 gpgme_data_release(in); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
502 } |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
503 |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
504 if (err && err != GPG_ERR_CANCELED) { |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
505 scr_LogPrint(LPRINT_LOGNORM|LPRINT_NOTUTF8, |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
506 "GPGME encryption error: %s", gpgme_strerror(err)); |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
507 } |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
508 } |
2187
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
509 |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
510 for (i = 0; keys[i]; i++) |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
511 gpgme_key_release(keys[i]); |
e3b66c8ead4f
PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
512 g_free(keys); |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
513 gpgme_release(ctx); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
514 edata = strip_header_footer(encrypted_data); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
515 if (encrypted_data) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
516 free(encrypted_data); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
517 return edata; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
518 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
519 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
520 // gpg_test_passphrase() |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
521 // Test the current gpg.passphrase with gpg.private_key. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
522 // If the test doesn't succeed, the passphrase is cleared and a non-null |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
523 // value is returned. |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
524 int gpg_test_passphrase(void) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
525 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
526 char *s; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
527 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
528 if (!gpg.private_key) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
529 return -1; // No private key... |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
530 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
531 s = gpg_sign("test"); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
532 if (s) { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
533 free(s); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
534 return 0; // Ok, test successful |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
535 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
536 // The passphrase is wrong (if provided) |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
537 gpg_set_passphrase(NULL); |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
538 return -1; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
539 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
540 |
1413 | 541 int gpg_enabled(void) |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
542 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
543 return gpg.enabled; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
544 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
545 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
546 #else /* not HAVE_GPGME */ |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
547 |
1413 | 548 int gpg_enabled(void) |
1041
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
549 { |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
550 return 0; |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
551 } |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
552 |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
553 #endif /* HAVE_GPGME */ |
d4b97a2423eb
Introduce PGP utility functions
Mikael Berthe <mikael@lilotux.net>
parents:
diff
changeset
|
554 |
1811 | 555 /* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2: For Vim users... */ |