1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-01-30 16:17:02 +01:00

See ChangeLog: Thu May 6 14:18:17 CEST 1999 Werner Koch

This commit is contained in:
Werner Koch 1999-05-06 12:26:10 +00:00
parent e5a79b2da8
commit 7cb8838061
27 changed files with 4036 additions and 3151 deletions

21
BUGS
View File

@ -32,7 +32,7 @@ and after about half a day in the rsync snapshots.
5. key has expiration date from 1. and gpg reports that pubkey
and seckey differ.
The for loop the exp.date is set before v3 detection?
[is this bug still there?]
[is this bug still alive?]
[ *] #5
/home/jam/.gnupg/pubring.gpg: can't open gdbm file: Can't be writer
@ -48,22 +48,5 @@ and after about half a day in the rsync snapshots.
--> IRIX bug still there
[ *] #13 1999-04-05
Trying to generate very large keys fails with a BUG in read_pool()
FIX: 1999-04-06
[ *] #14 1999-04-05 <anonymous>
If you use --s2k-cipher-algo twofish, the the program crashes with
a BUG at line 226 of passphrase.c.
FIX: 1999-04-06
[ **] #15 1999-04-05
Hash calculation for subkey bindings is not according to rfc2440 if
a 4 byte length header is used for the subkey.
FIX: 1999-04-06
Next #16
Next #17

View File

@ -1,3 +1,9 @@
Thu May 6 14:18:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
* README: Minor updates
* VERSION: Now 0.9.6
Thu Apr 8 09:35:53 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
* acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Fix for

20
OBUGS
View File

@ -44,4 +44,24 @@
gpg --list-secret-keys --with-colon SEGVs
FIX: 1999-03-10
[ *] #13 1999-04-05
Trying to generate very large keys fails with a BUG in read_pool()
FIX: 1999-04-06
[ *] #14 1999-04-05 <anonymous>
If you use --s2k-cipher-algo twofish, the the program crashes with
a BUG at line 226 of passphrase.c.
FIX: 1999-04-06
[ **] #15 1999-04-05
Hash calculation for subkey bindings is not according to rfc2440 if
a 4 byte length header is used for the subkey.
FIX: 1999-04-06
[***] #16 1999-03-23 <jafo@tummy.com>
Verifying detached signatures with an empty file yields a rc of 0.
FIX: 1999-05-06

49
README
View File

