void *timeout_queue;
} *SilcIDListPurge;
+/* Channel key re-key context. */
+typedef struct {
+ void *context;
+ SilcChannelEntry channel;
+ uint32 key_len;
+} *SilcServerChannelRekey;
+
+/* Generic rekey context for connections */
+typedef struct {
+ /* Current sending encryption key, provided for re-key. The `pfs'
+ is TRUE if the Perfect Forward Secrecy is performed in re-key. */
+ unsigned char *send_enc_key;
+ uint32 enc_key_len;
+ int ske_group;
+ bool pfs;
+ uint32 timeout;
+ void *context;
+} *SilcServerRekey;
+
/*
Generic ID list data structure.
SilcCipher send_key;
SilcCipher receive_key;
+ /* Re-key context */
+ SilcServerRekey rekey;
+
/* Hash selected in the SKE protocol, NULL if not needed at all */
SilcHash hash;
- /* HMAC and raw key data */
+ /* HMAC */
SilcHmac hmac;
- unsigned char *hmac_key;
- unsigned int hmac_key_len;
- /* PKCS and public key */
- SilcPKCS pkcs;
+ /* Public key */
SilcPublicKey public_key;
long last_receive; /* Time last received data */
long last_sent; /* Time last sent data */
- unsigned char registered; /* Boolean whether connection is registered */
+ bool registered; /* Boolean whether connection is registered */
} *SilcIDListData, SilcIDListDataStruct;
/*
Logical name of the server. There is no limit of the length of the
server name. This is usually the same name as defined in DNS.
- int server_type
+ uint8 server_type
Type of the server. SILC_SERVER or SILC_ROUTER are the possible
choices for this.
SilcIDListDataStruct data;
char *server_name;
- int server_type;
+ uint8 server_type;
SilcServerID *id;
char *server_info;
char *motd;
Pointer to the client list. This is the client currently on channel.
- unsigned int mode
+ uint32 mode
Client's current mode on the channel.
*/
typedef struct SilcChannelClientEntryStruct {
SilcClientEntry client;
- unsigned int mode;
+ uint32 mode;
SilcChannelEntry channel;
struct SilcChannelClientEntryStruct *client_list;
struct SilcChannelClientEntryStruct *channel_list;
nickname. Nickname is not relevant information that would need to be
saved as plain.
- int mode
+ uint32 mode
Client's mode. Client maybe for example server operator or
router operator (SILC operator).
not allow any command to be exeucted more than once in about
2 seconds. This is result of normal time().
- char fast_command
+ uint8 fast_command
Counter to check command bursts. By default, up to 5 commands
are allowed before limiting the execution. See command flags
char *username;
char *userinfo;
SilcClientID *id;
- int mode;
+ uint32 mode;
long last_command;
- char fast_command;
+ uint8 fast_command;
/* Pointer to the router */
SilcServerEntry router;
Logical name of the channel.
- unsigned int mode
+ uint32 mode
Current mode of the channel. See lib/silccore/silcchannel.h for
all modes.
ID of the channel. This includes all the information SILC will ever
need.
- int global_users
+ bool global_users
Boolean value to tell whether there are users outside this server
on this channel. This is set to TRUE if router sends message to
SilcPublicKey founder_key
SilcAuthMethod founder_method
unsigned char *founder_passwd
- unsigned int founder_passwd_len
+ uint32 founder_passwd_len
If the SILC_CMODE_FOUNDER_AUTH has been set then these will include
the founder's public key, authentication method and the password
The key of the channel (the cipher actually).
unsigned char *key
- unsigned int key_len
+ uint32 key_len
Raw key data of the channel key.
HMAC of the channel.
+ SilcServerChannelRekey rekey
+
+ Channel key re-key context.
+
*/
struct SilcChannelEntryStruct {
char *channel_name;
- unsigned int mode;
+ uint32 mode;
SilcChannelID *id;
- int global_users;
+ bool global_users;
char *topic;
char *cipher;
char *hmac_name;
SilcPublicKey founder_key;
SilcAuthMethod founder_method;
unsigned char *founder_passwd;
- unsigned int founder_passwd_len;
+ uint32 founder_passwd_len;
- unsigned int user_limit;
+ uint32 user_limit;
unsigned char *passphrase;
char *invite_list;
char *ban_list;
/* Channel keys */
SilcCipher channel_key;
unsigned char *key;
- unsigned int key_len;
+ uint32 key_len;
unsigned char iv[SILC_CIPHER_MAX_IV_SIZE];
SilcHmac hmac;
+
+ SilcServerChannelRekey rekey;
};
/*
SilcServerEntry
silc_idlist_replace_server_id(SilcIDList id_list, SilcServerID *old_id,
SilcServerID *new_id);
-void silc_idlist_del_server(SilcIDList id_list, SilcServerEntry entry);
+int silc_idlist_del_server(SilcIDList id_list, SilcServerEntry entry);
SilcClientEntry
silc_idlist_add_client(SilcIDList id_list, unsigned char *nickname,
- unsigned int nickname_len, char *username,
+ uint32 nickname_len, char *username,
char *userinfo, SilcClientID *id,
SilcServerEntry router, void *connection);
int silc_idlist_del_client(SilcIDList id_list, SilcClientEntry entry);
-SilcClientEntry *
-silc_idlist_get_clients_by_nickname(SilcIDList id_list, char *nickname,
- char *server, unsigned int *clients_count);
-SilcClientEntry *
-silc_idlist_get_clients_by_hash(SilcIDList id_list, char *nickname,
- SilcHash md5hash,
- unsigned int *clients_count);
+int silc_idlist_get_clients_by_nickname(SilcIDList id_list, char *nickname,
+ char *server,
+ SilcClientEntry **clients,
+ uint32 *clients_count);
+int silc_idlist_get_clients_by_hash(SilcIDList id_list, char *nickname,
+ SilcHash md5hash,
+ SilcClientEntry **clients,
+ uint32 *clients_count);
SilcClientEntry
silc_idlist_find_client_by_hash(SilcIDList id_list, char *nickname,
SilcHash md5hash, SilcIDCacheEntry *ret_entry);
SilcChannelID *new_id);
SilcChannelEntry *
silc_idlist_get_channels(SilcIDList id_list, SilcChannelID *channel_id,
- unsigned int *channels_count);
+ uint32 *channels_count);
#endif