X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=util%2Fcrypto.c;h=9d3b6dad9d17e4b32f645d0d5c0a2fbbf9fddf48;hp=338f1d5d85e5a4b9b273488dcac4b1770c301749;hb=152b6cac5d496aaad816d20d7b2286e9ac73207d;hpb=d137170b23f8ccd9f967445e101d6f694df1cad4 diff --git a/util/crypto.c b/util/crypto.c index 338f1d5d..9d3b6dad 100644 --- a/util/crypto.c +++ b/util/crypto.c @@ -197,10 +197,24 @@ _notmuch_crypto_decrypt (bool *attempted, if (attempted) *attempted = true; #if (GMIME_MAJOR_VERSION < 3) +#if HAVE_GMIME_SESSION_KEYS + gboolean oldgetsk = g_mime_crypto_context_get_retrieve_session_key (crypto_ctx); + gboolean newgetsk = (decrypt == NOTMUCH_DECRYPT_TRUE && decrypt_result); + if (newgetsk != oldgetsk) + /* This could return an error, but we can't do anything about it, so ignore it */ + g_mime_crypto_context_set_retrieve_session_key (crypto_ctx, newgetsk, NULL); +#endif ret = g_mime_multipart_encrypted_decrypt(part, crypto_ctx, decrypt_result, err); +#if HAVE_GMIME_SESSION_KEYS + if (newgetsk != oldgetsk) + g_mime_crypto_context_set_retrieve_session_key (crypto_ctx, oldgetsk, NULL); +#endif #else - ret = g_mime_multipart_encrypted_decrypt(part, GMIME_DECRYPT_NONE, NULL, + GMimeDecryptFlags flags = GMIME_DECRYPT_NONE; + if (decrypt == NOTMUCH_DECRYPT_TRUE && decrypt_result) + flags |= GMIME_DECRYPT_EXPORT_SESSION_KEY; + ret = g_mime_multipart_encrypted_decrypt(part, flags, NULL, decrypt_result, err); #endif return ret;