[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r31700 - gnunet/src/core
From: |
gnunet |
Subject: |
[GNUnet-SVN] r31700 - gnunet/src/core |
Date: |
Mon, 23 Dec 2013 09:35:38 +0100 |
Author: grothoff
Date: 2013-12-23 09:35:38 +0100 (Mon, 23 Dec 2013)
New Revision: 31700
Modified:
gnunet/src/core/gnunet-service-core_kx.c
gnunet/src/core/test_core_defaults.conf
Log:
-trying to fix amatus's KX issue
Modified: gnunet/src/core/gnunet-service-core_kx.c
===================================================================
--- gnunet/src/core/gnunet-service-core_kx.c 2013-12-23 02:34:42 UTC (rev
31699)
+++ gnunet/src/core/gnunet-service-core_kx.c 2013-12-23 08:35:38 UTC (rev
31700)
@@ -108,8 +108,7 @@
struct GNUNET_TIME_AbsoluteNBO expiration_time;
/**
- * Ephemeral public ECC key (always for NIST P-521) encoded in a format
suitable
- * for network transmission as created using 'gcry_sexp_sprint'.
+ * Ephemeral public ECC key.
*/
struct GNUNET_CRYPTO_EcdhePublicKey ephemeral_key;
@@ -308,6 +307,11 @@
struct PingMessage ping;
/**
+ * Ephemeral public ECC key of the other peer.
+ */
+ struct GNUNET_CRYPTO_EcdhePublicKey other_ephemeral_key;
+
+ /**
* Key we use to encrypt our messages for the other peer
* (initialized by us when we do the handshake).
*/
@@ -736,7 +740,42 @@
MIN_PING_FREQUENCY);
}
+
/**
+ * Derive fresh session keys from the current ephemeral keys.
+ *
+ * @param kx session to derive keys for
+ */
+static void
+derive_session_keys (struct GSC_KeyExchangeInfo *kx)
+{
+ struct GNUNET_HashCode key_material;
+
+ if (GNUNET_OK !=
+ GNUNET_CRYPTO_ecc_ecdh (my_ephemeral_key,
+ &kx->other_ephemeral_key,
+ &key_material))
+ {
+ GNUNET_break (0);
+ return;
+ }
+ derive_aes_key (&GSC_my_identity,
+ &kx->peer,
+ &key_material,
+ &kx->encrypt_key);
+ derive_aes_key (&kx->peer,
+ &GSC_my_identity,
+ &key_material,
+ &kx->decrypt_key);
+ memset (&key_material, 0, sizeof (key_material));
+ /* fresh key, reset sequence numbers */
+ kx->last_sequence_number_received = 0;
+ kx->last_packets_bitmap = 0;
+ setup_fresh_ping (kx);
+}
+
+
+/**
* We received a SET_KEY message. Validate and update
* our key material and status.
*
@@ -753,7 +792,6 @@
struct GNUNET_TIME_Absolute now;
enum KxStateMachine sender_status;
uint16_t size;
- struct GNUNET_HashCode key_material;
size = ntohs (msg->size);
if (sizeof (struct EphemeralKeyMessage) != size)
@@ -815,30 +853,12 @@
end_t.abs_value_us);
return;
}
- if (GNUNET_OK !=
- GNUNET_CRYPTO_ecc_ecdh (my_ephemeral_key,
- &m->ephemeral_key,
- &key_material))
- {
- GNUNET_break (0);
- return;
- }
+ kx->other_ephemeral_key = m->ephemeral_key;
+ kx->foreign_key_expires = end_t;
+ derive_session_keys (kx);
GNUNET_STATISTICS_update (GSC_stats,
- gettext_noop ("# EPHEMERAL_KEY messages
decrypted"), 1,
+ gettext_noop ("# EPHEMERAL_KEY messages
received"), 1,
GNUNET_NO);
- derive_aes_key (&GSC_my_identity,
- &kx->peer,
- &key_material,
- &kx->encrypt_key);
- derive_aes_key (&kx->peer,
- &GSC_my_identity,
- &key_material,
- &kx->decrypt_key);
- /* fresh key, reset sequence numbers */
- kx->last_sequence_number_received = 0;
- kx->last_packets_bitmap = 0;
- kx->foreign_key_expires = end_t;
- setup_fresh_ping (kx);
/* check if we still need to send the sender our key */
sender_status = (enum KxStateMachine) ntohl (m->sender_status);
@@ -1533,6 +1553,7 @@
for (pos = kx_head; NULL != pos; pos = pos->next)
{
pos->status = KX_STATE_REKEY_SENT;
+ derive_session_keys (pos);
send_key (pos);
}
}
Modified: gnunet/src/core/test_core_defaults.conf
===================================================================
--- gnunet/src/core/test_core_defaults.conf 2013-12-23 02:34:42 UTC (rev
31699)
+++ gnunet/src/core/test_core_defaults.conf 2013-12-23 08:35:38 UTC (rev
31700)
@@ -92,3 +92,6 @@
[namecache]
AUTOSTART = NO
+
+[set]
+AUTOSTART = NO
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r31700 - gnunet/src/core,
gnunet <=