aboutsummaryrefslogtreecommitdiff
path: root/src/secretsharing/gnunet-service-secretsharing.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/secretsharing/gnunet-service-secretsharing.c')
-rw-r--r--src/secretsharing/gnunet-service-secretsharing.c51
1 files changed, 49 insertions, 2 deletions
diff --git a/src/secretsharing/gnunet-service-secretsharing.c b/src/secretsharing/gnunet-service-secretsharing.c
index f169a1655..1e19df5ff 100644
--- a/src/secretsharing/gnunet-service-secretsharing.c
+++ b/src/secretsharing/gnunet-service-secretsharing.c
@@ -558,6 +558,27 @@ decrypt_session_destroy (struct DecryptSession *ds)
558 ds->consensus = NULL; 558 ds->consensus = NULL;
559 } 559 }
560 560
561 if (NULL != ds->info)
562 {
563 unsigned int i;
564 for (i = 0; i < ds->share->num_peers; i++)
565 {
566 if (NULL != ds->info[i].partial_decryption)
567 {
568 gcry_mpi_release (ds->info[i].partial_decryption);
569 ds->info[i].partial_decryption = NULL;
570 }
571 }
572 GNUNET_free (ds->info);
573 ds->info = NULL;
574 }
575
576 if (NULL != ds->share)
577 {
578 GNUNET_SECRETSHARING_share_destroy (ds->share);
579 ds->share = NULL;
580 }
581
561 if (NULL != ds->client_mq) 582 if (NULL != ds->client_mq)
562 { 583 {
563 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "destroying decrypt MQ\n"); 584 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "destroying decrypt MQ\n");
@@ -1429,6 +1450,14 @@ decrypt_conclude (void *cls)
1429 1450
1430 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "sent decrypt done to client\n"); 1451 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "sent decrypt done to client\n");
1431 1452
1453 GNUNET_free (indices);
1454
1455 gcry_mpi_release(lagrange);
1456 gcry_mpi_release(m);
1457 gcry_mpi_release(tmp);
1458 gcry_mpi_release(prod);
1459 gcry_mpi_release(c_2);
1460
1432 // FIXME: what if not enough peers participated? 1461 // FIXME: what if not enough peers participated?
1433} 1462}
1434 1463
@@ -1568,7 +1597,7 @@ decrypt_new_element (void *cls,
1568 session->share->my_peer, info - session->info, tmp1_str, tmp2_str); 1597 session->share->my_peer, info - session->info, tmp1_str, tmp2_str);
1569 GNUNET_free (tmp1_str); 1598 GNUNET_free (tmp1_str);
1570 GNUNET_free (tmp2_str); 1599 GNUNET_free (tmp2_str);
1571 // return; 1600 goto cleanup;
1572 } 1601 }
1573 1602
1574 1603
@@ -1582,12 +1611,22 @@ decrypt_new_element (void *cls,
1582 { 1611 {
1583 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "P%u: Received invalid partial decryption from P%u (eqn 2)\n", 1612 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "P%u: Received invalid partial decryption from P%u (eqn 2)\n",
1584 session->share->my_peer, info - session->info); 1613 session->share->my_peer, info - session->info);
1585 // return; 1614 goto cleanup;
1586 } 1615 }
1587 1616
1588 1617
1589 GNUNET_CRYPTO_mpi_scan_unsigned (&info->partial_decryption, &d->partial_decryption, 1618 GNUNET_CRYPTO_mpi_scan_unsigned (&info->partial_decryption, &d->partial_decryption,
1590 GNUNET_SECRETSHARING_ELGAMAL_BITS / 8); 1619 GNUNET_SECRETSHARING_ELGAMAL_BITS / 8);
1620cleanup:
1621 gcry_mpi_release (tmp1);
1622 gcry_mpi_release (tmp2);
1623 gcry_mpi_release (sigma);
1624 gcry_mpi_release (commit1);
1625 gcry_mpi_release (commit2);
1626 gcry_mpi_release (r);
1627 gcry_mpi_release (w);
1628 gcry_mpi_release (challenge);
1629 gcry_mpi_release (c1);
1591} 1630}
1592 1631
1593 1632
@@ -1691,6 +1730,14 @@ insert_decrypt_element (struct DecryptSession *ds)
1691 GNUNET_CONSENSUS_insert (ds->consensus, &element, NULL, NULL); 1730 GNUNET_CONSENSUS_insert (ds->consensus, &element, NULL, NULL);
1692 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: Inserting decrypt element done!\n", 1731 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: Inserting decrypt element done!\n",
1693 ds->share->my_peer); 1732 ds->share->my_peer);
1733
1734 gcry_mpi_release (s);
1735 gcry_mpi_release (w);
1736 gcry_mpi_release (c1);
1737 gcry_mpi_release (beta);
1738 gcry_mpi_release (tmp);
1739 gcry_mpi_release (challenge);
1740 gcry_mpi_release (sigma);
1694} 1741}
1695 1742
1696 1743