aboutsummaryrefslogtreecommitdiff
path: root/crypto.c
diff options
context:
space:
mode:
authorMarkus Teich <markus.teich@stusta.mhn.de>2016-06-20 00:36:18 +0200
committerMarkus Teich <markus.teich@stusta.mhn.de>2016-06-20 00:36:18 +0200
commit65775f8276b082a18c99cb75c11193685bd5d822 (patch)
tree626229703ecafef6ce509584582f2e3b181f5bab /crypto.c
parent8e44164facc215a09984d83f488345f548753477 (diff)
add 3dim array helpers
Diffstat (limited to 'crypto.c')
-rw-r--r--crypto.c53
1 files changed, 49 insertions, 4 deletions
diff --git a/crypto.c b/crypto.c
index 044db00..e7397d5 100644
--- a/crypto.c
+++ b/crypto.c
@@ -37,9 +37,8 @@ static gcry_mpi_t ec_n;
/**
- * brandt_crypto_init
- *
- *
+ * brandt_crypto_init initializes the crypto system and must be called before
+ * any other function from this file.
*/
void
brandt_crypto_init ()
@@ -297,8 +296,9 @@ smc_init2 (uint16_t size1, uint16_t size2)
gcry_mpi_point_t **ret;
gcry_mpi_point_t *data;
- ret = calloc (size1, sizeof (*ret) + (size2 * sizeof (**ret)));
+ ret = calloc (size1, sizeof (*ret) + size2 * sizeof (**ret));
brandt_assert (NULL != ret);
+
data = (gcry_mpi_point_t *)&ret[size1];
for (i = 0; i < size1; i++)
{
@@ -322,6 +322,51 @@ smc_free2 (gcry_mpi_point_t **dst, uint16_t size1, uint16_t size2)
}
+static gcry_mpi_point_t ***
+smc_init3 (uint16_t size1, uint16_t size2, uint16_t size3)
+{
+ uint16_t i, j, k;
+ gcry_mpi_point_t ***ret;
+ gcry_mpi_point_t **layer1;
+ gcry_mpi_point_t *layer2;
+
+ ret = calloc (size1, sizeof (*ret) +
+ size2 * sizeof (**ret) +
+ size2 * size3 * sizeof (***ret));
+ brandt_assert (NULL != ret);
+
+ layer1 = (gcry_mpi_point_t **)&ret[size1];
+ layer2 = (gcry_mpi_point_t *)&layer1[size1*size2];
+ for (i = 0; i < size1; i++)
+ {
+ ret[i] = &layer1[i * size2];
+ for (j = 0; j < size2; j++)
+ {
+ layer1[i * size2 + j] = &layer2[(i * size2 + j) * size3];
+ for (k = 0; k < size3; k++)
+ ret[i][j][k] = gcry_mpi_point_new (0);
+ }
+ }
+ return ret;
+}
+
+
+static void
+smc_free3 (gcry_mpi_point_t ***dst,
+ uint16_t size1,
+ uint16_t size2,
+ uint16_t size3)
+{
+ uint16_t i, j, k;
+
+ for (i = 0; i < size1; i++)
+ for (j = 0; j < size2; j++)
+ for (k = 0; k < size3; k++)
+ gcry_mpi_point_release (dst[i][j][k]);
+ free (dst);
+}
+
+
/**
* smc_sums_partial calculates sums up until the current index and stores them
* in @a out. \f$\forall i \leq len: out_i=\sum_{h=1}^iin_h\f$