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;
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);
int silc_idlist_del_server(SilcIDList id_list, SilcServerEntry entry)
{
- SILC_LOG_DEBUG(("Start"));
-
if (entry) {
/* Remove from cache */
if (entry->id)
int silc_idlist_del_client(SilcIDList id_list, SilcClientEntry entry)
{
- SILC_LOG_DEBUG(("Start"));
-
if (entry) {
/* Remove from cache */
if (entry->id)
int silc_idlist_del_channel(SilcIDList id_list, SilcChannelEntry entry)
{
- SILC_LOG_DEBUG(("Start"));
-
if (entry) {
SilcChannelClientEntry chl;
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.
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;
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);
}
/* 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,
/* 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);
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);
}