gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r29842 - gnunet/src/scalarproduct


From: gnunet
Subject: [GNUnet-SVN] r29842 - gnunet/src/scalarproduct
Date: Fri, 4 Oct 2013 16:41:54 +0200

Author: cfuchs
Date: 2013-10-04 16:41:54 +0200 (Fri, 04 Oct 2013)
New Revision: 29842

Modified:
   gnunet/src/scalarproduct/gnunet-service-scalarproduct.c
Log:
more work on multipart support


Modified: gnunet/src/scalarproduct/gnunet-service-scalarproduct.c
===================================================================
--- gnunet/src/scalarproduct/gnunet-service-scalarproduct.c     2013-10-04 
14:20:04 UTC (rev 29841)
+++ gnunet/src/scalarproduct/gnunet-service-scalarproduct.c     2013-10-04 
14:41:54 UTC (rev 29842)
@@ -155,6 +155,16 @@
   gcry_mpi_t * a;
 
   /**
+   * Bob's permutation p of R
+   */
+  gcry_mpi_t * r;
+  
+  /**
+   * Bob's permutation q of R
+   */
+  gcry_mpi_t * r_prime;
+          
+  /**
    * The computed scalar 
    */
   gcry_mpi_t product;
@@ -815,9 +825,7 @@
  *         GNUNET_OK if the operation succeeded
  */
 static int
-prepare_service_response (gcry_mpi_t * r,
-                          gcry_mpi_t * r_prime,
-                          gcry_mpi_t s,
+prepare_service_response (gcry_mpi_t s,
                           gcry_mpi_t s_prime,
                           struct ServiceSession * request,
                           struct ServiceSession * response)
@@ -855,55 +863,60 @@
   // doesn't really justify having 2 functions for that
   // so i put it into blocks to enhance readability 
   // convert s
-  {
-    memset(element_exported, 0, PAILLIER_ELEMENT_LENGTH);
-    GNUNET_assert (0 == gcry_mpi_print (GCRYMPI_FMT_USG,
-                                        element_exported, 
PAILLIER_ELEMENT_LENGTH,
-                                        &element_length,
-                                        s));
-    adjust (element_exported, element_length, PAILLIER_ELEMENT_LENGTH);
-    memcpy (current, element_exported, PAILLIER_ELEMENT_LENGTH);
-    current += PAILLIER_ELEMENT_LENGTH;
-  }
+  memset (element_exported, 0, PAILLIER_ELEMENT_LENGTH);
+  GNUNET_assert (0 == gcry_mpi_print (GCRYMPI_FMT_USG,
+                                      element_exported, 
PAILLIER_ELEMENT_LENGTH,
+                                      &element_length,
+                                      s));
+  adjust (element_exported, element_length, PAILLIER_ELEMENT_LENGTH);
+  memcpy (current, element_exported, PAILLIER_ELEMENT_LENGTH);
+  current += PAILLIER_ELEMENT_LENGTH;
+
   // convert stick
-  {
-    memset(element_exported, 0, PAILLIER_ELEMENT_LENGTH);
-    GNUNET_assert (0 == gcry_mpi_print (GCRYMPI_FMT_USG,
-                                        element_exported, 
PAILLIER_ELEMENT_LENGTH,
-                                        &element_length,
-                                        s_prime));
-    adjust (element_exported, element_length, PAILLIER_ELEMENT_LENGTH);
-    memcpy (current, element_exported, PAILLIER_ELEMENT_LENGTH);
+  memset (element_exported, 0, PAILLIER_ELEMENT_LENGTH);
+  GNUNET_assert (0 == gcry_mpi_print (GCRYMPI_FMT_USG,
+                                      element_exported, 
PAILLIER_ELEMENT_LENGTH,
+                                      &element_length,
+                                      s_prime));
+  adjust (element_exported, element_length, PAILLIER_ELEMENT_LENGTH);
+  memcpy (current, element_exported, PAILLIER_ELEMENT_LENGTH);
+  current += PAILLIER_ELEMENT_LENGTH;
 
-    current += PAILLIER_ELEMENT_LENGTH;
-  }
   // convert k[][]
   for (i = 0; i < request->used_element_count; i++)
   {
     if (request->transferred_element_count <= i)
-        break; //reached end of this message, can't include more
-    
+      break; //reached end of this message, can't include more
+
     //k[i][p]
-    memset(element_exported, 0, PAILLIER_ELEMENT_LENGTH);
+    memset (element_exported, 0, PAILLIER_ELEMENT_LENGTH);
     GNUNET_assert (0 == gcry_mpi_print (GCRYMPI_FMT_USG,
                                         element_exported, 
PAILLIER_ELEMENT_LENGTH,
                                         &element_length,
-                                        r[i]));
+                                        request->r[i]));
     adjust (element_exported, element_length, PAILLIER_ELEMENT_LENGTH);
     memcpy (current, element_exported, PAILLIER_ELEMENT_LENGTH);
     current += PAILLIER_ELEMENT_LENGTH;
     //k[i][q]
