updates.
authorPekka Riikonen <priikone@silcnet.org>
Wed, 4 Apr 2001 14:36:21 +0000 (14:36 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Wed, 4 Apr 2001 14:36:21 +0000 (14:36 +0000)
apps/silcd/idlist.c
apps/silcd/idlist.h
apps/silcd/protocol.c
apps/silcd/server.c

index ba9eaf66ea8034161857a9d930ee20361c06ba35..eba17160d884a26baae61b4c5d3978c85c064024 100644 (file)
@@ -36,7 +36,9 @@ void silc_idlist_add_data(void *entry, SilcIDListData idata)
   SilcIDListData data = (SilcIDListData)entry;
   data->send_key = idata->send_key;
   data->receive_key = idata->receive_key;
-  data->rekey = idata->rekey;
+  data->send_enc_key = idata->send_enc_key;
+  data->enc_key_len = idata->enc_key_len;
+  data->pfs = idata->pfs;
   data->hash = idata->hash;
   data->hmac = idata->hmac;
   data->public_key = idata->public_key;
@@ -54,12 +56,9 @@ void silc_idlist_del_data(void *entry)
     silc_cipher_free(idata->send_key);
   if (idata->receive_key)
     silc_cipher_free(idata->receive_key);
-  if (idata->rekey) {
-    if (idata->rekey->send_enc_key) {
-      memset(idata->rekey->send_enc_key, 0, idata->rekey->enc_key_len);
-      silc_free(idata->rekey->send_enc_key);
-    }
-    silc_free(idata->rekey);
+  if (idata->send_enc_key) {
+    memset(idata->send_enc_key, 0, idata->enc_key_len);
+    silc_free(idata->send_enc_key);
   }
   if (idata->hmac)
     silc_hmac_free(idata->hmac);
@@ -252,8 +251,6 @@ silc_idlist_replace_server_id(SilcIDList id_list, SilcServerID *old_id,
 
 int silc_idlist_del_server(SilcIDList id_list, SilcServerEntry entry)
 {
-  SILC_LOG_DEBUG(("Start"));
-
   if (entry) {
     /* Remove from cache */
     if (entry->id)
@@ -325,8 +322,6 @@ silc_idlist_add_client(SilcIDList id_list, unsigned char *nickname,
 
 int silc_idlist_del_client(SilcIDList id_list, SilcClientEntry entry)
 {
-  SILC_LOG_DEBUG(("Start"));
-
   if (entry) {
     /* Remove from cache */
     if (entry->id)
@@ -615,8 +610,6 @@ silc_idlist_add_channel(SilcIDList id_list, char *channel_name, int mode,
 
 int silc_idlist_del_channel(SilcIDList id_list, SilcChannelEntry entry)
 {
-  SILC_LOG_DEBUG(("Start"));
-
   if (entry) {
     SilcChannelClientEntry chl;
 
index 803392f2e923ffd6eb714850f43603701a514abe..730352412b856473a87bc64fead3b9d6ac0fa2e1 100644 (file)
@@ -40,17 +40,6 @@ typedef struct {
   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;
-  bool pfs;
-  uint32 timeout;
-  void *context;
-} *SilcServerRekey;
-
 /*
    Generic ID list data structure.
 
@@ -69,8 +58,11 @@ typedef struct {
   SilcCipher send_key;
   SilcCipher receive_key;
 
-  /* Re-key context */
-  SilcServerRekey rekey;
+  /* 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;
+  bool pfs;
 
   /* Hash selected in the SKE protocol, NULL if not needed at all */
   SilcHash hash;
index 339f9881cc95f7bbe893cb2db714e00372c8e919..d31955fe56c2c01b247b467cbe93c5ffe521bf23 100644 (file)
@@ -71,6 +71,9 @@ int silc_server_protocol_ke_set_keys(SilcSKE ske,
   conn_data = silc_calloc(1, sizeof(*conn_data));
   idata = (SilcIDListData)conn_data;
 
+  if (ske->start_payload->flags & SILC_SKE_SP_FLAG_PFS)
+    idata->pfs = TRUE;
+
   /* Allocate cipher to be used in the communication */
   if (!silc_cipher_alloc(cipher->cipher->name, &idata->send_key)) {
     silc_free(conn_data);
@@ -98,16 +101,10 @@ int silc_server_protocol_ke_set_keys(SilcSKE ske,
   }
 
   /* Note that for responder the initiator's sending key is receiving key */
-  idata->rekey = silc_calloc(1, sizeof(*idata->rekey));
-  idata->rekey->send_enc_key = 
-    silc_calloc(keymat->enc_key_len / 8,
-               sizeof(*idata->rekey->send_enc_key));
-  memcpy(idata->rekey->send_enc_key, 
-        keymat->send_enc_key, keymat->enc_key_len / 8);
-  idata->rekey->enc_key_len = keymat->enc_key_len / 8;
-
-  if (ske->start_payload->flags & SILC_SKE_SP_FLAG_PFS)
-    idata->rekey->pfs = TRUE;
+  idata->send_enc_key = silc_calloc(keymat->enc_key_len / 8,
+                                   sizeof(*idata->send_enc_key));
+  memcpy(idata->send_enc_key, keymat->send_enc_key, keymat->enc_key_len / 8);
+  idata->enc_key_len = keymat->enc_key_len / 8;
 
   /* Save the remote host's public key */
   silc_pkcs_public_key_decode(ske->ke1_payload->pk_data, 
@@ -1012,8 +1009,8 @@ void silc_server_protocol_rekey_generate(SilcServer server,
 
   /* Generate the new key */
   keymat = silc_calloc(1, sizeof(*keymat));
-  silc_ske_process_key_material_data(idata->rekey->send_enc_key,
-                                    idata->rekey->enc_key_len,
+  silc_ske_process_key_material_data(idata->send_enc_key,
+                                    idata->enc_key_len,
                                     16, key_len, hash_len, 
                                     idata->hash, keymat);
 
@@ -1038,14 +1035,12 @@ void silc_server_protocol_rekey_generate(SilcServer server,
   silc_hmac_set_key(idata->hmac, keymat->hmac_key, keymat->hmac_key_len);
 
   /* Save the current sending encryption key */
-  memset(idata->rekey->send_enc_key, 0, idata->rekey->enc_key_len);
-  silc_free(idata->rekey->send_enc_key);
-  idata->rekey->send_enc_key = 
-    silc_calloc(keymat->enc_key_len / 8,
-               sizeof(*idata->rekey->send_enc_key));
-  memcpy(idata->rekey->send_enc_key, keymat->send_enc_key, 
-        keymat->enc_key_len / 8);
-  idata->rekey->enc_key_len = keymat->enc_key_len / 8;
+  memset(idata->send_enc_key, 0, idata->enc_key_len);
+  silc_free(idata->send_enc_key);
+  idata->send_enc_key = silc_calloc(keymat->enc_key_len / 8,
+                                   sizeof(*idata->send_enc_key));
+  memcpy(idata->send_enc_key, keymat->send_enc_key, keymat->enc_key_len / 8);
+  idata->enc_key_len = keymat->enc_key_len / 8;
 
   silc_ske_free_key_material(keymat);
 }
index 579f5033ebc8637b14d13fe7464a52053fc3e5d6..786566f0301812b55a6422c1fd7cb0078f31c740 100644 (file)
@@ -925,7 +925,8 @@ SILC_TASK_CALLBACK(silc_server_connect_to_router_final)
                            silc_server_perform_heartbeat,
                            server->timeout_queue);
 
-  /* Registed re-key timeout */
+  /* Register re-key timeout */
+  /* XXX this leaks memory as this is not freed anywhere, currently */
   rekey = silc_calloc(1, sizeof(*rekey));
   rekey->server = server;
   rekey->sock = sock;