X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=parsekey.c;h=6e080af36dc66493b0208e9d77c93a705a9e8bfc;hb=0d2a5aeeb4120999afc79d06619d90e26e2fec5c;hp=687fd9bd8612c6f9a3cd2c41af96e9269368a620;hpb=6e719fc77846c969252cd51c2639ecb2c61bc941;p=onak.git diff --git a/parsekey.c b/parsekey.c index 687fd9b..6e080af 100644 --- a/parsekey.c +++ b/parsekey.c @@ -48,8 +48,7 @@ int parse_keys(struct openpgp_packet_list *packets, case 2: /* * It's a signature packet. Add it to either the public - * key (it should be a revocation), to the current UID - * or the current subkey. + * key, to the current UID or the current subkey. */ log_assert(curkey != NULL); if (curkey->subkeys != NULL) { @@ -62,8 +61,25 @@ int parse_keys(struct openpgp_packet_list *packets, packet_dup(packets->packet)); } else { ADD_PACKET_TO_LIST_END(curkey, - revocation, + sig, packet_dup(packets->packet)); + /* + * This is a signature on the public key; check + * if it's a revocation. + */ + if (packets->packet->data[0] == 3 && + packets->packet->data[2] == 0x20) { + /* + * Type 3 key, 0x20 == revocation + */ + curkey->revoked = true; + } else if (packets->packet->data[0] == 4 && + packets->packet->data[1] == 0x20) { + /* + * Type 4 key, 0x20 == revocation + */ + curkey->revoked = true; + } } break; case 6: @@ -416,9 +432,9 @@ int flatten_publickey(struct openpgp_publickey *key, } /* - * Now do any revocation signatures on the main key. + * Now do any signatures on the main key. */ - for (tmplist = key->revocations; tmplist != NULL; + for (tmplist = key->sigs; tmplist != NULL; tmplist = tmplist->next) { ADD_PACKET_TO_LIST((*list_end), packet_dup(tmplist->packet));