diff -ur gnupg-1.0.6.orig/g10/keyedit.c gnupg-1.0.6/g10/keyedit.c --- gnupg-1.0.6.orig/g10/keyedit.c Fri May 25 08:58:51 2001 +++ gnupg-1.0.6/g10/keyedit.c Fri Jul 27 09:19:31 2001 @@ -367,7 +367,7 @@ node->pkt->pkt.user_id, NULL, sk, - 0x10, 0, + 0x10, 0, local ? 4 : 0, sign_mk_attrib, &attrib ); if( rc ) { @@ -1298,7 +1298,7 @@ sec_where = NULL; assert(pk && sk ); - rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, + rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, 0, keygen_add_std_prefs, pk ); free_secret_key( sk ); if( rc ) { @@ -1593,11 +1593,11 @@ /* create new self signature */ if( mainkey ) rc = make_keysig_packet( &newsig, main_pk, uid, NULL, - sk, 0x13, 0, + sk, 0x13, 0, 0, keygen_add_std_prefs, main_pk ); else rc = make_keysig_packet( &newsig, main_pk, NULL, sub_pk, - sk, 0x18, 0, + sk, 0x18, 0, 0, keygen_add_key_expire, sub_pk ); if( rc ) { log_error("make_keysig_packet failed: %s\n", @@ -1917,7 +1917,7 @@ unode->pkt->pkt.user_id, NULL, sk, - 0x30, 0, + 0x30, 0, 0, sign_mk_attrib, &attrib ); free_secret_key(sk); @@ -1979,7 +1979,7 @@ node->flag &= ~NODFLG_SELKEY; sk = copy_secret_key( NULL, sec_keyblock->pkt->pkt.secret_key ); - rc = make_keysig_packet( &sig, mainpk, NULL, subpk, sk, 0x28, 0, + rc = make_keysig_packet( &sig, mainpk, NULL, subpk, sk, 0x28, 0, 0, sign_mk_attrib, &attrib ); free_secret_key(sk); diff -ur gnupg-1.0.6.orig/g10/keygen.c gnupg-1.0.6/g10/keygen.c --- gnupg-1.0.6.orig/g10/keygen.c Tue May 29 08:32:11 2001 +++ gnupg-1.0.6/g10/keygen.c Fri Jul 27 09:21:48 2001 @@ -190,7 +190,7 @@ cache_public_key (pk); /* and make the signature */ - rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, + rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, 0, keygen_add_std_prefs, pk ); if( rc ) { log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); @@ -235,7 +235,7 @@ BUG(); /* and make the signature */ - rc = make_keysig_packet( &sig, pk, NULL, subpk, sk, 0x18, 0, + rc = make_keysig_packet( &sig, pk, NULL, subpk, sk, 0x18, 0, 0, keygen_add_key_expire, subpk ); if( rc ) { log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); diff -ur gnupg-1.0.6.orig/g10/packet.h gnupg-1.0.6/g10/packet.h --- gnupg-1.0.6.orig/g10/packet.h Sun May 27 16:08:48 2001 +++ gnupg-1.0.6/g10/packet.h Fri Jul 27 09:17:54 2001 @@ -403,6 +403,7 @@ PKT_user_id *uid, PKT_public_key *subpk, PKT_secret_key *sk, int sigclass, int digest_algo, + int sig_version, int (*mksubpkt)(PKT_signature *, void *), void *opaque ); diff -ur gnupg-1.0.6.orig/g10/revoke.c gnupg-1.0.6/g10/revoke.c --- gnupg-1.0.6.orig/g10/revoke.c Fri May 25 08:58:52 2001 +++ gnupg-1.0.6/g10/revoke.c Fri Jul 27 09:21:06 2001 @@ -191,7 +191,7 @@ iobuf_push_filter( out, armor_filter, &afx ); /* create it */ - rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0, + rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0, 0, revocation_reason_build_cb, reason ); if( rc ) { diff -ur gnupg-1.0.6.orig/g10/sign.c gnupg-1.0.6/g10/sign.c --- gnupg-1.0.6.orig/g10/sign.c Tue Mar 27 16:23:03 2001 +++ gnupg-1.0.6/g10/sign.c Fri Jul 27 09:17:18 2001 @@ -802,6 +802,7 @@ PKT_user_id *uid, PKT_public_key *subpk, PKT_secret_key *sk, int sigclass, int digest_algo, + int sig_version, int (*mksubpkt)(PKT_signature *, void *), void *opaque ) { @@ -812,6 +813,10 @@ assert( (sigclass >= 0x10 && sigclass <= 0x13) || sigclass == 0x20 || sigclass == 0x18 || sigclass == 0x30 || sigclass == 0x28 ); + + if( sk->version > sig_version ) + sig_version = sk->version; + if( !digest_algo ) { switch( sk->pubkey_algo ) { case PUBKEY_ALGO_DSA: digest_algo = DIGEST_ALGO_SHA1; break; @@ -828,7 +833,7 @@ hash_public_key( md, subpk ); } else if( sigclass != 0x20 ) { - if( sk->version >=4 ) { + if( sig_version >=4 ) { byte buf[5]; buf[0] = 0xb4; /* indicates a userid packet */ buf[1] = uid->len >> 24; /* always use 4 length bytes */ @@ -841,7 +846,7 @@ } /* and make the signature packet */ sig = m_alloc_clear( sizeof *sig ); - sig->version = sk->version; + sig->version = sig_version; keyid_from_sk( sk, sig->keyid ); sig->pubkey_algo = sk->pubkey_algo; sig->digest_algo = digest_algo;