diff --git a/g10/mainproc.c b/g10/mainproc.c index b032afb8b..871403ad7 100644 --- a/g10/mainproc.c +++ b/g10/mainproc.c @@ -98,6 +98,7 @@ struct mainproc_context ulong symkeys; /* Number of symmetrically encrypted session keys. */ struct kidlist_item *pkenc_list; /* List of encryption packets. */ int seen_pkt_encrypted_aead; /* PKT_ENCRYPTED_AEAD packet seen. */ + int seen_pkt_encrypted_mdc; /* PKT_ENCRYPTED_MDC packet seen. */ struct { unsigned int sig_seen:1; /* Set to true if a signature packet has been seen. */ @@ -147,6 +148,7 @@ release_list( CTX c ) c->any.uncompress_failed = 0; c->last_was_session_key = 0; c->seen_pkt_encrypted_aead = 0; + c->seen_pkt_encrypted_mdc = 0; xfree (c->dek); c->dek = NULL; } @@ -639,6 +641,8 @@ proc_encrypted (CTX c, PACKET *pkt) if (pkt->pkttype == PKT_ENCRYPTED_AEAD) c->seen_pkt_encrypted_aead = 1; + if (pkt->pkttype == PKT_ENCRYPTED_MDC) + c->seen_pkt_encrypted_mdc = 1; if (early_plaintext) { @@ -864,7 +868,7 @@ proc_encrypted (CTX c, PACKET *pkt) static int -have_seen_pkt_encrypted_aead( CTX c ) +have_seen_pkt_encrypted_aead_or_mdc( CTX c ) { CTX cc; @@ -872,6 +876,8 @@ have_seen_pkt_encrypted_aead( CTX c ) { if (cc->seen_pkt_encrypted_aead) return 1; + if (cc->seen_pkt_encrypted_mdc) + return 1; } return 0; @@ -953,7 +959,7 @@ proc_plaintext( CTX c, PACKET *pkt ) } } - if (!any && !opt.skip_verify && !have_seen_pkt_encrypted_aead(c)) + if (!any && !opt.skip_verify && !have_seen_pkt_encrypted_aead_or_mdc(c)) { /* This is for the old GPG LITERAL+SIG case. It's not legal according to 2440, so hopefully it won't come up that often.