2839 bool pgp_keyblock =
false;
2840 bool clearsign =
false;
2844 FILE *fp_out = NULL;
2846 gpgme_error_t err = 0;
2847 gpgme_data_t armored_data = NULL;
2849 bool maybe_goodsig =
true;
2850 bool have_any_sigs =
false;
2852 char body_charset[256];
2859 mutt_str_copy(body_charset,
"iso-8859-1",
sizeof(body_charset));
2867 for (bytes = m->
length; bytes > 0;)
2869 if (!fgets(buf,
sizeof(buf), s->
fp_in))
2872 LOFF_T offset = ftello(s->
fp_in);
2873 bytes -= (offset - last_pos);
2891 pgp_keyblock =
true;
2902 have_any_sigs = (have_any_sigs || (clearsign && (s->
flags &
MUTT_VERIFY)));
2917 err = gpgme_op_verify(ctx, armored_data, NULL, plaintext);
2920 err = gpgme_op_decrypt_verify(ctx, armored_data, plaintext);
2921 if (gpg_err_code(err) == GPG_ERR_NO_DATA)
2924 gpgme_data_seek(armored_data, 0, SEEK_SET);
2926 gpgme_data_release(plaintext);
2928 err = gpgme_op_verify(ctx, armored_data, NULL, plaintext);
2937 snprintf(errbuf,
sizeof(errbuf) - 1,
2938 _(
"Error: decryption/verification failed: %s\n"), gpgme_strerror(err));
2947 bool sig_stat =
false;
2948 char *tmpfname = NULL;
2952 gpgme_verify_result_t verify_result = gpgme_op_verify_result(ctx);
2953 if (verify_result->signatures)
2957 have_any_sigs =
false;
2958 maybe_goodsig =
false;
2962 bool anybad =
false;
2965 have_any_sigs =
true;
2972 maybe_goodsig =
true;
2989 gpgme_data_release(plaintext);
3000 else if (pgp_keyblock)
3020 if ((c ==
'\n') && s->
prefix)
3031 else if (pgp_keyblock)
3037 gpgme_data_release(armored_data);
3050 m->
goodsig = (maybe_goodsig && have_any_sigs);
3054 state_attach_puts(s,
_(
"[-- Error: could not find beginning of PGP message --]\n\n"));
const char * cs_subset_string(const struct ConfigSubset *sub, const char *name)
Get a string config item by name.
static gpgme_data_t create_gpgme_data(void)
Create a new GPGME data object.
gpgme_ctx_t create_gpgme_context(bool for_smime)
Create a new GPGME context.
#define SIGNED_MESSAGE(_y)
static int show_one_sig_status(gpgme_ctx_t ctx, int idx, struct State *s)
Show information about one signature.
static gpgme_data_t file_to_data_object(FILE *fp, long offset, size_t length)
Create GPGME data object from file.
#define PUBLIC_KEY_BLOCK(_y)
static void copy_clearsigned(gpgme_data_t data, struct State *s, char *charset)
Copy a clearsigned message.
static void redraw_if_needed(gpgme_ctx_t ctx)
Accommodate for a redraw if needed.
static int pgp_gpgme_extract_keys(gpgme_data_t keydata, FILE **fp)
Write PGP keys to a file.
static char * data_object_to_tempfile(gpgme_data_t data, FILE **fp_ret)
Copy a data object to a temporary file.
char * mutt_body_get_charset(struct Body *b, char *buf, size_t buflen)
Get a body's character set.
int mutt_file_fclose(FILE **fp)
Close a FILE handle (and NULL the pointer)
bool mutt_file_seek(FILE *fp, LOFF_T offset, int whence)
Wrapper for fseeko with error handling.
#define mutt_message(...)
#define mutt_debug(LEVEL,...)
@ LL_DEBUG2
Log at debug level 2.
void mutt_ch_fgetconv_close(struct FgetConv **fc)
Close an fgetconv handle.
struct FgetConv * mutt_ch_fgetconv_open(FILE *fp, const char *from, const char *to, uint8_t flags)
Prepare a file for charset conversion.
int mutt_ch_fgetconv(struct FgetConv *fc)
Convert a file's character set.
#define MUTT_ICONV_NO_FLAGS
No flags are set.
void state_attach_puts(struct State *s, const char *t)
Write a string to the state.
#define state_puts(STATE, STR)
#define MUTT_VERIFY
Perform signature verification.
#define state_putc(STATE, STR)
#define MUTT_DISPLAY
Output is displayed to the user.
size_t mutt_str_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix.
size_t mutt_str_copy(char *dest, const char *src, size_t dsize)
Copy a string into a buffer (guaranteeing NUL-termination)
static size_t plen
Length of cached packet.
LOFF_T offset
offset where the actual data begins
LOFF_T length
length (in bytes) of attachment
bool goodsig
Good cryptographic signature.
Cursor for converting a file's encoding.
Container for Accounts, Notifications.
struct ConfigSubset * sub
Inherited config items.
StateFlags flags
Flags, e.g. MUTT_DISPLAY.
char * prefix
String to add to the beginning of each output line.
FILE * fp_in
File to read from.