chiark / gitweb /
rsa: Break out rsa_loadpub_core
[secnet.git] / secnet.h
index ba3e45ddf3989eb97c99b71cc0b448e5dc3e6c71..7a93ce8147c39ff1f643e4e30a5708554c26228c 100644 (file)
--- a/secnet.h
+++ b/secnet.h
@@ -45,6 +45,8 @@
 
 #include <bsd/sys/queue.h>
 
+#include "osdep.h"
+
 #define MAX_PEER_ADDRS 5
 /* send at most this many copies; honour at most that many addresses */
 
@@ -391,6 +393,7 @@ extern init_module slip_module;
 extern init_module tun_module;
 extern init_module sha1_module;
 extern init_module log_module;
+extern init_module privcache_module;
 
 /***** END of module support *****/
 
@@ -401,7 +404,7 @@ struct sigscheme_info;
 typedef bool_t sigscheme_loadpub(const struct sigscheme_info *algo,
                                 struct buffer_if *pubkeydata,
                                 struct sigpubkey_if **sigpub_r,
-                                struct log_if *log);
+                                struct log_if *log, struct cloc loc);
   /* pubkeydata is (supposedly) for this algorithm.
    * loadpub should log an error if it fails.
    * pubkeydata may be modified (but not freed) */
@@ -409,7 +412,7 @@ typedef bool_t sigscheme_loadpub(const struct sigscheme_info *algo,
 typedef bool_t sigscheme_loadpriv(const struct sigscheme_info *algo,
                                  struct buffer_if *privkeydata,
                                  struct sigprivkey_if **sigpriv_r,
-                                 struct log_if *log);
+                                 struct log_if *log, struct cloc loc);
   /* privkeydata may contain data for any algorithm, not necessarily
    * this one!  If it is not for this algorithm, return False and do
    * not log anything (other than at M_DEBUG).  If it *is* for this
@@ -428,6 +431,10 @@ struct sigscheme_info {
 extern const struct sigscheme_info rsa1_sigscheme;
 extern const struct sigscheme_info sigschemes[]; /* sentinel has name==0 */
 
+const struct sigscheme_info *sigscheme_lookup(const char *name);
+
+extern sigscheme_loadpriv rsa1_loadpriv;
+
 /***** END of signature schemes *****/
 
 /***** CLOSURE TYPES and interface definitions *****/
@@ -446,6 +453,7 @@ extern const struct sigscheme_info sigschemes[]; /* sentinel has name==0 */
 #define CL_HASH        12
 #define CL_BUFFER      13
 #define CL_NETLINK     14
+#define CL_PRIVCACHE   15
 
 struct buffer_if;
 
@@ -520,6 +528,19 @@ struct sigprivkey_if {
     sig_dispose_fn *dispose;
 };
 
+/* PRIVCACHE interface */
+
+typedef struct sigprivkey_if *privcache_lookup_fn(void *st,
+                                          const struct sigkeyid *id,
+                                          struct log_if*);
+  /* Return is valid only until you return from the current event!
+   * You do not need to call ->sethash. */
+
+struct privcache_if {
+    void *st;
+    privcache_lookup_fn *lookup;
+};
+
 /* COMM interface */
 
 struct comm_addr {