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