30 |
#include <gpgme.h> |
#include <gpgme.h> |
31 |
|
|
32 |
struct gpg_struct { |
struct gpg_struct { |
33 |
|
int inited; |
34 |
char *keys; |
char *keys; |
35 |
char *passphrase; |
char *passphrase; |
36 |
}; |
}; |
77 |
anubis_error(HARD, _("GPGME: failed. %s."), gpgme_strerror(err)); |
anubis_error(HARD, _("GPGME: failed. %s."), gpgme_strerror(err)); |
78 |
return -1; |
return -1; |
79 |
} |
} |
80 |
|
gpg.inited = 1; |
81 |
if (options.termlevel == DEBUG) |
if (options.termlevel == DEBUG) |
82 |
puts(gpgme_get_engine_info()); |
puts(gpgme_get_engine_info()); |
83 |
return 0; |
return 0; |
97 |
GpgmeCtx ctx; |
GpgmeCtx ctx; |
98 |
GpgmeError err = 0; |
GpgmeError err = 0; |
99 |
GpgmeData in, out; |
GpgmeData in, out; |
100 |
|
GpgmeKey key; |
101 |
|
|
102 |
char buf[256]; |
char buf[256]; |
103 |
char *signed_data; |
char *signed_data; |
104 |
int size; |
int size; |
108 |
signed_data = (char *)xmalloc(size); |
signed_data = (char *)xmalloc(size); |
109 |
memset(buf, 0, sizeof(buf)); |
memset(buf, 0, sizeof(buf)); |
110 |
fail_if_err(gpgme_new(&ctx)); |
fail_if_err(gpgme_new(&ctx)); |
111 |
|
|
112 |
|
if (gpg.keys) { |
113 |
|
err = gpgme_op_keylist_start(ctx, gpg.keys, 0); |
114 |
|
if (!err) { |
115 |
|
while ((err = gpgme_op_keylist_next(ctx, &key)) == 0) |
116 |
|
err = gpgme_signers_add(ctx, key); |
117 |
|
} |
118 |
|
if (err && err != GPGME_EOF) { |
119 |
|
anubis_error(HARD, _("GPGME: cannot list keys: %s"), |
120 |
|
gpgme_strerror(err)); |
121 |
|
topt |= T_ERROR; |
122 |
|
} |
123 |
|
} |
124 |
gpgme_set_passphrase_cb(ctx, (GpgmePassphraseCb)passphrase_cb, 0); |
gpgme_set_passphrase_cb(ctx, (GpgmePassphraseCb)passphrase_cb, 0); |
125 |
gpgme_set_textmode(ctx, 1); |
gpgme_set_textmode(ctx, 1); |
126 |
gpgme_set_armor(ctx, 1); |
gpgme_set_armor(ctx, 1); |
279 |
{ |
{ |
280 |
switch (key) { |
switch (key) { |
281 |
case KW_GPG_PASSPHRASE: |
case KW_GPG_PASSPHRASE: |
282 |
gpg.passphrase = arg; |
free(gpg.passphrase); |
283 |
gpgme_init(); |
gpg.passphrase = strdup(arg); |
|
memset(gpg.passphrase, 0, strlen(gpg.passphrase)); |
|
284 |
break; |
break; |
285 |
|
|
286 |
case KW_GPG_ENCRYPT: |
case KW_GPG_ENCRYPT: |
288 |
gpg.keys = allocbuf(arg, 0); |
gpg.keys = allocbuf(arg, 0); |
289 |
gpg.keys = xrealloc(gpg.keys, strlen(gpg.keys) + 2); |
gpg.keys = xrealloc(gpg.keys, strlen(gpg.keys) + 2); |
290 |
strcat(gpg.keys, ","); |
strcat(gpg.keys, ","); |
291 |
|
if (gpg.inited == 0 && gpgme_init()) |
292 |
|
break; |
293 |
gpg_proc(msg, gpg_encrypt_to_users); |
gpg_proc(msg, gpg_encrypt_to_users); |
294 |
break; |
break; |
295 |
|
|
296 |
case KW_GPG_SIGN: |
case KW_GPG_SIGN: |
297 |
if (strcmp(arg, "yes") == 0) |
if (strcmp(arg, "no")) { |
298 |
|
xfree(gpg.keys); |
299 |
|
if (strcmp(arg, "yes")) |
300 |
|
gpg.keys = strdup(arg); |
301 |
|
if (gpg.inited == 0 && gpgme_init()) |
302 |
|
break; |
303 |
gpg_proc(msg, gpg_sign); |
gpg_proc(msg, gpg_sign); |
304 |
|
} |
305 |
break; |
break; |
306 |
|
|
307 |
case KW_GPG_HOME: |
case KW_GPG_HOME: |