1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00

* packet.h, getkey.c (merge_selfsigs_main, sig_to_revoke_info), keyid.c

(revokestr_from_pk), keyedit.c (show_key_with_all_names): Show who revoked
a key (either the same key or a designated revoker) and when.
This commit is contained in:
David Shaw 2004-12-30 03:26:57 +00:00
parent f539f3d2b2
commit b37facc593
5 changed files with 46 additions and 11 deletions

View File

@ -1,3 +1,10 @@
2004-12-29 David Shaw <dshaw@jabberwocky.com>
* packet.h, getkey.c (merge_selfsigs_main, sig_to_revoke_info),
keyid.c (revokestr_from_pk), keyedit.c (show_key_with_all_names):
Show who revoked a key (either the same key or a designated
revoker) and when.
2004-12-28 Werner Koch <wk@g10code.com> 2004-12-28 Werner Koch <wk@g10code.com>
* ccid-driver.c (find_endpoint): New. * ccid-driver.c (find_endpoint): New.

View File

@ -1387,7 +1387,16 @@ fixup_uidnode ( KBNODE uidnode, KBNODE signode, u32 keycreated )
} }
static void static void
merge_selfsigs_main( KBNODE keyblock, int *r_revoked, u32 *r_revokedate ) sig_to_revoke_info(PKT_signature *sig,struct revoke_info *rinfo)
{
rinfo->date = sig->timestamp;
rinfo->algo = sig->pubkey_algo;
rinfo->keyid[0] = sig->keyid[0];
rinfo->keyid[1] = sig->keyid[1];
}
static void
merge_selfsigs_main(KBNODE keyblock, int *r_revoked, struct revoke_info *rinfo)
{ {
PKT_public_key *pk = NULL; PKT_public_key *pk = NULL;
KBNODE k; KBNODE k;
@ -1402,7 +1411,8 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked, u32 *r_revokedate )
byte sigversion = 0; byte sigversion = 0;
*r_revoked = 0; *r_revoked = 0;
*r_revokedate = 0; memset(rinfo,0,sizeof(*rinfo));
if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY ) if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY )
BUG (); BUG ();
pk = keyblock->pkt->pkt.public_key; pk = keyblock->pkt->pkt.public_key;
@ -1448,7 +1458,7 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked, u32 *r_revokedate )
* that key. * that key.
*/ */
*r_revoked = 1; *r_revoked = 1;
*r_revokedate = sig->timestamp; sig_to_revoke_info(sig,rinfo);
} }
else if ( IS_KEY_SIG (sig) ) { else if ( IS_KEY_SIG (sig) ) {
/* Add any revocation keys onto the pk. This is /* Add any revocation keys onto the pk. This is
@ -1558,7 +1568,7 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked, u32 *r_revokedate )
if(rc==0) if(rc==0)
{ {
*r_revoked=2; *r_revoked=2;
*r_revokedate=sig->timestamp; sig_to_revoke_info(sig,rinfo);
/* don't continue checking since we can't be any /* don't continue checking since we can't be any
more revoked than this */ more revoked than this */
break; break;
@ -1894,7 +1904,7 @@ merge_selfsigs_subkey( KBNODE keyblock, KBNODE subnode )
problem is in the distribution. Plus, PGP (7) problem is in the distribution. Plus, PGP (7)
does this the same way. */ does this the same way. */
subpk->is_revoked = 1; subpk->is_revoked = 1;
subpk->revokedate = sig->timestamp; sig_to_revoke_info(sig,&subpk->revoked);
/* although we could stop now, we continue to /* although we could stop now, we continue to
* figure out other information like the old expiration * figure out other information like the old expiration
* time */ * time */
@ -2011,7 +2021,7 @@ merge_selfsigs( KBNODE keyblock )
{ {
KBNODE k; KBNODE k;
int revoked; int revoked;
u32 revokedate; struct revoke_info rinfo;
PKT_public_key *main_pk; PKT_public_key *main_pk;
prefitem_t *prefs; prefitem_t *prefs;
int mdc_feature; int mdc_feature;
@ -2028,7 +2038,7 @@ merge_selfsigs( KBNODE keyblock )
BUG (); BUG ();
} }
merge_selfsigs_main ( keyblock, &revoked, &revokedate ); merge_selfsigs_main ( keyblock, &revoked, &rinfo );
/* now merge in the data from each of the subkeys */ /* now merge in the data from each of the subkeys */
for(k=keyblock; k; k = k->next ) { for(k=keyblock; k; k = k->next ) {
@ -2051,7 +2061,7 @@ merge_selfsigs( KBNODE keyblock )
if(revoked && !pk->is_revoked) if(revoked && !pk->is_revoked)
{ {
pk->is_revoked = revoked; pk->is_revoked = revoked;
pk->revokedate = revokedate; memcpy(&pk->revoked,&rinfo,sizeof(rinfo));
} }
if(main_pk->has_expired) if(main_pk->has_expired)
pk->has_expired = main_pk->has_expired; pk->has_expired = main_pk->has_expired;

View File

@ -2317,6 +2317,15 @@ show_key_with_all_names( KBNODE keyblock, int only_marked, int with_revoker,
primary=pk; primary=pk;
} }
if(pk->is_revoked)
{
char *user=get_user_id_string_native(pk->revoked.keyid);
const char *algo=pubkey_algo_to_string(pk->revoked.algo);
tty_printf(_("This key was revoked on %s by %s key %s\n"),
revokestr_from_pk(pk),algo?algo:"?",user);
m_free(user);
}
if(with_revoker) if(with_revoker)
{ {
if( !pk->revkey && pk->numrevkeys ) if( !pk->revkey && pk->numrevkeys )

View File

@ -529,9 +529,9 @@ revokestr_from_pk( PKT_public_key *pk )
static char buffer[11+5]; static char buffer[11+5];
time_t atime; time_t atime;
if(!pk->revokedate) if(!pk->revoked.date)
return _("never "); return _("never ");
atime=pk->revokedate; atime=pk->revoked.date;
return mk_datestr (buffer, atime); return mk_datestr (buffer, atime);
} }

View File

@ -186,6 +186,15 @@ typedef struct {
char name[1]; char name[1];
} PKT_user_id; } PKT_user_id;
struct revoke_info
{
/* revoked at this date */
u32 date;
/* the keyid of the revoking key (selfsig or designated revoker) */
u32 keyid[2];
/* the algo of the revoking key */
byte algo;
};
/**************** /****************
* Note about the pkey/skey elements: We assume that the secret keys * Note about the pkey/skey elements: We assume that the secret keys
@ -197,7 +206,7 @@ typedef struct {
u32 timestamp; /* key made */ u32 timestamp; /* key made */
u32 expiredate; /* expires at this date or 0 if not at all */ u32 expiredate; /* expires at this date or 0 if not at all */
u32 max_expiredate; /* must not expire past this date */ u32 max_expiredate; /* must not expire past this date */
u32 revokedate; /* revoked at this date */ struct revoke_info revoked;
byte hdrbytes; /* number of header bytes */ byte hdrbytes; /* number of header bytes */
byte version; byte version;
byte selfsigversion; /* highest version of all of the self-sigs */ byte selfsigversion; /* highest version of all of the self-sigs */