crypto: Make _notmuch_crypto_decrypt take a GMimeObject

As we prepare to handle S/MIME-encrypted PKCS#7 EnvelopedData (which
is not multipart), we don't want to be limited to passing only
GMimeMultipartEncrypted MIME parts to _notmuch_crypto_decrypt.

There is no functional change here, just a matter of adjusting how we
pass arguments internally.

Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
This commit is contained in:
Daniel Kahn Gillmor 2020-05-12 18:29:36 -04:00 committed by David Bremner
parent 1b9f4a9863
commit 2b108728c4
4 changed files with 9 additions and 10 deletions

View file

@ -369,7 +369,7 @@ _index_content_type (notmuch_message_t *message, GMimeObject *part)
static void static void
_index_encrypted_mime_part (notmuch_message_t *message, notmuch_indexopts_t *indexopts, _index_encrypted_mime_part (notmuch_message_t *message, notmuch_indexopts_t *indexopts,
GMimeMultipartEncrypted *part, GMimeObject *part,
_notmuch_message_crypto_t *msg_crypto); _notmuch_message_crypto_t *msg_crypto);
static void static void
@ -439,7 +439,7 @@ _index_mime_part (notmuch_message_t *message,
g_mime_multipart_get_part (multipart, i)); g_mime_multipart_get_part (multipart, i));
if (i == GMIME_MULTIPART_ENCRYPTED_CONTENT) { if (i == GMIME_MULTIPART_ENCRYPTED_CONTENT) {
_index_encrypted_mime_part (message, indexopts, _index_encrypted_mime_part (message, indexopts,
GMIME_MULTIPART_ENCRYPTED (part), part,
msg_crypto); msg_crypto);
} else { } else {
if (i != GMIME_MULTIPART_ENCRYPTED_VERSION) { if (i != GMIME_MULTIPART_ENCRYPTED_VERSION) {
@ -551,7 +551,7 @@ _index_mime_part (notmuch_message_t *message,
static void static void
_index_encrypted_mime_part (notmuch_message_t *message, _index_encrypted_mime_part (notmuch_message_t *message,
notmuch_indexopts_t *indexopts, notmuch_indexopts_t *indexopts,
GMimeMultipartEncrypted *encrypted_data, GMimeObject *encrypted_data,
_notmuch_message_crypto_t *msg_crypto) _notmuch_message_crypto_t *msg_crypto)
{ {
notmuch_status_t status; notmuch_status_t status;
@ -603,7 +603,7 @@ _index_encrypted_mime_part (notmuch_message_t *message,
g_object_unref (decrypt_result); g_object_unref (decrypt_result);
} }
GMimeObject *toindex = clear; GMimeObject *toindex = clear;
if (_notmuch_message_crypto_potential_payload (msg_crypto, clear, GMIME_OBJECT (encrypted_data), GMIME_MULTIPART_ENCRYPTED_CONTENT) && if (_notmuch_message_crypto_potential_payload (msg_crypto, clear, encrypted_data, GMIME_MULTIPART_ENCRYPTED_CONTENT) &&
msg_crypto->decryption_status == NOTMUCH_MESSAGE_DECRYPTED_FULL) { msg_crypto->decryption_status == NOTMUCH_MESSAGE_DECRYPTED_FULL) {
toindex = _notmuch_repair_crypto_payload_skip_legacy_display (clear); toindex = _notmuch_repair_crypto_payload_skip_legacy_display (clear);
if (toindex != clear) if (toindex != clear)

View file

@ -253,7 +253,6 @@ node_decrypt_and_verify (mime_node_t *node, GMimeObject *part)
GError *err = NULL; GError *err = NULL;
GMimeDecryptResult *decrypt_result = NULL; GMimeDecryptResult *decrypt_result = NULL;
notmuch_status_t status; notmuch_status_t status;
GMimeMultipartEncrypted *encrypteddata = GMIME_MULTIPART_ENCRYPTED (part);
notmuch_message_t *message = NULL; notmuch_message_t *message = NULL;
if (! node->unwrapped_child) { if (! node->unwrapped_child) {
@ -266,7 +265,7 @@ node_decrypt_and_verify (mime_node_t *node, GMimeObject *part)
node->unwrapped_child = _notmuch_crypto_decrypt (&node->decrypt_attempted, node->unwrapped_child = _notmuch_crypto_decrypt (&node->decrypt_attempted,
node->ctx->crypto->decrypt, node->ctx->crypto->decrypt,
message, message,
encrypteddata, &decrypt_result, &err); part, &decrypt_result, &err);
if (node->unwrapped_child) if (node->unwrapped_child)
set_unwrapped_child_destructor (node); set_unwrapped_child_destructor (node);
} }

View file

@ -34,7 +34,7 @@ GMimeObject *
_notmuch_crypto_decrypt (bool *attempted, _notmuch_crypto_decrypt (bool *attempted,
notmuch_decryption_policy_t decrypt, notmuch_decryption_policy_t decrypt,
notmuch_message_t *message, notmuch_message_t *message,
GMimeMultipartEncrypted *part, GMimeObject *part,
GMimeDecryptResult **decrypt_result, GMimeDecryptResult **decrypt_result,
GError **err) GError **err)
{ {
@ -55,7 +55,7 @@ _notmuch_crypto_decrypt (bool *attempted,
} }
if (attempted) if (attempted)
*attempted = true; *attempted = true;
ret = g_mime_multipart_encrypted_decrypt (part, ret = g_mime_multipart_encrypted_decrypt (GMIME_MULTIPART_ENCRYPTED (part),
GMIME_DECRYPT_NONE, GMIME_DECRYPT_NONE,
notmuch_message_properties_value (list), notmuch_message_properties_value (list),
decrypt_result, err); decrypt_result, err);
@ -81,7 +81,7 @@ _notmuch_crypto_decrypt (bool *attempted,
GMimeDecryptFlags flags = GMIME_DECRYPT_NONE; GMimeDecryptFlags flags = GMIME_DECRYPT_NONE;
if (decrypt == NOTMUCH_DECRYPT_TRUE && decrypt_result) if (decrypt == NOTMUCH_DECRYPT_TRUE && decrypt_result)
flags |= GMIME_DECRYPT_EXPORT_SESSION_KEY; flags |= GMIME_DECRYPT_EXPORT_SESSION_KEY;
ret = g_mime_multipart_encrypted_decrypt (part, flags, NULL, ret = g_mime_multipart_encrypted_decrypt (GMIME_MULTIPART_ENCRYPTED (part), flags, NULL,
decrypt_result, err); decrypt_result, err);
return ret; return ret;
} }

View file

@ -18,7 +18,7 @@ GMimeObject *
_notmuch_crypto_decrypt (bool *attempted, _notmuch_crypto_decrypt (bool *attempted,
notmuch_decryption_policy_t decrypt, notmuch_decryption_policy_t decrypt,
notmuch_message_t *message, notmuch_message_t *message,
GMimeMultipartEncrypted *part, GMimeObject *part,
GMimeDecryptResult **decrypt_result, GMimeDecryptResult **decrypt_result,
GError **err); GError **err);