From 65775f8276b082a18c99cb75c11193685bd5d822 Mon Sep 17 00:00:00 2001 From: Markus Teich Date: Mon, 20 Jun 2016 00:36:18 +0200 Subject: add 3dim array helpers --- crypto.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) (limited to 'crypto.c') 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$ -- cgit v1.2.3