diff options
Diffstat (limited to 'g10/mainproc.c')
-rw-r--r-- | g10/mainproc.c | 49 |
1 files changed, 16 insertions, 33 deletions
diff --git a/g10/mainproc.c b/g10/mainproc.c index 17c958feb..a560fcbe5 100644 --- a/g10/mainproc.c +++ b/g10/mainproc.c @@ -1,4 +1,4 @@ -/* mainproc.c - handle packets +/* maPPPPinproc.c - handle packets * Copyright (C) 1998, 1999 Free Software Foundation, Inc. * * This file is part of GnuPG. @@ -44,7 +44,7 @@ */ typedef struct mainproc_context *CTX; struct mainproc_context { - struct mainproc_context *anchor; + struct mainproc_context *anchor; /* may be useful in the future */ PKT_public_key *last_pubkey; PKT_secret_key *last_seckey; PKT_user_id *last_user_id; @@ -60,7 +60,6 @@ struct mainproc_context { IOBUF iobuf; /* used to get the filename etc. */ int trustletter; /* temp usage in list_node */ ulong local_id; /* ditto */ - int is_encrypted; /* used to check the MDC */ }; @@ -229,7 +228,6 @@ proc_encrypted( CTX c, PACKET *pkt ) int result = 0; /*log_debug("dat: %sencrypted data\n", c->dek?"":"conventional ");*/ - c->is_encrypted = 1; if( !c->dek && !c->last_was_session_key ) { /* assume this is old conventional encrypted data */ c->dek = passphrase_to_dek( NULL, @@ -247,6 +245,12 @@ proc_encrypted( CTX c, PACKET *pkt ) write_status( STATUS_DECRYPTION_OKAY ); if( opt.verbose > 1 ) log_info(_("decryption okay\n")); + if( pkt->pkt.encrypted->mdc_method ) + write_status( STATUS_GOODMDC ); + } + else if( result == G10ERR_BAD_SIGN ) { + log_error(_("WARNING: encrypted message has been manipulated!\n")); + write_status( STATUS_BADMDC ); } else { write_status( STATUS_DECRYPTION_FAILED ); @@ -259,6 +263,7 @@ proc_encrypted( CTX c, PACKET *pkt ) } + static void proc_plaintext( CTX c, PACKET *pkt ) { @@ -353,16 +358,6 @@ proc_compressed( CTX c, PACKET *pkt ) c->last_was_session_key = 0; } -static int -is_encrypted( CTX c ) -{ - for( ; c; c = c->anchor ) { - if( c->is_encrypted ) - return 1; - } - return 0; -} - /**************** * check the signature * Returns: 0 = valid signature or an error code @@ -763,7 +758,8 @@ do_proc_packets( CTX c, IOBUF a ) switch( pkt->pkttype ) { case PKT_PUBKEY_ENC: proc_pubkey_enc( c, pkt ); break; case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break; - case PKT_ENCRYPTED: proc_encrypted( c, pkt ); break; + case PKT_ENCRYPTED: + case PKT_ENCRYPTED_MDC: proc_encrypted( c, pkt ); break; case PKT_COMPRESSED: proc_compressed( c, pkt ); break; default: newpkt = 0; break; } @@ -776,6 +772,7 @@ do_proc_packets( CTX c, IOBUF a ) case PKT_SYMKEY_ENC: case PKT_PUBKEY_ENC: case PKT_ENCRYPTED: + case PKT_ENCRYPTED_MDC: rc = G10ERR_UNEXPECTED; goto leave; case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break; @@ -795,7 +792,8 @@ do_proc_packets( CTX c, IOBUF a ) case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break; case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break; case PKT_PUBKEY_ENC: proc_pubkey_enc( c, pkt ); break; - case PKT_ENCRYPTED: proc_encrypted( c, pkt ); break; + case PKT_ENCRYPTED: + case PKT_ENCRYPTED_MDC: proc_encrypted( c, pkt ); break; case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break; case PKT_COMPRESSED: proc_compressed( c, pkt ); break; case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break; @@ -818,7 +816,8 @@ do_proc_packets( CTX c, IOBUF a ) case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break; case PKT_PUBKEY_ENC: proc_pubkey_enc( c, pkt ); break; case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break; - case PKT_ENCRYPTED: proc_encrypted( c, pkt ); break; + case PKT_ENCRYPTED: + case PKT_ENCRYPTED_MDC: proc_encrypted( c, pkt ); break; case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break; case PKT_COMPRESSED: proc_compressed( c, pkt ); break; case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break; @@ -855,22 +854,6 @@ do_proc_packets( CTX c, IOBUF a ) } -#if 0 /* old MDC hack code preserved to reuse the messages later */ - if( !rc ) { - if( opt.verbose ) - log_info(_("encrypted message is valid\n")); - write_status( STATUS_GOODMDC ); - } - else if( rc == G10ERR_BAD_SIGN ) { - log_error(_("WARNING: encrypted message has been manipulated!\n")); - write_status( STATUS_BADMDC ); - } - else { - write_status( STATUS_ERRMDC ); - log_error(_("Can't check MDC: %s\n"), g10_errstr(rc) ); - } -#endif - static int check_sig_and_print( CTX c, KBNODE node ) { |