gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r20400 - gnunet/src/namestore


From: gnunet
Subject: [GNUnet-SVN] r20400 - gnunet/src/namestore
Date: Fri, 9 Mar 2012 13:03:29 +0100

Author: wachs
Date: 2012-03-09 13:03:29 +0100 (Fri, 09 Mar 2012)
New Revision: 20400

Modified:
   gnunet/src/namestore/gnunet-service-namestore.c
Log:
- signing during zone iteration


Modified: gnunet/src/namestore/gnunet-service-namestore.c
===================================================================
--- gnunet/src/namestore/gnunet-service-namestore.c     2012-03-09 11:57:32 UTC 
(rev 20399)
+++ gnunet/src/namestore/gnunet-service-namestore.c     2012-03-09 12:03:29 UTC 
(rev 20400)
@@ -424,9 +424,9 @@
       copied_elements, lnc->name, GNUNET_h2s(lnc->zone));
 
   if ((copied_elements == rd_count) && (NULL != signature))
-    contains_signature = GNUNET_YES;
+    contains_signature = GNUNET_YES; /* returning all records, so include 
signature */
   else
-    contains_signature = GNUNET_NO;
+    contains_signature = GNUNET_NO; /* returning not all records, so do not 
include signature */
 
 
   if ((NULL != zone_key) && (copied_elements == rd_count))
@@ -1332,7 +1332,10 @@
 {
   struct GNUNET_NAMESTORE_ZoneIteration *zi = cls;
   struct GNUNET_NAMESTORE_Client *nc = zi->client;
-  //size_t len;
+  struct GNUNET_NAMESTORE_CryptoContainer * cc;
+  struct GNUNET_CRYPTO_RsaSignature *signature_new = NULL;
+  GNUNET_HashCode zone_key_hash;
+  int authoritative = GNUNET_NO;
 
   if ((zone_key == NULL) && (name == NULL))
   {
@@ -1386,6 +1389,17 @@
     name_tmp = (char *) &zir_msg[1];
     rd_tmp = &name_tmp[name_len];
 
+    GNUNET_CRYPTO_hash(zone_key, sizeof (struct 
GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), &zone_key_hash);
+    if (GNUNET_CONTAINER_multihashmap_contains(zonekeys, &zone_key_hash))
+    {
+      cc = GNUNET_CONTAINER_multihashmap_get(zonekeys, &zone_key_hash);
+      signature_new = GNUNET_NAMESTORE_create_signature(cc->privkey, name, rd, 
rd_count);
+      GNUNET_assert (signature_new != NULL);
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating signature for name `%s' 
with %u records in zone `%s'\n",name, rd_count, GNUNET_h2s(&zone_key_hash));
+      authoritative = GNUNET_YES;
+    }
+
+
     zir_msg->gns_header.header.type = htons 
(GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_RESPONSE);
     zir_msg->gns_header.header.size = htons (msg_size);
     zir_msg->gns_header.r_id = htonl(zi->request_id);
@@ -1394,7 +1408,13 @@
     zir_msg->name_len = htons (name_len);
     zir_msg->rd_count = htons (rd_count);
     zir_msg->rd_len = htons (rd_ser_len);
-    zir_msg->signature = *signature;
+    if ((GNUNET_YES == authoritative) && (NULL != signature_new))
+    {
+      zir_msg->signature = *signature_new;
+      GNUNET_free (signature_new);
+    }
+    else
+      zir_msg->signature = *signature;
     GNUNET_assert (NULL != zone_key);
     if (zone_key != NULL)
       zir_msg->public_key = *zone_key;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]