+ * This function returns a public key from whatever storage mechanism we
+ * are using.
+ */
+ int (*fetch_key_fp)(struct onak_dbctx *,
+ struct openpgp_fingerprint *fingerprint,
+ struct openpgp_publickey **publickey,
+ bool intrans);
+
+/**
+ * @brief Takes a key and stores it.
+ * @param publickey A pointer to the public key to store.
+ * @param intrans If we're already in a transaction.
+ * @param update If true the key exists and should be updated.
+ *
+ * This function stores a public key in whatever storage mechanism we are
+ * using. intrans indicates if we're already in a transaction so don't
+ * need to start one. update indicates if the key already exists and is
+ * just being updated.
+ *
+ * TODO: Do we store multiple keys of the same id? Or only one and replace it?
+ */
+ int (*store_key)(struct onak_dbctx *,
+ struct openpgp_publickey *publickey, bool intrans,
+ bool update);
+
+/**
+ * @brief Given a keyid delete the key from storage.
+ * @param keyid The keyid to delete.
+ * @param intrans If we're already in a transaction.