added logic for checking the peer that created a connection with monotonic time
authort3sserakt <t3ss@posteo.de>
Wed, 22 Jan 2020 17:30:53 +0000 (18:30 +0100)
committert3sserakt <t3ss@posteo.de>
Wed, 22 Jan 2020 17:30:53 +0000 (18:30 +0100)
src/cadet/cadet_protocol.h
src/cadet/gnunet-service-cadet_connection.c
src/cadet/gnunet-service-cadet_core.c

index 91c7166097eb1c6f829149cfc6b1a916b6866529..67c76755b31332b54710b2c4440d68500d0ff3b2 100644 (file)
@@ -85,10 +85,16 @@ struct GNUNET_CADET_ConnectionCreateMessage
   uint32_t options GNUNET_PACKED;
 
   /**
-   * Infomation of known tunnel state to keep two peers synced. (xrs,t3ss)
-   * FIXME: find better var name.
+   *  This monotonic time is set, if a peer likes to trigger a KX, but is not
+   *  the peer that should start the KX. (xrs,t3ss)
    */
-  int tunnel_up;
+  struct GNUNET_TIME_Absolute monotime;
+
+  /**
+   *  We sign the monotime. The receiving peer can check the signature, to verify
+   *  the sending peer.
+   */
+  struct GNUNET_CRYPTO_EddsaSignature monotime_sig;
 
   /**
    * ID of the connection
index de304aed79aad76f070f97e6ac5d4f879c7b19e6..a6c3e51d4eceb86a8b8a7e64657461c9e8e26976 100644 (file)
@@ -622,11 +622,11 @@ send_create (void *cls)
 
   // check for tunnel state and define tunnel_up (xrs,t3ss)
   t = GCP_get_tunnel (cc->destination, GNUNET_YES);
-  if (NULL != t) 
+  if (NULL != t && (GCT_get_estate(t) == CADET_TUNNEL_KEY_UNINITIALIZED) && 
+                            (GCT_alice_or_betty (GCP_get_id(cc->destination)) == GNUNET_NO)) 
   {
-    create_msg->tunnel_up = (GCT_get_estate(t) == CADET_TUNNEL_KEY_UNINITIALIZED) && 
-                            (GCT_alice_or_betty (GCP_get_id(cc->destination)) == GNUNET_NO) 
-                            ? GNUNET_NO : GNUNET_YES;
+    create_msg->monotime = GNUNET_TIME_absolute_get_monotonic(we_need_config_handle_here);
+    create_msg->monotime_sig = create_monotime_sig(create_msg->monotime);
   }
 
   pids = (struct GNUNET_PeerIdentity *) &create_msg[1];
index 5953928753f898be59cde6faf9439600855b476a..7fc13111429bc72011b0372b77ce22a30344b258 100644 (file)
@@ -826,7 +826,7 @@ handle_connection_create (
     t = GCP_get_tunnel (sender, GNUNET_YES);
 
     // Check for CADET state in case the other side has lost the tunnel (xrs,t3ss)
-    if ((GNUNET_NO == msg->tunnel_up) &&
+    if ((NULL != msg->monotime) && check_monotime_sig(msg)
         (CADET_TUNNEL_KEY_OK == GCT_get_estate(t)))
     {
       GCT_change_estate (t, CADET_TUNNEL_KEY_UNINITIALIZED);