chiark / gitweb /
Allow admin clients to filter out async messages. Send notifications
[tripe] / tripe.h
diff --git a/tripe.h b/tripe.h
index 5138d110a03c8f8ce0e5accbb41910153977b7cc..320a2ca5218f91d4672aabf6e95a8f81ba4f2895 100644 (file)
--- a/tripe.h
+++ b/tripe.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: tripe.h,v 1.19 2004/04/08 01:36:17 mdw Exp $
+ * $Id$
  *
  * Main header file for TrIPE
  *
 
 /*----- Cipher selections -------------------------------------------------*/
 
-#include <catacomb/blowfish.h>
-#include <catacomb/blowfish-cbc.h>
-#include <catacomb/blowfish-counter.h>
-#include <catacomb/rmd160.h>
-#include <catacomb/rmd160-hmac.h>
+typedef struct algswitch {
+  const gccipher *c;                   /* Symmetric encryption scheme */
+  const gccipher *mgf;                 /* Mask-generation function */
+  const gchash *h;                     /* Hash function */
+  const gcmac *m;                      /* Message authentication code */
+  size_t hashsz;                       /* Hash output size */
+  size_t tagsz;                                /* Length to truncate MAC tags */
+  size_t cksz, mksz;                   /* Key lengths for @c@ and @m@ */
+} algswitch;
 
-#define CIPHER (&blowfish_cbc)
-#define MAC (&rmd160_hmac)
+extern algswitch algs;
 
-#define HASH_CTX rmd160_ctx
-#define HASH_INIT rmd160_init
-#define HASH rmd160_hash
-#define HASH_STRING(c, s) HASH((c), s, sizeof(s))
-#define HASH_DONE rmd160_done
-#define HASHSZ RMD160_HASHSZ
+#define MAXHASHSZ 64                   /* Largest possible hash size */
 
-#define MGF_CTX blowfish_counterctx
-#define MGF_INIT blowfish_counterinit
-#define MGF_CRYPT blowfish_counterencrypt
-
-#define SEQSZ 4
-#define IVSZ BLOWFISH_BLKSZ
-#define MACSZ 10
+#define HASH_STRING(h, s) GH_HASH((h), (s), sizeof(s))
 
 /*----- Data structures ---------------------------------------------------*/
 
@@ -195,6 +187,7 @@ typedef struct keyset {
   T( unsigned seq; )                   /* Sequence number for tracing */
   unsigned f;                          /* Various useful flags */
   gcipher *cin, *cout;                         /* Keyset ciphers for encryption */
+  size_t tagsz;                                /* Length to truncate MAC tags */
   gmac *min, *mout;                    /* Keyset MACs for integrity */
   uint32 oseq;                         /* Outbound sequence number */
   uint32 iseq, iwin;                   /* Inbound sequence number */
@@ -224,12 +217,12 @@ typedef struct kxchal {
   keyset *ks;                          /* Pointer to temporary keyset */
   unsigned f;                          /* Various useful flags */
   sel_timer t;                         /* Response timer for challenge */
-  octet hc[HASHSZ];                    /* Hash of his challenge */
+  octet hc[MAXHASHSZ];                 /* Hash of his challenge */
   mp *ck;                              /* The check value */
-  octet hswrq_in[HASHSZ];              /* Inbound switch request message */
-  octet hswok_in[HASHSZ];              /* Inbound switch confirmation */
-  octet hswrq_out[HASHSZ];             /* Outbound switch request message */
-  octet hswok_out[HASHSZ];             /* Outbound switch confirmation */
+  octet hswrq_in[MAXHASHSZ];           /* Inbound switch request message */
+  octet hswok_in[MAXHASHSZ];           /* Inbound switch confirmation */
+  octet hswrq_out[MAXHASHSZ];          /* Outbound switch request message */
+  octet hswok_out[MAXHASHSZ];          /* Outbound switch confirmation */
 } kxchal;
 
 typedef struct keyexch {
@@ -245,7 +238,7 @@ typedef struct keyexch {
   ge *rx;                              /* The expected response */
   unsigned nr;                         /* Number of extant responses */
   time_t t_valid;                      /* When this exchange goes bad */
-  octet hc[HASHSZ];                    /* Hash of my challenge */
+  octet hc[MAXHASHSZ];                 /* Hash of my challenge */
   kxchal *r[KX_NCHAL];                 /* Array of challenges */
 } keyexch;
 
@@ -299,7 +292,7 @@ typedef struct stats {
   unsigned long sz_in, sz_out;         /* Size of all data in and out */
   unsigned long sz_kxin, sz_kxout;     /* Size of key exchange messages */
   unsigned long sz_ipin, sz_ipout;     /* Size of encapsulated IP packets */
-  time_t t_start, t_last;              /* Time peer created, last recv */
+  time_t t_start, t_last, t_kx;                /* Time peer created, last pk, kx */
   unsigned long n_reject;              /* Number of rejected packets */
   unsigned long n_in, n_out;           /* Number of packets in and out */
   unsigned long n_kxin, n_kxout;       /* Number of key exchange packets */
@@ -352,6 +345,17 @@ typedef struct admin {
 
 #define AF_DEAD 1u                     /* Destroy this admin block */
 #define AF_LOCK 2u                     /* Don't destroy it yet */
+#define AF_NOTE 4u                     /* Catch notifications */
+#ifndef NTRACE
+  #define AF_TRACE 8u                  /* Catch tracing */
+#endif
+#define AF_WARN 16u                    /* Catch warning messages */
+
+#ifndef NTRACE
+#  define AF_ALLMSGS (AF_NOTE | AF_TRACE | AF_WARN)
+#else
+#  define AF_ALLMSGS (AF_NOTE | AF_WARN)
+#endif
 
 /*----- Global variables --------------------------------------------------*/
 
@@ -658,16 +662,29 @@ extern int ksl_decrypt(keyset **/*ksroot*/, unsigned /*ty*/,
 
 extern void a_warn(const char */*fmt*/, ...);
 
+/* --- @a_notify@ --- *
+ *
+ * Arguments:  @const char *fmt@ = pointer to format string
+ *             @...@ = other arguments
+ *
+ * Returns:    ---
+ *
+ * Use:                Sends a notification to interested admin connections.
+ */
+
+extern void a_notify(const char */*fmt*/, ...);
+
 /* --- @a_create@ --- *
  *
  * Arguments:  @int fd_in, fd_out@ = file descriptors to use
+ *             @unsigned f@ = initial flags to set
  *
  * Returns:    ---
  *
  * Use:                Creates a new admin connection.
  */
 
-extern void a_create(int /*fd_in*/, int /*fd_out*/);
+extern void a_create(int /*fd_in*/, int /*fd_out*/, unsigned /*f*/);
 
 /* --- @a_quit@ --- *
  *