X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=decodekey.c;h=efffad7d7863a7e310647113801fb21ba545c22f;hb=0d2a5aeeb4120999afc79d06619d90e26e2fec5c;hp=71723911c6981a2e18ee11697ad5927638a22dd4;hpb=d76720d2254815018d4881babd73d4723d22033c;p=onak.git diff --git a/decodekey.c b/decodekey.c index 7172391..efffad7 100644 --- a/decodekey.c +++ b/decodekey.c @@ -4,11 +4,8 @@ * Jonathan McDowell * * Copyright 2002 Project Purple - * - * $Id: decodekey.c,v 1.5 2004/03/23 12:35:11 noodles Exp $ */ -#include #include #include #include @@ -37,7 +34,7 @@ int parse_subpackets(unsigned char *data, uint64_t *keyid) int length = 0; int packetlen = 0; - assert(data != NULL); + log_assert(data != NULL); length = (data[0] << 8) + data[1] + 2; @@ -218,8 +215,11 @@ char **keyuids(struct openpgp_publickey *key, char **primary) char buf[1024]; char **uids = NULL; int count = 0; + + if (primary != NULL) { + *primary = NULL; + } - *primary = NULL; if (key != NULL && key->uids != NULL) { uids = malloc((spsize(key->uids) + 1) * sizeof (char *)); @@ -246,3 +246,30 @@ char **keyuids(struct openpgp_publickey *key, char **primary) return uids; } + +/** + * keysubkeys - Takes a key and returns an array of its subkey keyids. + * @key: The key to get the subkeys of. + * + * keysubkeys takes a public key structure and returns an array of the + * subkey keyids for that key. + */ +uint64_t *keysubkeys(struct openpgp_publickey *key) +{ + struct openpgp_signedpacket_list *cursubkey = NULL; + uint64_t *subkeys = NULL; + int count = 0; + + if (key != NULL && key->subkeys != NULL) { + subkeys = malloc((spsize(key->subkeys) + 1) * + sizeof (uint64_t)); + cursubkey = key->subkeys; + while (cursubkey != NULL) { + subkeys[count++] = get_packetid(cursubkey->packet); + cursubkey = cursubkey -> next; + } + subkeys[count] = 0; + } + + return subkeys; +}