diff options
Diffstat (limited to 'src/scalarproduct/gnunet-service-scalarproduct_bob.c')
-rw-r--r-- | src/scalarproduct/gnunet-service-scalarproduct_bob.c | 27 |
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 | */ | ||
317 | static int | ||
318 | free_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); |