46#ifndef CRYPT_BACKEND_GPGME
49#if defined(CRYPT_BACKEND_GPGME) || defined(USE_AUTOCRYPT)
52#ifdef CRYPT_BACKEND_GPGME
55#ifdef CRYPT_BACKEND_CLASSIC_PGP
69#ifdef CRYPT_BACKEND_CLASSIC_PGP
73#ifdef CRYPT_BACKEND_CLASSIC_SMIME
77#ifdef CRYPT_BACKEND_GPGME
85#define CRYPT_MOD_CALL_CHECK(mod_data, identifier, func) \
86 (crypto_module_lookup(mod_data, APPLICATION_##identifier) && \
87 (crypto_module_lookup(mod_data, APPLICATION_##identifier))->func)
91#define CRYPT_MOD_CALL(mod_data, identifier, func) \
92 (*(crypto_module_lookup(mod_data, APPLICATION_##identifier))->func)
101#ifdef CRYPT_BACKEND_GPGME
104#ifdef CRYPT_BACKEND_CLASSIC_PGP
106#ifdef CRYPT_BACKEND_GPGME
115#ifdef CRYPT_BACKEND_CLASSIC_SMIME
117#ifdef CRYPT_BACKEND_GPGME
126#ifdef CRYPT_BACKEND_GPGME
127 if (c_crypt_use_gpgme)
134#if defined(CRYPT_BACKEND_CLASSIC_PGP) || \
135 defined(CRYPT_BACKEND_CLASSIC_SMIME) || defined(CRYPT_BACKEND_GPGME)
159#ifdef CRYPT_BACKEND_CLASSIC_PGP
163#ifdef CRYPT_BACKEND_GPGME
258 return CRYPT_MOD_CALL(mod_data, PGP, decrypt_mime)(fp_in, fp_out, b, b_dec);
272 return CRYPT_MOD_CALL(mod_data, PGP, application_handler)(b_email, state);
301 return CRYPT_MOD_CALL(mod_data, PGP, encrypted_handler)(b_email, state);
327 return CRYPT_MOD_CALL(mod_data, PGP, pgp_check_traditional)(fp, b, just_one);
341 return CRYPT_MOD_CALL(mod_data, PGP, pgp_traditional_encryptsign)(b, flags, keylist);
392 int sign,
const struct AddressList *from)
412 return CRYPT_MOD_CALL(mod_data, PGP, pgp_encrypt_message)(b, keylist, sign, from);
466 CRYPT_MOD_CALL(mod_data, PGP, pgp_extract_key_from_attachment)(fp, b);
516 return CRYPT_MOD_CALL(mod_data, SMIME, decrypt_mime)(fp_in, fp_out, b, b_dec);
530 return CRYPT_MOD_CALL(mod_data, SMIME, application_handler)(b_email, state);
556 return CRYPT_MOD_CALL(mod_data, SMIME, smime_verify_sender)(e, msg);
598 return CRYPT_MOD_CALL(mod_data, SMIME, smime_build_smime_entity)(b, certlist);
612 CRYPT_MOD_CALL(mod_data, SMIME, smime_invoke_import)(infile, mailbox);
Autocrypt end-to-end encryption.
int mutt_autocrypt_set_sign_as_default_key(struct Email *e)
Set the Autocrypt default key for signing.
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Convenience wrapper for the config headers.
Convenience wrapper for the core headers.
static char * find_keys(const struct AddressList *addrlist, unsigned int app, bool oppenc_mode)
Find keys of the recipients of the message.
static int verify_one(struct Body *b, struct State *state, const char *tempfile, bool is_smime)
Do the actual verification step.
void gpgme_id_defaults_cleanup(struct NcryptModuleData *mod_data)
Free the GPGME IdDefaults cache.
static struct Body * sign_message(struct Body *b, const struct AddressList *from, bool use_smime)
Sign a message.
Wrapper for PGP/SMIME calls to GPGME.
const struct CryptModuleSpecs * crypto_module_lookup(struct NcryptModuleData *mod_data, int identifier)
Lookup a crypto module by name.
void crypto_module_register(const struct CryptModuleSpecs *specs)
Register a new crypto module.
bool crypt_has_module_backend(SecurityFlags type)
Is there a crypto backend for a given type?
char * crypt_smime_find_keys(struct AddressList *addrlist, bool oppenc_mode)
Wrapper for CryptModuleSpecs::find_keys()
void crypt_invoke_message(SecurityFlags type)
Display an informative message.
struct Body * crypt_smime_build_smime_entity(struct Body *b, char *certlist)
Wrapper for CryptModuleSpecs::smime_build_smime_entity()
struct Body * crypt_smime_sign_message(struct Body *b, const struct AddressList *from)
Wrapper for CryptModuleSpecs::sign_message()
int crypt_pgp_decrypt_mime(FILE *fp_in, FILE **fp_out, struct Body *b, struct Body **b_dec)
Wrapper for CryptModuleSpecs::decrypt_mime()
struct Body * crypt_pgp_traditional_encryptsign(struct Body *b, SecurityFlags flags, char *keylist)
Wrapper for CryptModuleSpecs::pgp_traditional_encryptsign()
char * crypt_pgp_find_keys(struct AddressList *addrlist, bool oppenc_mode)
Wrapper for CryptModuleSpecs::find_keys()
void crypt_smime_getkeys(struct Envelope *env)
Wrapper for CryptModuleSpecs::smime_getkeys()
struct Body * crypt_pgp_sign_message(struct Body *b, const struct AddressList *from)
Wrapper for CryptModuleSpecs::sign_message()
#define CRYPT_MOD_CALL(mod_data, identifier, func)
bool crypt_pgp_check_traditional(FILE *fp, struct Body *b, bool just_one)
Wrapper for CryptModuleSpecs::pgp_check_traditional()
struct Body * crypt_pgp_make_key_attachment(void)
Wrapper for CryptModuleSpecs::pgp_make_key_attachment()
SecurityFlags crypt_smime_send_menu(struct Email *e)
Wrapper for CryptModuleSpecs::send_menu()
SecurityFlags crypt_pgp_send_menu(struct Email *e)
Wrapper for CryptModuleSpecs::send_menu()
void crypt_pgp_invoke_getkeys(struct Address *addr)
Wrapper for CryptModuleSpecs::pgp_invoke_getkeys()
bool crypt_smime_valid_passphrase(void)
Wrapper for CryptModuleSpecs::valid_passphrase()
void crypt_pgp_invoke_import(const char *fname)
Wrapper for CryptModuleSpecs::pgp_invoke_import()
void crypt_smime_void_passphrase(void)
Wrapper for CryptModuleSpecs::void_passphrase()
void crypt_pgp_extract_key_from_attachment(FILE *fp, struct Body *b)
Wrapper for CryptModuleSpecs::pgp_extract_key_from_attachment()
void crypt_smime_invoke_import(const char *infile, const char *mailbox)
Wrapper for CryptModuleSpecs::smime_invoke_import()
int crypt_smime_verify_sender(struct Email *e, struct Message *msg)
Wrapper for CryptModuleSpecs::smime_verify_sender()
void crypt_pgp_set_sender(const char *sender)
Wrapper for CryptModuleSpecs::set_sender()
void crypt_smime_set_sender(const char *sender)
Wrapper for CryptModuleSpecs::set_sender()
int crypt_smime_decrypt_mime(FILE *fp_in, FILE **fp_out, struct Body *b, struct Body **b_dec)
Wrapper for CryptModuleSpecs::decrypt_mime()
int crypt_smime_verify_one(struct Body *b, struct State *state, const char *tempf)
Wrapper for CryptModuleSpecs::verify_one()
void crypt_init(void)
Initialise the crypto backends.
void crypt_pgp_void_passphrase(void)
Wrapper for CryptModuleSpecs::void_passphrase()
void crypt_cleanup(struct NcryptModuleData *mod_data)
Clean up backend.
#define CRYPT_MOD_CALL_CHECK(mod_data, identifier, func)
bool crypt_pgp_valid_passphrase(void)
Wrapper for CryptModuleSpecs::valid_passphrase()
int crypt_pgp_verify_one(struct Body *b, struct State *state, const char *tempf)
Wrapper for CryptModuleSpecs::verify_one()
struct Body * crypt_pgp_encrypt_message(struct Email *e, struct Body *b, char *keylist, int sign, const struct AddressList *from)
Wrapper for CryptModuleSpecs::pgp_encrypt_message()
Wrapper around crypto functions.
Structs that make up an email.
bool OptAutocryptGpgme
(pseudo) use Autocrypt context inside ncrypt/crypt_gpgme.c
const struct CryptModuleSpecs CryptModSmimeGpgme
GPGME SMIME - Implements CryptModuleSpecs -.
const struct CryptModuleSpecs CryptModSmimeClassic
CLI SMIME - Implements CryptModuleSpecs -.
const struct CryptModuleSpecs CryptModPgpGpgme
GPGME PGP - Implements CryptModuleSpecs -.
const struct CryptModuleSpecs CryptModPgpClassic
CLI PGP - Implements CryptModuleSpecs -.
int pgp_gpgme_decrypt_mime(FILE *fp_in, FILE **fp_out, struct Body *b, struct Body **b_dec)
Decrypt an encrypted MIME part - Implements CryptModuleSpecs::decrypt_mime() -.
int pgp_gpgme_encrypted_handler(struct Body *b, struct State *state)
Manage a PGP or S/MIME encrypted MIME part - Implements CryptModuleSpecs::encrypted_handler() -.
struct Body * pgp_gpgme_encrypt_message(struct Body *b, char *keylist, bool sign, const struct AddressList *from)
PGP encrypt an email - Implements CryptModuleSpecs::pgp_encrypt_message() -.
int crypt_pgp_application_handler(struct Body *b_email, struct State *state)
Wrapper for CryptModuleSpecs::application_handler() - Implements handler_t -.
int crypt_smime_application_handler(struct Body *b_email, struct State *state)
Wrapper for CryptModuleSpecs::application_handler() - Implements handler_t -.
int crypt_pgp_encrypted_handler(struct Body *b_email, struct State *state)
Wrapper for CryptModuleSpecs::encrypted_handler() - Implements handler_t -.
#define mutt_message(...)
Convenience wrapper for the gui headers.
@ MODULE_ID_NCRYPT
ModuleNcrypt, Ncrypt
Convenience wrapper for the library headers.
API for encryption/signing of emails.
@ SEC_AUTOCRYPT
(Autocrypt) Message will be, or was Autocrypt encrypt+signed
#define APPLICATION_PGP
Use PGP to encrypt/sign.
#define APPLICATION_SMIME
Use SMIME to encrypt/sign.
Ncrypt private Module data.
void * neomutt_get_module_data(struct NeoMutt *n, enum ModuleId id)
Get the private data for a Module.
void pgp_id_defaults_cleanup(struct PgpCache **pgp_id_defaults)
Free the PGP IdDefaults cache.
PGP key management routines.
bool is_autocrypt
Flag autocrypt-decrypted messages for replying.
The envelope/body of an email.
SecurityFlags security
bit 0-10: flags, bit 11,12: application, bit 13: traditional pgp See: ncrypt/lib.h pgplib....
A local copy of an email.
Ncrypt private Module data.
struct PgpCache * pgp_id_defaults
PGP IdDefaults cache.
Container for Accounts, Notifications.
struct ConfigSubset * sub
Inherited config items.
Keep track when processing files.