updates.
[silc.git] / apps / silcd / protocol.h
index e26a58e0d1b6b6d42dfefc25d24114a4b187e875..21c3d193bd987bf00aa024713eae8b88e2a6e439 100644 (file)
 #define PROTOCOL_H
 
 /* SILC client protocol types */
-#define SILC_PROTOCOL_SERVER_NONE 0
-#define SILC_PROTOCOL_SERVER_CONNECTION_AUTH 1
-#define SILC_PROTOCOL_SERVER_KEY_EXCHANGE 2
-/* #define SILC_PROTOCOL_SERVER_MAX 255 */
+#define SILC_PROTOCOL_SERVER_NONE               0
+#define SILC_PROTOCOL_SERVER_CONNECTION_AUTH    1
+#define SILC_PROTOCOL_SERVER_KEY_EXCHANGE       2
+#define SILC_PROTOCOL_SERVER_REKEY              3
+#define SILC_PROTOCOL_SERVER_BACKUP             4
+/* #define SILC_PROTOCOL_SERVER_MAX             255 */
 
 /* Internal context for Key Exchange protocol. */
 typedef struct {
@@ -35,13 +37,18 @@ typedef struct {
   SilcRng rng;
 
   /* TRUE if we are receiveing part of the protocol */
-  int responder;
+  bool responder;
 
   /* Destinations ID taken from authenticataed packet so that we can
      get the destinations ID. */
   void *dest_id;
   SilcIdType dest_id_type;
 
+  /* Pointer to the configurations. */
+  void *cconfig;
+  void *sconfig;
+  void *rconfig;
+
   SilcTask timeout_task;
   SilcPacketContext *packet;
   SilcSKE ske;
@@ -55,7 +62,7 @@ typedef struct {
   SilcSocketConnection sock;
 
   /* TRUE if we are receiving part of the protocol */
-  int responder;
+  bool responder;
 
   /* SKE object from Key Exchange protocol. */
   SilcSKE ske;
@@ -75,11 +82,27 @@ typedef struct {
   void *dest_id;
   SilcIdType dest_id_type;
 
+  /* Pointer to the configurations. */
+  void *cconfig;
+  void *sconfig;
+  void *rconfig;
+
   SilcTask timeout_task;
   SilcPacketContext *packet;
   uint16 conn_type;
 } SilcServerConnAuthInternalContext;
 
+/* Internal context for the rekey protocol */
+typedef struct {
+  void *server;
+  void *context;
+  SilcSocketConnection sock;
+  bool responder;                  /* TRUE if we are receiving party */
+  bool pfs;                        /* TRUE if PFS is to be used */
+  SilcSKE ske;                     /* Defined if PFS is used */
+  SilcPacketContext *packet;
+} SilcServerRekeyInternalContext;
+
 /* Prototypes */
 void silc_server_protocols_register(void);
 void silc_server_protocols_unregister(void);
@@ -90,6 +113,7 @@ int silc_server_protocol_ke_set_keys(SilcSKE ske,
                                     SilcPKCS pkcs,
                                     SilcHash hash,
                                     SilcHmac hmac,
-                                    int is_responder);
+                                    SilcSKEDiffieHellmanGroup group,
+                                    bool is_responder);
 
 #endif