cscvs to tla changeset 117
[onak.git] / keydb.h
1 /*
2  * keydb.h - Routines to store and fetch keys.
3  *
4  * Jonathan McDowell <noodles@earth.li>
5  *
6  * Copyright 2002 Project Purple
7  *
8  * $Id: keydb.h,v 1.10 2004/03/23 12:33:46 noodles Exp $
9  */
10
11 #ifndef __KEYDB_H__
12 #define __KEYDB_H__
13
14 #include <inttypes.h>
15
16 #include "keystructs.h"
17 #include "ll.h"
18
19 /**
20  *      initdb - Initialize the key database.
21  *      @readonly: If we'll only be reading the DB, not writing to it.
22  *
23  *      This function should be called before any of the other functions in
24  *      this file are called in order to allow the DB to be initialized ready
25  *      for access.
26  */
27 void initdb(bool readonly);
28
29 /**
30  *      cleanupdb - De-initialize the key database.
31  *
32  *      This function should be called upon program exit to allow the DB to
33  *      cleanup after itself.
34  */
35 void cleanupdb(void);
36
37 /**
38  *      starttrans - Start a transaction.
39  *
40  *      Start a transaction. Intended to be used if we're about to perform many
41  *      operations on the database to help speed it all up, or if we want
42  *      something to only succeed if all relevant operations are successful.
43  */
44 bool starttrans(void);
45
46 /**
47  *      endtrans - End a transaction.
48  *
49  *      Ends a transaction.
50  */
51 void endtrans(void);
52
53 /**
54  *      fetch_key - Given a keyid fetch the key from storage.
55  *      @keyid: The keyid to fetch.
56  *      @publickey: A pointer to a structure to return the key in.
57  *      @intrans: If we're already in a transaction.
58  *
59  *      This function returns a public key from whatever storage mechanism we
60  *      are using.
61  *
62  *      TODO: What about keyid collisions? Should we use fingerprint instead?
63  */
64 int fetch_key(uint64_t keyid, struct openpgp_publickey **publickey, bool intrans);
65
66 /**
67  *      store_key - Takes a key and stores it.
68  *      @publickey: A pointer to the public key to store.
69  *      @intrans: If we're already in a transaction.
70  *      @update: If true the key exists and should be updated.
71  *
72  *      This function stores a public key in whatever storage mechanism we are
73  *      using. intrans indicates if we're already in a transaction so don't
74  *      need to start one. update indicates if the key already exists and is
75  *      just being updated.
76  *
77  *      TODO: Do we store multiple keys of the same id? Or only one and replace
78  *      it?
79  */
80 int store_key(struct openpgp_publickey *publickey, bool intrans, bool update);
81
82 /**
83  *      delete_key - Given a keyid delete the key from storage.
84  *      @keyid: The keyid to delete.
85  *      @intrans: If we're already in a transaction.
86  *
87  *      This function deletes a public key from whatever storage mechanism we
88  *      are using. Returns 0 if the key existed.
89  */
90 int delete_key(uint64_t keyid, bool intrans);
91
92 /**
93  *      fetch_key_text - Trys to find the keys that contain the supplied text.
94  *      @search: The text to search for.
95  *      @publickey: A pointer to a structure to return the key in.
96  *
97  *      This function searches for the supplied text and returns the keys that
98  *      contain it.
99  */
100 int fetch_key_text(const char *search, struct openpgp_publickey **publickey);
101
102 /**
103  *      keyid2uid - Takes a keyid and returns the primary UID for it.
104  *      @keyid: The keyid to lookup.
105  *
106  *      This function returns a UID for the given key. Returns NULL if the key
107  *      isn't found.
108  */
109 char *keyid2uid(uint64_t keyid);
110
111 /**
112  *      getkeysigs - Gets a linked list of the signatures on a key.
113  *      @keyid: The keyid to get the sigs for.
114  *      @revoked: Is the key revoked?
115  *
116  *      This function gets the list of signatures on a key. Used for key 
117  *      indexing and doing stats bits. If revoked is non-NULL then if the key
118  *      is revoked it's set to true.
119  */
120 struct ll *getkeysigs(uint64_t keyid, bool *revoked);
121
122 /**
123  *      cached_getkeysigs - Gets the signatures on a key.
124  *      @keyid: The key we want the signatures for.
125  *      
126  *      This function gets the signatures on a key. It's the same as the
127  *      getkeysigs function above except we use the hash module to cache the
128  */
129 struct ll *cached_getkeysigs(uint64_t keyid);
130
131 /**
132  *      getfullkeyid - Maps a 32bit key id to a 64bit one.
133  *      @keyid: The 32bit keyid.
134  *
135  *      This function maps a 32bit key id to the full 64bit one. It returns the
136  *      full keyid. If the key isn't found a keyid of 0 is returned.
137  */
138 uint64_t getfullkeyid(uint64_t keyid);
139
140 /**
141  *      dumpdb - dump the key database
142  *      @filenamebase: The base filename to use for the dump.
143  *
144  *      Dumps the database into one or more files, which contain pure OpenPGP
145  *      that can be reimported into onak or gpg. filenamebase provides a base
146  *      file name for the dump; several files may be created, all of which will
147  *      begin with this string and then have a unique number and a .pgp
148  *      extension.
149  */
150 int dumpdb(char *filenamebase);
151
152 #endif /* __KEYDB_H__ */