updates. New data types.
[silc.git] / lib / silcclient / idlist.h
index ecf8b9b44e8d94ba51d803457c2e5910dd58fd27..2a8c6a538bea020e432e34891c85c689cfa37b02 100644 (file)
@@ -30,42 +30,53 @@ typedef struct SilcClientEntryStruct {
   char *username;              /* username[@host] */
   char *server;                        /* SILC server name */
   char *realname;              /* Realname (userinfo) */
-  unsigned int num;
+  uint32 num;
+  uint32 mode;         /* User mode in SILC */
   SilcClientID *id;            /* The Client ID */
   SilcCipher send_key;         /* Private message key for sending */
   SilcCipher receive_key;      /* Private message key for receiving */
   unsigned char *key;          /* Set only if appliation provided the
                                   key material. NULL if the library 
                                   generated the key. */
-  unsigned int key_len;
+  uint32 key_len;
   int generated;               /* TRUE if library generated the key */
+  SilcClientKeyAgreement ke;   /* Current key agreement context or NULL */
 } *SilcClientEntry;
 
 /* Client and its mode on a channel */
 typedef struct SilcChannelUserStruct {
   SilcClientEntry client;
-  unsigned int mode;
+  uint32 mode;
   struct SilcChannelUserStruct *next;
 } *SilcChannelUser;
 
+/* Structure to hold one channel private key. */
+typedef struct {
+  SilcCipher cipher;                 /* The cipher and key */
+  SilcHmac hmac;                     /* The HMAC and hmac key */
+  unsigned char *key;                /* The key data */
+  uint32 key_len;                    /* The key length */
+} *SilcChannelPrivateKey;
+
 /* Channel entry context. This is allocate for every channel client has
    joined to. This includes for example the channel specific keys */
-/* XXX channel_key is the server generated key. Later this context must 
-   include the channel private key. */
 typedef struct SilcChannelEntryStruct {
   char *channel_name;
   SilcChannelID *id;
-  unsigned int mode;
+  uint32 mode;
   int on_channel;
 
   /* Joined clients */
   SilcList clients;
 
   /* Channel keys */
-  SilcCipher channel_key;
-  unsigned char *key;
-  unsigned int key_len;
-  unsigned char iv[SILC_CIPHER_MAX_IV_SIZE];
+  SilcCipher channel_key;                    /* The channel key */
+  unsigned char *key;                       /* Raw key data */
+  uint32 key_len;
+  unsigned char iv[SILC_CIPHER_MAX_IV_SIZE]; /* Current IV */
+  SilcHmac hmac;                            /* Current HMAC */
+  SilcDList private_keys;                   /* List of private keys or NULL */
+  SilcChannelPrivateKey curr_key;           /* Current private key */
 } *SilcChannelEntry;
 
 /* Prototypes (some functions are defined in the silcapi.h) */
@@ -74,7 +85,7 @@ SilcClientEntry silc_idlist_get_client(SilcClient client,
                                       SilcClientConnection conn,
                                       char *nickname,
                                       char *server,
-                                      unsigned int num,
+                                      uint32 num,
                                       int query);
 
 #endif