client entry. This entry also includes the private message keys if
they are used. */
typedef struct SilcClientEntryStruct {
- char *nickname; /* nickname */
- char *username; /* username[@host] */
- char *server; /* SILC server name */
- char *realname;
+ char *nickname; /* nickname */
+ char *username; /* username[@host] */
+ char *server; /* SILC server name */
+ char *realname; /* Realname (userinfo) */
unsigned int num;
- SilcClientID *id;
-
- /* Keys, these are defined if private message key has been defined
- with the remote client. */
- SilcCipher send_key;
- SilcCipher receive_key;
+ 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;
+ int generated; /* TRUE if library generated the key */
+ SilcClientKeyAgreement ke; /* Current key agreement context or NULL */
} *SilcClientEntry;
/* Client and its mode on a channel */
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 */
+ unsigned int 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;
SilcList clients;
/* Channel keys */
- SilcCipher channel_key;
- unsigned char *key;
+ SilcCipher channel_key; /* The channel key */
+ unsigned char *key; /* Raw key data */
unsigned int key_len;
- unsigned char iv[SILC_CIPHER_MAX_IV_SIZE];
+ 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;
-/* Command identifier used by ID list routines when sending WHOIS/IDENTIFY
- commands to routers. */
-#define SILC_IDLIST_IDENT 3333
-
-/* Prototypes */
+/* Prototypes (some functions are defined in the silcapi.h) */
SilcClientEntry silc_idlist_get_client(SilcClient client,
SilcClientConnection conn,
char *server,
unsigned int num,
int query);
-SilcClientEntry silc_idlist_get_client_by_id(SilcClient client,
- SilcClientConnection conn,
- SilcClientID *client_id);
-SilcChannelEntry silc_idlist_get_channel(SilcClient client,
- SilcClientConnection conn,
- char *channel);
#endif