@ -1,13 +1,8 @@
Please note that this is only a bug fix release and some things
do not yet work - see TODO for parts which are problematic
-----BEGIN PGP SIGNED MESSAGE-----
GnuPG - The GNU Privacy Guard
-------------------------------
Version 0.9
Version 0.9.6
GnuPG is now in Beta test and you should report all bugs to the
mailing list (see below). The 0.9.x versions are released mainly
@ -17,29 +12,28 @@ do not yet work - see TODO for parts which are problematic
GnuPG works best on GNU/Linux or *BSD. Other Unices are
also supported but are not as well tested as the Free Unices.
Please verify the tar file with the PGP2 or GnuPG/PGP5
Please verify the tar file with the PGP2 or OpenPGP
signatures provided. My PGP2 key is well known and published in
the "Global Trust Register for 1998", ISBN 0-9532397-0-5.
I have included my pubring as "g10/pubring.asc", which contains
the key used to make GnuPG signatures:
"pub 1024D/57548DCD 1998-07-07 Werner Koch (gnupg sig) <dd9jn@gnu.org>"
"Key fingerprint = 6BD9 050F D8FC 941B 4341 2DCC 68B7 AB89 5754 8DCD"
My new DSA key is:
"pub 1024D/621CC013 1998-07-07 Werner Koch <werner.koch@guug.de>"
"Key fingerprint = ECAF 7590 EB34 43B5 C7CF 3ACB 6C7E E1B8 621C C013"
You may want add my new DSA key to your GnuPG pubring and use it in
You may want to add this DSA key to your GnuPG pubring and use it in
the future to verify new releases. Because you verified this README
file and _checked_that_it_is_really_my PGP2 key 0C9857A5, you can be
sure that the above fingerprints are correct.
quite sure that the above fingerprint is correct.
Please subscribe to g10@net.lut.ac.uk by sending a mail with
the word "subscribe" in the body to "g10-request@net.lut.ac.uk".
This mailing list is closed (only subscribers are allowed to post)
to avoid misuse by folks who don't know the Netiquette and trash
your mailspool with commercial junk.
Please subscribe to announce@gnupg.org by sending a mail with
a subject of "subscribe" to "announce-request@gnupg.org". If you
have problems, please subscribe to "gnupg-users@gnupg.org" by sending
mail with the subject "subscribe" to "gnupg-users-request@gnupg.org"
and ask there. The gnupg.org domain is hosted in Germany to avoid
possible legal problems with gnu.org (technical advices may count
as a violation of ITAR).
See the file COPYING for copyright and warranty information.
@ -72,9 +66,11 @@ do not yet work - see TODO for parts which are problematic
3) "make install"
4) You end up with the binaries "gpg" and "gpgm" in /usr/local/bin.
4) You end up with a "gpg" binray in /usr/local/bin.
5) Optional, but suggested, install the binary "gpg" as suid root.
5) To avoid swapping out of sensitive data, you can install "gpg" as
suid root. If you don't do so, you may want to add the option
"no-secmem-warning" to ~/.gnupg/options
@ -230,7 +226,8 @@ do not yet work - see TODO for parts which are problematic
key - different keys will always have different fingerprints.
It is easy to compare fingerprints by phone and I suggest
that you print your fingerprint on the back of your business
card.
card. To see the fingerprints of the secondary keys, you can
give the command twice; but this is normally not needed.
If you don't know the owner of the public key you are in trouble.
Suppose however that friend of yours knows someone who knows someone
@ -442,11 +439,11 @@ do not yet work - see TODO for parts which are problematic
Have fun and remember: Echelon is looking at you kid.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v0.9.2 (GNU/Linux)
Version: GnuPG v0.9.5 (GNU/Linux)
Comment: For info see http://www.gnupg.org
iQB1AwUBNr2fPh0Z9MEMmFelAQHqNAL/e7pApR0CGUJ/zuIsjaVhNGPEgKAglcEd
YuVdB+RCN0wq7ZfI0AHU2FdVISRACmSN3xituTTgeiOUsczM40EZ4l1XNfyRF768
fglui6XxEeYHFY7mSQMgzzFWDG0Squx0
=enRo
iQB1AwUBNzFgoB0Z9MEMmFelAQG1EgL/UlmBc7X9UoSh0ge1FNSNncHQGIX8wHkG
0BHOkcHS9XNxZokgkxoUTSRDFlXxW9auWpYKYeNkkck8S9ExtOJK6FABme6Daof0
Hfe4E7TA82T73gvsMMlN6wyys3k5gTRt
=FP1e
-----END PGP SIGNATURE-----

1
THANKS
View File

@ -5,6 +5,7 @@ errors.
Anand Kumria wildfire@progsoc.uts.edu.au
Ariel T Glenn ariel@columbia.edu
Bodo Moeller Bodo_Moeller@public.uni-hamburg.de
Bryan Fullerton bryanf@samurai.com
Brian Moore bem@cmc.net
Brian Warner warner@lothar.com

3
TODO
View File

@ -2,8 +2,6 @@
* add some status output put for signing and encryption.
replace the putc in primegen with some kind of status-fd outputs.
* Fix revocation and expire stuff. Subkey revocations are not detected.
* Speed up calculation of key validity.
* See why we always get this "Hmmm, public key not anymore available"
@ -19,7 +17,6 @@
encrypt package was found. Extension: display a list of all recipients.
* Add NO_PUBKEY and NO_SECKEY status lines.
* Add more NODATA status lines
* Solaris make has problems with the generated POTFILES - seems to be a
gettext bug.

View File

@ -1 +1 @@
0.9.5b
0.9.6

View File

