Index: gnupg-2.0.19/g10/mainproc.c
===================================================================
--- gnupg-2.0.19/g10/mainproc.c
+++ gnupg-2.0.19/g10/mainproc.c
@@ -561,6 +561,18 @@
     if( !result )
 	result = decrypt_data( c, pkt->pkt.encrypted, c->dek );
 
+    /* If told to show the session key, try even on failed operations */
+    if(opt.show_session_key && c->dek != NULL && c->dek->keylen > 0)
+      {
+	int i;
+	char *buf = xmalloc ( c->dek->keylen*2 + 20 );
+	sprintf ( buf, "%d:", c->dek->algo );
+	for(i=0; i < c->dek->keylen; i++ )
+	  sprintf(buf+strlen(buf), "%02X", c->dek->key[i] );
+	log_info( "session key: `%s'\n", buf );
+	write_status_text ( STATUS_SESSION_KEY, buf );
+      }
+
     if( result == -1 )
 	;
     else if( !result || (gpg_err_code (result) == GPG_ERR_BAD_SIGNATURE
@@ -572,16 +584,6 @@
 	    write_status( STATUS_GOODMDC );
 	else if(!opt.no_mdc_warn)
 	    log_info (_("WARNING: message was not integrity protected\n"));
-	if(opt.show_session_key)
-	  {
-	    int i;
-	    char *buf = xmalloc ( c->dek->keylen*2 + 20 );
-	    sprintf ( buf, "%d:", c->dek->algo );
-	    for(i=0; i < c->dek->keylen; i++ )
-	      sprintf(buf+strlen(buf), "%02X", c->dek->key[i] );
-	    log_info( "session key: `%s'\n", buf );
-	    write_status_text ( STATUS_SESSION_KEY, buf );
-	  }
     }
     else if( result == G10ERR_BAD_SIGN ) {
 	log_error(_("WARNING: encrypted message has been manipulated!\n"));