X-Git-Url: https://the.earth.li/gitweb/?p=onak.git;a=blobdiff_plain;f=keydb.h;h=9a9371b4ac9614759c3501c9d756d019488cfa51;hp=7297a7664b39fe53ceccefb23c791951acfb586a;hb=a2979c20e1ab2d52e3a961ac7dad45fee9d6345a;hpb=00e37c36f214bf9d2e9794d3089e64522a6275a2 diff --git a/keydb.h b/keydb.h index 7297a76..9a9371b 100644 --- a/keydb.h +++ b/keydb.h @@ -55,6 +55,22 @@ struct onak_dbctx { */ void (*endtrans)(struct onak_dbctx *); +/** + * @brief Given a fingerprint fetch the key from storage. + * @param fp The fingerprint to fetch. + * @param fpsize Number of bytes in the fingerprint (16 for v3, 20 for v4) + * @param publickey A pointer to a structure to return the key in. + * @param intrans If we're already in a transaction. + * + * This function returns a public key from whatever storage mechanism we + * are using. This only searches for the fingerprint of the primary key + * and will thus only ever return at most a single key. + */ + int (*fetch_key)(struct onak_dbctx *, + struct openpgp_fingerprint *fingerprint, + struct openpgp_publickey **publickey, + bool intrans); + /** * @brief Given a keyid fetch the key from storage. * @param keyid The keyid to fetch. @@ -62,9 +78,8 @@ struct onak_dbctx { * @param intrans If we're already in a transaction. * * This function returns a public key from whatever storage mechanism we - * are using. - * - * TODO: What about keyid collisions? Should we use fingerprint instead? + * are using. It may return multiple keys in the case where there are + * colliding keyids. */ int (*fetch_key_id)(struct onak_dbctx *, uint64_t keyid, @@ -79,13 +94,38 @@ struct onak_dbctx { * @param intrans If we're already in a transaction. * * This function returns a public key from whatever storage mechanism we - * are using. + * are using. Although the fingerprint should be unique this function may + * also search subkeys, which could be bound to multiple primary keys. As + * a result multiple keys may be returned. */ int (*fetch_key_fp)(struct onak_dbctx *, struct openpgp_fingerprint *fingerprint, struct openpgp_publickey **publickey, bool intrans); +/** + * @brief Tries to find the keys that contain the supplied text. + * @param search The text to search for. + * @param publickey A pointer to a structure to return the key in. + * + * This function searches for the supplied text and returns the keys that + * contain it. It is likely it will return multiple keys. + */ + int (*fetch_key_text)(struct onak_dbctx *, const char *search, + struct openpgp_publickey **publickey); + +/** + * @brief Tries to find the keys from an SKS hash + * @param hash The hash to search for. + * @param publickey A pointer to a structure to return the key in. + * + * This function looks for the key that is referenced by the supplied + * SKS hash and returns it. + */ + int (*fetch_key_skshash)(struct onak_dbctx *, + const struct skshash *hash, + struct openpgp_publickey **publickey); + /** * @brief Takes a key and stores it. * @param publickey A pointer to the public key to store. @@ -114,29 +154,6 @@ struct onak_dbctx { int (*delete_key)(struct onak_dbctx *, struct openpgp_fingerprint *fp, bool intrans); -/** - * @brief Trys to find the keys that contain the supplied text. - * @param search The text to search for. - * @param publickey A pointer to a structure to return the key in. - * - * This function searches for the supplied text and returns the keys that - * contain it. - */ - int (*fetch_key_text)(struct onak_dbctx *, const char *search, - struct openpgp_publickey **publickey); - -/** - * @brief Tries to find the keys from an SKS hash - * @param hash The hash to search for. - * @param publickey A pointer to a structure to return the key in. - * - * This function looks for the key that is referenced by the supplied - * SKS hash and returns it. - */ - int (*fetch_key_skshash)(struct onak_dbctx *, - const struct skshash *hash, - struct openpgp_publickey **publickey); - /** * @brief Takes a list of public keys and updates them in the DB. * @param keys The keys to update in the DB.