cscvs to tla changeset 35
[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 <stdint.h>
13 #include <inttypes.h>
14
15 #include "keystructs.h"
16 #include "ll.h"
17
18 /**
19  *      initdb - Initialize the key database.
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(void);
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  *
113  *      This function gets the list of signatures on a key. Used for key 
114  *      indexing and doing stats bits.
115  */
116 struct ll *getkeysigs(uint64_t keyid);
117
118 /**
119  *      getfullkeyid - Maps a 32bit key id to a 64bit one.
120  *      @keyid: The 32bit keyid.
121  *
122  *      This function maps a 32bit key id to the full 64bit one. It returns the
123  *      full keyid. If the key isn't found a keyid of 0 is returned.
124  */
125 uint64_t getfullkeyid(uint64_t keyid);
126
127 #endif /* __KEYDB_H__ */