Index: include/cipher.h =================================================================== RCS file: /cvs/gnupg/gnupg/include/cipher.h,v retrieving revision 1.63 diff -u -r1.63 cipher.h --- include/cipher.h 29 Nov 2004 21:14:18 -0000 1.63 +++ include/cipher.h 8 Feb 2005 04:10:29 -0000 @@ -75,6 +75,7 @@ int keylen; int algo_info_printed; int use_mdc; + int symmetric; byte key[32]; /* this is the largest used keylen (256 bit) */ } DEK; Index: g10/mainproc.c =================================================================== RCS file: /cvs/gnupg/gnupg/g10/mainproc.c,v retrieving revision 1.161 diff -u -r1.161 mainproc.c --- g10/mainproc.c 21 Oct 2004 19:18:47 -0000 1.161 +++ g10/mainproc.c 8 Feb 2005 04:10:30 -0000 @@ -330,6 +330,8 @@ if(c->dek) { + c->dek->symmetric=1; + /* FIXME: This doesn't work perfectly if a symmetric key comes before a public key in the message - if the user doesn't know the passphrase, then there is Index: g10/encr-data.c =================================================================== RCS file: /cvs/gnupg/gnupg/g10/encr-data.c,v retrieving revision 1.30 diff -u -r1.30 encr-data.c --- g10/encr-data.c 8 Oct 2004 21:54:26 -0000 1.30 +++ g10/encr-data.c 8 Feb 2005 04:10:30 -0000 @@ -125,7 +125,7 @@ cipher_sync( dfx.cipher_hd ); p = temp; /* log_hexdump( "prefix", temp, nprefix+2 ); */ - if( p[nprefix-2] != p[nprefix] || p[nprefix-1] != p[nprefix+1] ) { + if( dek->symmetric && (p[nprefix-2] != p[nprefix] || p[nprefix-1] != p[nprefix+1]) ) { rc = G10ERR_BAD_KEY; goto leave; }