@ -60,7 +60,7 @@ chdir () {
have_hash_algo () {
if ../g10/gpgm --homedir . --version | grep "Hash:.*$1" >/dev/null
if ../g10/gpg --homedir . --version | grep "Hash:.*$1" >/dev/null
then
true
else

View File

@ -41,7 +41,6 @@ libcipher_a_SOURCES = cipher.c \
des.c \
des.h \
twofish.c \
twofish.h \
blowfish.c \
blowfish.h \
cast5.c \

View File

@ -77,6 +77,9 @@ more arguments in future versions.
NODATA <what>
No data has been found. Codes for what are:
1 - No armored data.
2 - Expected a packet but did not found one.
3 - Invalid packet found, this may indicate a non OpenPGP message.
You may see more than one of these status lines.
TRUST_UNDEFINED
TRUST_NEVER

View File

@ -1,3 +1,15 @@
Thu May 6 14:18:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
* trustdb.c (check_trust): Check for revoked subkeys.
* pkclist.c (do_we_trust): Handled revoked subkeys.
(do_we_trust_pre): Ditto.
(check_signatures_trust): Ditto.
* build-packet.c (hash_public_key): Fix for ancient g10 keys.
* mainproc.c (do_proc_packets): Return EOF if no data has been read.
* g10.c (main): Catch errors for default operation.
Thu Apr 29 12:29:22 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
* sign.c (sign_file): Fixed hashing in case of no subpackets.

View File

@ -258,38 +258,42 @@ hash_public_key( MD_HANDLE md, PKT_public_key *pk )
pkt.pkt.public_key = pk;
if( (rc = build_packet( a, &pkt )) )
log_fatal("build public_key for hashing failed: %s\n", g10_errstr(rc));
/* skip the constructed header */
ctb = iobuf_get_noeof(a);
pktlen = 0;
if( (ctb & 0x40) ) {
c = iobuf_get_noeof(a);
if( c < 192 )
pktlen = c;
else if( c < 224 ) {
pktlen = (c - 192) * 256;
if( !(pk->version == 3 && pk->pubkey_algo == 16) ) {
/* skip the constructed header but don't do this for our very old
* v3 ElG keys */
ctb = iobuf_get_noeof(a);
pktlen = 0;
if( (ctb & 0x40) ) {
c = iobuf_get_noeof(a);
pktlen += c + 192;
if( c < 192 )
pktlen = c;
else if( c < 224 ) {
pktlen = (c - 192) * 256;
c = iobuf_get_noeof(a);
pktlen += c + 192;
}
else if( c == 255 ) {
pktlen = iobuf_get_noeof(a) << 24;
pktlen |= iobuf_get_noeof(a) << 16;
pktlen |= iobuf_get_noeof(a) << 8;
pktlen |= iobuf_get_noeof(a);
}
}
else if( c == 255 ) {
pktlen = iobuf_get_noeof(a) << 24;
pktlen |= iobuf_get_noeof(a) << 16;
pktlen |= iobuf_get_noeof(a) << 8;
pktlen |= iobuf_get_noeof(a);
else {
int lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
for( ; lenbytes; lenbytes-- ) {
pktlen <<= 8;
pktlen |= iobuf_get_noeof(a);
}
}
/* hash a header */
md_putc( md, 0x99 );
pktlen &= 0xffff; /* can't handle longer packets */
md_putc( md, pktlen >> 8 );
md_putc( md, pktlen & 0xff );
}
else {
int lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
for( ; lenbytes; lenbytes-- ) {
pktlen <<= 8;
pktlen |= iobuf_get_noeof(a);
}
}
/* hash a header */
md_putc( md, 0x99 );
pktlen &= 0xffff; /* can't handle longer packets */
md_putc( md, pktlen >> 8 );
md_putc( md, pktlen & 0xff );
/* hash the packet body (don't use pktlen here!) */
/* hash the packet body */
while( (c=iobuf_get(a)) != -1 ) {
#if 0
fprintf( fp," %02x", c );

View File

@ -1243,7 +1243,9 @@ main( int argc, char **argv )
set_packet_list_mode(1);
opt.list_packets=1;
}
proc_packets(NULL, a );
rc = proc_packets(NULL, a );
if( rc )
log_error("processing message failed: %s\n", g10_errstr(rc) );
iobuf_close(a);
}
break;

View File

@ -1438,7 +1438,8 @@ find_by_fpr( KBNODE keyblock, PKT_public_key *pk, const char *name, int mode )
keyid_from_pk( k->pkt->pkt.public_key, aki );
log_debug(" aki=%08lx%08lx algo=%d mode=%d an=%u\n",
(ulong)aki[0], (ulong)aki[1],
k->pkt->pkt.public_key->pubkey_algo, mode, an );
k->pkt->pkt.public_key->pubkey_algo, mode,
(unsigned)an );
}
if( an == mode
@ -1470,7 +1471,8 @@ find_by_fpr_sk( KBNODE keyblock, PKT_secret_key *sk,
keyid_from_sk( k->pkt->pkt.secret_key, aki );
log_debug(" aki=%08lx%08lx algo=%d mode=%d an=%u\n",
(ulong)aki[0], (ulong)aki[1],
k->pkt->pkt.secret_key->pubkey_algo, mode, an );
k->pkt->pkt.secret_key->pubkey_algo, mode,
(unsigned)an );
}
if( an == mode

View File

@ -302,7 +302,8 @@ dump_kbnode( KBNODE node )
fputs("\"\n", stderr);
}
else if( node->pkt->pkttype == PKT_SIGNATURE ) {
fprintf(stderr, " keyid=%08lX\n",
fprintf(stderr, " class=%02x keyid=%08lX\n",
node->pkt->pkt.signature->sig_class,
(ulong)node->pkt->pkt.signature->keyid[1] );
}
else if( node->pkt->pkttype == PKT_PUBLIC_KEY

View File

@ -122,8 +122,6 @@ check_all_keysigs( KBNODE keyblock, int only_selected )
int anyuid = 0;
for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) {
int is_rev = 0;
if( node->pkt->pkttype == PKT_USER_ID ) {
PKT_user_id *uid = node->pkt->pkt.user_id;
@ -140,10 +138,11 @@ check_all_keysigs( KBNODE keyblock, int only_selected )
}
}
else if( selected && node->pkt->pkttype == PKT_SIGNATURE
&& (node->pkt->pkt.signature->sig_class&~3) == 0x10
&& (is_rev = node->pkt->pkt.signature->sig_class == 0x30) ) {
&& ( (node->pkt->pkt.signature->sig_class&~3) == 0x10
|| node->pkt->pkt.signature->sig_class == 0x30 ) ) {
PKT_signature *sig = node->pkt->pkt.signature;
int sigrc, selfsig;
int is_rev = sig->sig_class == 0x30;
switch( (rc = check_key_signature( keyblock, node, &selfsig)) ) {
case 0:
@ -956,7 +955,7 @@ show_key_with_all_names( KBNODE keyblock, int only_marked,
int with_fpr, int with_subkeys, int with_prefs )
{
KBNODE node;
int i;
int i, rc;
/* the keys */
for( node = keyblock; node; node = node->next ) {
@ -1001,6 +1000,20 @@ show_key_with_all_names( KBNODE keyblock, int only_marked,
datestr_from_sk(sk),
expirestr_from_sk(sk) );
}
else if( with_subkeys && node->pkt->pkttype == PKT_SIGNATURE
&& node->pkt->pkt.signature->sig_class == 0x28 ) {
PKT_signature *sig = node->pkt->pkt.signature;
rc = check_key_signature( keyblock, node, NULL );
if( !rc )
tty_printf( "rev! subkey has been revoked: %s\n",
datestr_from_sig( sig ) );
else if( rc == G10ERR_BAD_SIGN )
tty_printf( "rev- faked revocation found\n" );
else if( rc )
tty_printf( "rev? problem checking revocation: %s\n",
g10_errstr(rc) );
}
}
/* the user ids */
i = 0;
@ -1677,7 +1690,7 @@ menu_revsig( KBNODE keyblock )
pkt = m_alloc_clear( sizeof *pkt );
pkt->pkttype = PKT_SIGNATURE;
pkt->pkt.signature = sig;
insert_kbnode( unode, new_kbnode(pkt), PKT_SIGNATURE );
insert_kbnode( unode, new_kbnode(pkt), 0 );
goto reloop;
}
@ -1701,7 +1714,7 @@ menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock )
int upd_trust = 0;
int rc;
reloop: /* (better this way becuase we are modifing the keyring) */
reloop: /* (better this way because we are modifing the keyring) */
mainpk = pub_keyblock->pkt->pkt.public_key;
for( node = pub_keyblock; node; node = node->next ) {
if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
@ -1726,7 +1739,7 @@ menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock )
pkt = m_alloc_clear( sizeof *pkt );
pkt->pkttype = PKT_SIGNATURE;
pkt->pkt.signature = sig;
insert_kbnode( node, new_kbnode(pkt), PKT_SIGNATURE );
insert_kbnode( node, new_kbnode(pkt), 0 );
goto reloop;
}
}

View File

@ -215,7 +215,7 @@ proc_pubkey_enc( CTX c, PACKET *pkt )
else {
/* fixme: defer this message until we have parsed all packets of
* this type - do this by building a list of keys with their stati
* and store it with the conetxt. do_proc_packets can then use
* and store it with the context. do_proc_packets can then use
* this list to display some information */
log_error(_("public key decryption failed: %s\n"), g10_errstr(result));
}
@ -307,7 +307,7 @@ proc_plaintext( CTX c, PACKET *pkt )
md_enable( c->mfx.md, DIGEST_ALGO_SHA1 );
md_enable( c->mfx.md, DIGEST_ALGO_MD5 );
}
#if 1
#if 0
#warning md_start_debug is enabled
md_start_debug( c->mfx.md, "verify" );
#endif
@ -753,12 +753,13 @@ do_proc_packets( CTX c, IOBUF a )
{
PACKET *pkt = m_alloc( sizeof *pkt );
int rc=0;
int any_data=0;
int newpkt;
c->iobuf = a;
init_packet(pkt);
while( (rc=parse_packet(a, pkt)) != -1 ) {
any_data = 1;
if( rc ) {
free_packet(pkt);
if( rc == G10ERR_INVALID_PACKET )
@ -844,7 +845,13 @@ do_proc_packets( CTX c, IOBUF a )
else
free_packet(pkt);
}
rc = 0;
if( rc == G10ERR_INVALID_PACKET )
write_status_text( STATUS_NODATA, "3" );
if( any_data )
rc = 0;
else if( rc == -1 )
write_status_text( STATUS_NODATA, "2" );
leave:
release_list( c );

View File

@ -287,6 +287,16 @@ do_we_trust( PKT_public_key *pk, int trustlevel )
_("Use this key anyway? ")) )
return 0;
}
else if( (trustlevel & TRUST_FLAG_SUB_REVOKED) ) {
log_info(_("key %08lX: subkey has been revoked!\n"),
(ulong)keyid_from_pk( pk, NULL) );
if( opt.batch )
return 0;
if( !cpr_get_answer_is_yes("revoked_key.override",
_("Use this key anyway? ")) )
return 0;
}
switch( (trustlevel & TRUST_MASK) ) {
@ -368,6 +378,8 @@ do_we_trust_pre( PKT_public_key *pk, int trustlevel )
if( (trustlevel & TRUST_FLAG_REVOKED) && !rc )
return 0;
if( (trustlevel & TRUST_FLAG_SUB_REVOKED) && !rc )
return 0;
else if( !opt.batch && !rc ) {
char *p;
u32 keyid[2];
@ -435,6 +447,10 @@ check_signatures_trust( PKT_signature *sig )
log_info(_("WARNING: This key has been revoked by its owner!\n"));
log_info(_(" This could mean that the signature is forgery.\n"));
}
else if( (trustlevel & TRUST_FLAG_SUB_REVOKED) ) {
write_status( STATUS_KEYREVOKED );
log_info(_("WARNING: This subkey has been revoked by its owner!\n"));
}
switch( (trustlevel & TRUST_MASK) ) {

View File

@ -2780,6 +2780,36 @@ check_trust( PKT_public_key *pk, unsigned *r_trustlevel,
}
}
/* is a subkey has been requested, we have to check its keyflags */
if( !rc ) {
TRUSTREC krec;
byte fpr[MAX_FINGERPRINT_LEN] = {0}; /* to avoid compiler warnings */
size_t fprlen = 0;
ulong recno;
int kcount=0;
for( recno = rec.r.dir.keylist; recno; recno = krec.r.key.next ) {
read_record( recno, &krec, RECTYPE_KEY );
if( ++kcount == 1 )
continue; /* skip the primary key */
if( kcount == 2 ) /* now we need the fingerprint */
fingerprint_from_pk( pk, fpr, &fprlen );
if( krec.r.key.fingerprint_len == fprlen
&& !memcmp( krec.r.key.fingerprint, fpr, fprlen ) ) {
/* found the subkey */
if( (krec.r.key.keyflags & KEYF_REVOKED) )
trustlevel |= TRUST_FLAG_SUB_REVOKED;
/* should we check for keybinding here??? */
/* Hmmm: Maybe this whole checking stuff should not go
* into the trustdb, but be done direct from the keyblock.
* Chnage this all when we add an abstarction layer around
* the way certificates are handled by different standards */
break;
}
}
}
leave:
if( DBG_TRUST )

View File

@ -33,6 +33,7 @@
#define TRUST_ULTIMATE 6 /* u: ultimately trusted */
/* trust values not covered by the mask */
#define TRUST_FLAG_REVOKED 32 /* r: revoked */
#define TRUST_FLAG_SUB_REVOKED 64
#define PREFTYPE_SYM 1

987
po/de.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

988
po/fr.po

File diff suppressed because it is too large Load Diff

985
po/it.po

File diff suppressed because it is too large Load Diff

987
po/pl.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

987
po/ru.po

File diff suppressed because it is too large Load Diff