X-Git-Url: http://the.earth.li/gitweb/?p=onak.git;a=blobdiff_plain;f=keystructs.h;h=18a9ba4ce12ca29017bafab63e256ed5d3ecc8a4;hp=33dba65a5b6d6c364ab8c2c12d28dfa691dacb9d;hb=76f079e5ebdb34acaaa2462a8d915ee06d3c8425;hpb=4b8483ae278577a3adc8d84da81d77019704466f diff --git a/keystructs.h b/keystructs.h index 33dba65..18a9ba4 100644 --- a/keystructs.h +++ b/keystructs.h @@ -1,80 +1,131 @@ -/* - * keystructs.h - Structures for OpenPGP keys +/** + * @file keystructs.h + * @brief Structures for OpenPGP keys + * + * Copyright 2002 Jonathan McDowell * - * Jonathan McDowell + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; version 2 of the License. * - * Copyright 2002 Project Purple + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . */ #ifndef __KEYSTRUCTS_H__ #define __KEYSTRUCTS_H__ +#include #include +#include + +#include "ll.h" + +/* + * Fingerprint lengths + * + * v3 MD5 fingerprint is 16 bytes + * v4 SHA-1 fingerprint is 20 + * v5 SHA2-256 fingerprint is 32 + */ +#define FINGERPRINT_V3_LEN 16 +#define FINGERPRINT_V4_LEN 20 +#define FINGERPRINT_V5_LEN 32 +#define MAX_FINGERPRINT_LEN 32 /** - * struct openpgp_packet - Stores an OpenPGP packet. - * @tag: The packet tag (ie type). - * @newformat: Indicates if this is a new format packet. - * @length: The length of the packet. - * @data: The actual packet + * @brief Stores the fingerprint of an OpenPGP key + */ +struct openpgp_fingerprint { + /** Length of fingerprint. 16 bytes for v3, 20 for v4 */ + size_t length; + /** Fingerprint data. Only the first length bytes are valid */ + uint8_t fp[MAX_FINGERPRINT_LEN]; +}; + +/** + * @brief Stores an OpenPGP packet. * - * This structure holds any form of OpenPGP packet with minimum common - * details decoded out. + * This structure holds any form of OpenPGP packet with minimum common + * details decoded out. */ struct openpgp_packet { + /** The packet tag (i.e. type). */ unsigned int tag; + /** Indicates if this is a new format packet. */ bool newformat; + /** The length of the packet. */ size_t length; + /** The actual packet data. */ unsigned char *data; }; /** - * struct openpgp_packet_list - A linked list of OpenPGP packets. - * @packet: The actual packet structure. - * @next: A pointer to the next packet in the list. + * @brief A linked list of OpenPGP packets. * - * This structure is used to hold a linked list of packets, for example - * all the signatures of a public key's UID. + * This structure is used to hold a linked list of packets, for example + * all the signatures of a public key's UID. */ struct openpgp_packet_list { + /** The actual packet structure. */ struct openpgp_packet *packet; + /** A pointer to the next packet in the list. */ struct openpgp_packet_list *next; }; /** - * struct openpgp_signedpacket_list - A packet with signatures. - * @uid: The OpenPGP packet that's signed. - * @sigs: A list of sigs for the packet. - * @next: A pointer to the next packet with signatures. + * @brief A packet with signatures. * - * This structure holds an OpenPGP packet along with signatures that are - * over this packet. It also links to the next signed packet. It's usually - * used to hold a UID or subkey with their associated signatures. + * This structure holds an OpenPGP packet along with signatures that are + * over this packet. It also links to the next signed packet. It's usually + * used to hold a UID or subkey with their associated signatures. */ struct openpgp_signedpacket_list { + /** The OpenPGP packet that's signed. */ struct openpgp_packet *packet; + /** A linked list of sigs for the packet. */ struct openpgp_packet_list *sigs; + /** Pointer to the last sig in the sigs linked list */ struct openpgp_packet_list *last_sig; + /** A pointer to the next packet with signatures. */ struct openpgp_signedpacket_list *next; }; /** - * struct openpgp_publickey - An OpenPGP public key complete with sigs. - * @publickey: The OpenPGP packet for the public key. - * @revocation: The OpenPGP packet for the revocation [optional] - * @uids: The list of UIDs with signatures for this key. - * @subkeys: The list of subkeys with signatures for this key. - * @next: The next public key. + * @brief An OpenPGP public key complete with sigs. */ struct openpgp_publickey { + /** The OpenPGP packet for the public key. */ struct openpgp_packet *publickey; - struct openpgp_packet_list *revocations; - struct openpgp_packet_list *last_revocation; + /** True if the key is revoked. */ + bool revoked; + /** Any signatures directly on the @a publickey packet. */ + struct openpgp_packet_list *sigs; + /** Pointer to the end of the @a sigs list */ + struct openpgp_packet_list *last_sig; + /** The list of UIDs with signatures for this key. */ struct openpgp_signedpacket_list *uids; + /** Pointer to the end of the @a uids list */ struct openpgp_signedpacket_list *last_uid; + /** The list of subkeys with signatures for this key. */ struct openpgp_signedpacket_list *subkeys; + /** Pointer to the end of the @a subkey list */ struct openpgp_signedpacket_list *last_subkey; + /** The next public key. */ struct openpgp_publickey *next; }; +/** + * @brief Holds an SKS key hash (md5 over sorted packet list) + */ +struct skshash { + /** The 128 bit MD5 hash of the sorted packet list from the key */ + uint8_t hash[16]; +}; + #endif /* __KEYSTRUCTS_H__ */