2 * parsekey.h - Routines to parse an OpenPGP key.
4 * Copyright 2002-2004,2007-2008,2011 Jonathan McDowell <noodles@earth.li>
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; version 2 of the License.
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 * You should have received a copy of the GNU General Public License along with
16 * this program; if not, write to the Free Software Foundation, Inc., 51
17 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 #ifndef __PARSEKEY_H__
21 #define __PARSEKEY_H__
23 #include "keystructs.h"
27 * parse_keys - Process a stream of packets for public keys + sigs.
28 * @packets: The packet list to parse.
29 * @keys: The returned list of public keys.
31 * This function takes an list of OpenPGP packets and attempts to parse it
32 * into a list of public keys with signatures and subkeys.
34 * Returns a count of how many keys we parsed.
36 int parse_keys(struct openpgp_packet_list *packets,
37 struct openpgp_publickey **keys);
40 * debug_packet - Print debug info about a packet
41 * @packet: The packet to display.
43 * This function takes an OpenPGP packet and displays some information
44 * about it to stdout. Useful for debugging purposes or curiousity about
45 * an OpenPGP packet stream.
47 int debug_packet(struct openpgp_packet *packet);
50 * read_openpgp_stream - Reads a stream of OpenPGP packets.
51 * @getchar_func: The function to get the next character from the stream.
52 * @ctx: A pointer to the context structure for getchar_func.
53 * @packets: The outputted list of packets.
54 * @maxnum: The maximum number of keys to read. 0 means unlimited.
56 * This function uses getchar_func to read characters from an OpenPGP
57 * packet stream and reads the packets into a linked list of packets
58 * ready for parsing as a public key or whatever. maxnum allows you to
59 * specify the maximum number of keys to read. Note that if this is used
60 * then only the public key component of the last key will be returned,
61 * none of the other packets of the key will be read.
63 onak_status_t read_openpgp_stream(int (*getchar_func)(void *ctx, size_t count,
66 struct openpgp_packet_list **packets,
70 * write_openpgp_stream - Reads a stream of OpenPGP packets.
71 * @putchar_func: The function to put the next character to the stream.
72 * @ctx: A pointer to the context structure for putchar_func.
73 * @packets: The list of packets.
75 * This function uses putchar_func to write characters to an OpenPGP
76 * packet stream from a linked list of packets.
78 onak_status_t write_openpgp_stream(int (*putchar_func)(void *ctx, size_t count,
81 struct openpgp_packet_list *packets);
84 * flatten_publickey - Convert a publickey to an OpenPGP packet list.
85 * @key: The public key.
86 * @packets: The outputted packet list.
87 * @list_end: The end of the packet list.
89 * This function converts public key structure to a linked list of OpenPGP
90 * packets ready for outputing or storage. If we're not appending to an
91 * existing list then both packets & list_end will be pointers to NULLs,
92 * other wise packets should point to the start of the list and list_end
93 * to the end so we can append to the end.
95 int flatten_publickey(struct openpgp_publickey *key,
96 struct openpgp_packet_list **packets,
97 struct openpgp_packet_list **list_end);
99 #endif /* __PARSEKEY_H__ */