X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=util%2Fcrypto.c;h=bb587571879320f6370b320cf6e2083e2187503c;hb=e4890b5bf9e2260b36bcc36ddb77d8e97e2abe7d;hp=5c84282eed62ebfc05c98b2b09ee890d7a78e662;hpb=7ac96b149f5a0e5c03b64856d7c20789dab3c628;p=notmuch diff --git a/util/crypto.c b/util/crypto.c index 5c84282e..bb587571 100644 --- a/util/crypto.c +++ b/util/crypto.c @@ -138,3 +138,65 @@ void _notmuch_crypto_cleanup (unused(_notmuch_crypto_t *crypto)) { } #endif + +GMimeObject * +_notmuch_crypto_decrypt (notmuch_decryption_policy_t decrypt, + notmuch_message_t *message, + g_mime_3_unused(GMimeCryptoContext* crypto_ctx), + GMimeMultipartEncrypted *part, + GMimeDecryptResult **decrypt_result, + GError **err) +{ + GMimeObject *ret = NULL; + if (decrypt == NOTMUCH_DECRYPT_FALSE) + return NULL; + + /* the versions of notmuch that can support session key decryption */ +#if HAVE_GMIME_SESSION_KEYS + if (message) { + notmuch_message_properties_t *list = NULL; + + for (list = notmuch_message_get_properties (message, "session-key", TRUE); + notmuch_message_properties_valid (list); notmuch_message_properties_move_to_next (list)) { + if (err && *err) { + g_error_free (*err); + *err = NULL; + } +#if (GMIME_MAJOR_VERSION < 3) + ret = g_mime_multipart_encrypted_decrypt_session (part, + crypto_ctx, + notmuch_message_properties_value (list), + decrypt_result, err); +#else + ret = g_mime_multipart_encrypted_decrypt (part, + GMIME_DECRYPT_NONE, + notmuch_message_properties_value (list), + decrypt_result, err); +#endif + if (ret) + break; + } + if (list) + notmuch_message_properties_destroy (list); + if (ret) + return ret; + } +#endif + + if (err && *err) { + g_error_free (*err); + *err = NULL; + } + + if (decrypt == NOTMUCH_DECRYPT_AUTO) + return ret; + +#if (GMIME_MAJOR_VERSION < 3) + ret = g_mime_multipart_encrypted_decrypt(part, crypto_ctx, + decrypt_result, err); +#else + ret = g_mime_multipart_encrypted_decrypt(part, GMIME_DECRYPT_NONE, NULL, + decrypt_result, err); +#endif + return ret; +}