aboutsummaryrefslogtreecommitdiff
path: root/src/scalarproduct/gnunet-service-scalarproduct_bob.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/scalarproduct/gnunet-service-scalarproduct_bob.c')
-rw-r--r--src/scalarproduct/gnunet-service-scalarproduct_bob.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/scalarproduct/gnunet-service-scalarproduct_bob.c b/src/scalarproduct/gnunet-service-scalarproduct_bob.c
index 38fc65f37..29e2d7eed 100644
--- a/src/scalarproduct/gnunet-service-scalarproduct_bob.c
+++ b/src/scalarproduct/gnunet-service-scalarproduct_bob.c
@@ -308,6 +308,25 @@ find_matching_cadet_session (const struct GNUNET_HashCode *key)
308 308
309 309
310/** 310/**
311 * Callback used to free the elements in the map.
312 *
313 * @param cls NULL
314 * @param key key of the element
315 * @param value the value to free
316 */
317static int
318free_element_cb (void *cls,
319 const struct GNUNET_HashCode *key,
320 void *value)
321{
322 struct GNUNET_SCALARPRODUCT_Element *element = value;
323
324 GNUNET_free (element);
325 return GNUNET_OK;
326}
327
328
329/**
311 * Destroy session state, we are done with it. 330 * Destroy session state, we are done with it.
312 * 331 *
313 * @param session the session to free elements from 332 * @param session the session to free elements from
@@ -351,7 +370,9 @@ destroy_service_session (struct BobServiceSession *s)
351 s)); 370 s));
352 if (NULL != s->intersected_elements) 371 if (NULL != s->intersected_elements)
353 { 372 {
354 /* FIXME: free elements */ 373 GNUNET_CONTAINER_multihashmap_iterate (s->intersected_elements,
374 &free_element_cb,
375 NULL);
355 GNUNET_CONTAINER_multihashmap_destroy (s->intersected_elements); 376 GNUNET_CONTAINER_multihashmap_destroy (s->intersected_elements);
356 s->intersected_elements = NULL; 377 s->intersected_elements = NULL;
357 } 378 }
@@ -758,6 +779,7 @@ compute_service_response (struct BobServiceSession *session)
758 &a[q[i]], 779 &a[q[i]],
759 &r_prime[i])); 780 &r_prime[i]));
760 } 781 }
782 gcry_mpi_release (tmp);
761 783
762 // Calculate S' = E(SUM( r_i^2 )) 784 // Calculate S' = E(SUM( r_i^2 ))
763 tmp = compute_square_sum (rand, count); 785 tmp = compute_square_sum (rand, count);
@@ -765,6 +787,7 @@ compute_service_response (struct BobServiceSession *session)
765 tmp, 787 tmp,
766 1, 788 1,
767 &session->s_prime); 789 &session->s_prime);
790 gcry_mpi_release (tmp);
768 791
769 // Calculate S = E(SUM( (r_i + b_i)^2 )) 792 // Calculate S = E(SUM( (r_i + b_i)^2 ))
770 for (i = 0; i < count; i++) 793 for (i = 0; i < count; i++)
@@ -774,6 +797,7 @@ compute_service_response (struct BobServiceSession *session)
774 tmp, 797 tmp,
775 1, 798 1,
776 &session->s); 799 &session->s);
800 gcry_mpi_release (tmp);
777 801
778 session->r = r; 802 session->r = r;
779 session->r_prime = r_prime; 803 session->r_prime = r_prime;
@@ -781,7 +805,6 @@ compute_service_response (struct BobServiceSession *session)
781 // release rand, b and a 805 // release rand, b and a
782 for (i = 0; i < count; i++) 806 for (i = 0; i < count; i++)
783 gcry_mpi_release (rand[i]); 807 gcry_mpi_release (rand[i]);
784 gcry_mpi_release (tmp);
785 GNUNET_free (session->e_a); 808 GNUNET_free (session->e_a);
786 session->e_a = NULL; 809 session->e_a = NULL;
787 GNUNET_free (p); 810 GNUNET_free (p);