-    memset(element_exported, 0, PAILLIER_ELEMENT_LENGTH);
+    memset (element_exported, 0, PAILLIER_ELEMENT_LENGTH);
     GNUNET_assert (0 == gcry_mpi_print (GCRYMPI_FMT_USG,
                                         element_exported, 
PAILLIER_ELEMENT_LENGTH,
                                         &element_length,
-                                        r_prime[i]));
+                                        request->r_prime[i]));
     adjust (element_exported, element_length, PAILLIER_ELEMENT_LENGTH);
     memcpy (current, element_exported, PAILLIER_ELEMENT_LENGTH);
-    current += PAILLIER_ELEMENT_LENGTH;    
+    current += PAILLIER_ELEMENT_LENGTH;
   }
+  
   GNUNET_free (element_exported);
-
+  for (i = 0; i < request->transferred_element_count; i++)
+  {
+    gcry_mpi_release (request->r_prime[i]);
+    gcry_mpi_release (request->r[i]);
+  }
+  gcry_mpi_release (s);
+  gcry_mpi_release (s_prime);
+  
   request->msg = (struct GNUNET_MessageHeader *) msg;
   request->service_transmit_handle =
           GNUNET_MESH_notify_transmit_ready (request->tunnel,
@@ -1096,6 +1109,9 @@
   }
   GNUNET_free (a_pi_prime);
   GNUNET_free (rand_pi_prime);
+  
+  request->r = r;
+  request->r_prime = r_prime;
 
   // Calculate S' =  E(SUM( r_i^2 ))
   s_prime = compute_square_sum (rand, count);
@@ -1117,22 +1133,13 @@
     // rp, rq, aq, ap, bp, bq are released along with a, r, b respectively, (a 
and b are handled at except:)
     gcry_mpi_release (rand[i]);
 
-  // copy the Kp[], Kq[], S and Stick into a new message
-  if (GNUNET_YES != prepare_service_response (r, r_prime, s, s_prime, request, 
response))
+  // copy the r[], r_prime[], S and Stick into a new message, 
prepare_service_response frees these
+  if (GNUNET_YES != prepare_service_response (s, s_prime, request, response))
     GNUNET_log (GNUNET_ERROR_TYPE_INFO, _ ("Failed to communicate with `%s', 
scalar product calculation aborted.\n"),
                 GNUNET_i2s (&request->peer));
   else
     ret = GNUNET_OK;
 
-  for (i = 0; i < count; i++)
-  {
-    gcry_mpi_release (r_prime[i]);
-    gcry_mpi_release (r[i]);
-  }
-
-  gcry_mpi_release (s);
-  gcry_mpi_release (s_prime);
-
 except:
   for (i = 0; i < count; i++)
   {




reply via email to

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