start zklaim integration again
authorSchanzenbach, Martin <martin.schanzenbach@aisec.fraunhofer.de>
Mon, 13 Aug 2018 19:44:21 +0000 (21:44 +0200)
committerSchanzenbach, Martin <martin.schanzenbach@aisec.fraunhofer.de>
Mon, 13 Aug 2018 19:44:21 +0000 (21:44 +0200)
configure.ac
po/POTFILES.in
src/zklaim/Makefile.am
src/zklaim/main.c [deleted file]
src/zklaim/zklaim.c [new file with mode: 0644]

index fb9012f33f2d9cd65df1882ee76a771c004f980e..0162f39f49d47ddb3ca3e35edd288193d850b0de 100644 (file)
@@ -447,7 +447,7 @@ AC_CHECK_LIB(ogg, ogg_stream_flush_fill,
 
 # check for zklaims
 zklaim=0
-AC_CHECK_HEADER([zklaim.h],zklaim=1)
+AC_CHECK_HEADER([zklaim/zklaim.h],zklaim=1)
 AM_CONDITIONAL(HAVE_ZKLAIM, [test "$zklaim" = 1])
 if test "x$zklaim" = x1
 then
index d710eaba89b130acbcaf4fb23b273359c783e897..7846872eca0b38b26ea58b7731acdd48da155480 100644 (file)
@@ -508,6 +508,7 @@ src/vpn/gnunet-service-vpn.c
 src/vpn/gnunet-vpn.c
 src/vpn/vpn_api.c
 src/zklaim/main.c
+src/zklaim/zklaim.c
 src/zonemaster/gnunet-service-zonemaster.c
 src/fs/fs_api.h
 src/include/gnunet_common.h
index b2876d2745478c6f6074762f03be9f9740044b7d..c7ca595b8861bac351d47c40479292f8e23c2dfe 100644 (file)
@@ -1,22 +1,47 @@
 # This Makefile.am is in the public domain
 AM_CPPFLAGS = -I$(top_srcdir)/src/include
 
-if MINGW
-  WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols
-endif
+plugindir = $(libdir)/gnunet
+
+libexecdir= $(pkglibdir)/libexec/
+
+pkgcfgdir= $(pkgdatadir)/config.d/
 
 if USE_COVERAGE
   AM_CFLAGS = --coverage -O0
   XLIB = -lgcov
 endif
 
-bin_PROGRAMS = \
- gnunet-zklaim
 
-gnunet_zklaim_SOURCES = \
- main.c
-gnunet_zklaim_LDFLAGS = -rdynamic
-gnunet_zklaim_LDADD = \
- -lzklaim \
- -lgcrypt 
+libgnunetzklaim_la_SOURCES = zklaim.c
+libgnunetzklaim_la_LIBADD = \
+  $(GCLIBADD)\
+  $(LIBGCRYPT_LIBS) \
+       -lzklaim \
+  -lgcrypt \
+  -lgmp \
+  -lgmpxx \
+  -lcrypto \
+  -lprocps \
+  -lstdc++ \
+  -lm
+libgnunetzklaim_la_LDFLAGS = \
+  $(GN_LIB_LDFLAGS) \
+  -version-info 1:0:0
+
+lib_LTLIBRARIES = libgnunetzklaim.la
+
+if ENABLE_TEST_RUN
+AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
+TESTS = $(check_PROGRAMS)
+endif
+
+#check_PROGRAMS = test_cpabe 
 
+#test_cpabe_SOURCES = \
+# test_cpabe.c
+#test_cpabe_LDADD = \
+# libgnunetabe.la \
+# $(top_builddir)/src/util/libgnunetutil.la
+#check_PROGRAMS += \
+# test_cpabe
diff --git a/src/zklaim/main.c b/src/zklaim/main.c
deleted file mode 100644 (file)
index 3fe823b..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/**
- * Test File for zklaim c implementation
- */
-
-#include "zklaim.h"
-#include "zklaim_ecc.h"
-#include "zklaim_hash.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <gcrypt.h>
-
-// to boost up valgrind
-int worker() {
-    gcry_sexp_t priv, pub;
-    zklaim_gen_pk(&priv);
-    zklaim_get_pub(priv, &pub);
-    unsigned char *pubbuf;
-    size_t publen;
-    zklaim_pub2buf(pub, &pubbuf, &publen);
-
-    printf("===========================================================================\n");
-    printf("===========================================================================\n");
-    printf("============================== ISSUER =====================================\n");
-    printf("===========================================================================\n");
-    printf("===========================================================================\n");
-    //zklaim_ctx* ctx = zklaim_context_init();
-    //zklaim_proving_key* pk = zklaim_proving_key_get(ctx);
-    /*
-     * - 1 -
-     * initialize data structures
-     */
-    printf("[ISSUER] initializing context\n");
-    zklaim_ctx *ctx = zklaim_context_new();
-
-    if (sizeof(ctx->pub_key) != publen) {
-        printf("size mismatch!");
-        return 1;
-    }
-
-    // TODO: there should be a zklaim method for this
-    memcpy(ctx->pub_key, pubbuf, sizeof(ctx->pub_key));
-    free(pubbuf);
-
-    //print_sexp(pub);
-
-    /*
-     * - 2 -
-     * setup the first payload
-     */
-    printf("[ISSUER] Setting up payloads..\n");
-    zklaim_payload pl, pl2;
-    memset(&pl, 0, sizeof(zklaim_payload));
-    pl.data0_ref = 18;
-    pl.data0_op = (enum zklaim_op) (zklaim_greater | zklaim_eq);
-    pl.data1_ref = 1;
-    pl.data1_op = zklaim_eq;
-    pl.data2_ref = 2;
-    pl.data2_op = zklaim_eq;
-    pl.data3_ref = 3;
-    pl.data3_op = zklaim_eq;
-    pl.data4_ref = 600;
-    pl.data4_op = zklaim_less;
-    pl.priv = 0;
-
-    memset(&pl2, 0, sizeof(zklaim_payload));
-    pl2.data0_ref = 0;
-    pl2.data0_op = zklaim_noop;
-    pl2.data1_ref = 0;
-    pl2.data1_op = zklaim_noop;
-    pl2.data2_ref = 0;
-    pl2.data2_op = zklaim_noop;
-    pl2.data3_ref = 0;
-    pl2.data3_op = zklaim_noop;
-    pl2.data4_ref = 9223372036854775807;
-    pl2.data4_op = zklaim_less_or_eq;
-    pl2.priv = 0;
-
-    // fill in the values
-    zklaim_set_attr(&pl, 23, 0);
-    zklaim_set_attr(&pl, 1, 1);
-    zklaim_set_attr(&pl, 2, 2);
-    zklaim_set_attr(&pl, 3, 3);
-    zklaim_set_attr(&pl, 599, 4);
-
-    zklaim_set_attr(&pl2, 0, 0);
-    zklaim_set_attr(&pl2, 0, 1);
-    zklaim_set_attr(&pl2, 0, 2);
-    zklaim_set_attr(&pl2, 0, 3);
-    zklaim_set_attr(&pl2, 9223372036854775807, 4);
-
-    /*
-     * - 3 -
-     * add payload to context
-     */
-    printf("[ISSUER] adding payloads to context\n");
-    zklaim_add_pl(ctx, pl);
-    //zklaim_add_pl(ctx, pl2);
-    //zklaim_add_pl(ctx, pl2);
-    zklaim_hash_ctx(ctx);
-
-    printf("[ISSUER] performing trusted setup in order to generate keys\n");
-    printf("-> trusted setup result: %s\n", (zklaim_trusted_setup(ctx) ? "failed" : "passed"));
-
-    //unsigned char* buf;
-    //size_t vksize = zklaim_verification_key_serialize(ctx, &buf);
-    //printf("serialized vk size: %zuB\n", vksize);
-
-    // write key to disk
-    //FILE* f = fopen("/tmp/vk1", "w");
-    //fwrite(buf, vksize, 1, f);
-    //fclose(f);
-
-    //zklaim_verification_key_deserialize(ctx2, buf, vksize);
-
-    //free(buf);
-
-    //size_t pksize = zklaim_proving_key_serialize(ctx, &buf);
-    //printf("serialized pk size: %.2fMB\n", ((float) pksize)/1000/1000);
-
-    //zklaim_proving_key_deserialize(ctx, buf, pksize);
-
-    //zklaim_print(ctx);
-
-    //zklaim_ctx_sign(ctx, priv);
-
-
-    printf("-> signing context: %s\n", zklaim_ctx_sign(ctx, priv) ? "failed" : "passed");
-
-    unsigned char* ctx_issuer;
-
-    printf("\n[ISSUER] serializing context\n");
-    size_t len = zklaim_ctx_serialize(ctx, &ctx_issuer);
-
-    /*
-     * - 4 -
-     * generate proof
-     */
-
-    //printf("\n-> signing context: %s\n", zklaim_ctx_sign(ctx, priv) ? "failed" : "passed");
-
-    //unsigned char* proof;
-    //size_t proof_size = zklaim_proof_serialize(ctx, &proof);
-    //printf("serialized proof size: %zuB\n", proof_size);
-
-    //zklaim_proof* zkproof_imported;
-
-    //zklaim_proof_deserialize(ctx, proof, proof_size);
-
-    printf("===========================================================================\n");
-    printf("===========================================================================\n");
-    printf("============================== PROVER =====================================\n");
-    printf("===========================================================================\n");
-    printf("===========================================================================\n");
-
-
-    zklaim_ctx* ctx_prover = zklaim_context_new();
-    printf("\n[PROVER] deserializing context\n");
-    printf("-> deserialisation status: %s\n\n", zklaim_ctx_deserialize(ctx_prover, ctx_issuer, len) ? "failed" : "passed");
-
-    zklaim_print(ctx_prover);
-
-    ctx_prover->pk = ctx->pk;
-
-    int res = zklaim_ctx_verify(ctx_prover);
-    printf("[PROVER] verification result: %d %s\n", res, (res ? "failed" : "passed"));
-    printf("                              ^--- failure with code 3 (ZKLAIM_INVALID_PROOF) is ok for the prover, as signature passes, but (non-existing) proof fails\n\n");
-
-    printf("[PROVER] resetting operations and reference values to create taylored proof\n");
-    printf("[PROVER] generating proof\n");
-
-    ctx_prover->pk = (unsigned char*) calloc(1, ctx->pk_size);
-    ctx_prover->pk_size = ctx->pk_size;
-    memcpy(ctx_prover->pk, ctx->pk, ctx_prover->pk_size);
-
-    // set custom prover reference values here:
-    ctx_prover->pl_ctx_head->pl.data0_ref = 20;
-    //ctx_prover->pl_ctx_head->pl.data0_op = zklaim_less;
-    ctx_prover->pl_ctx_head->pl.data4_ref = 0;
-    ctx_prover->pl_ctx_head->pl.data4_op = zklaim_noop;
-
-    ctx_prover->pl_ctx_head->pl.data1_ref = 0;
-    ctx_prover->pl_ctx_head->pl.data1_op = zklaim_noop;
-
-    ctx_prover->pl_ctx_head->pl.data2_ref = 0;
-    ctx_prover->pl_ctx_head->pl.data2_op = zklaim_noop;
-
-    ctx_prover->pl_ctx_head->pl.data3_ref = 0;
-    ctx_prover->pl_ctx_head->pl.data3_op = zklaim_noop;
-
-    zklaim_print(ctx_prover);
-
-    printf("-> proof generation status: %s\n\n", (zklaim_proof_generate(ctx_prover) ? "failed" : "passed"));
-
-
-    printf("[PROVER] blinding attributes\n");
-    zklaim_clear_pres(ctx_prover);
-
-
-    printf("[PROVER] serializing context\n\n");
-
-    unsigned char *ctx_prover_buf;
-    len = zklaim_ctx_serialize(ctx_prover, &ctx_prover_buf);
-
-    /*
-     * - 5 -
-     * verify proof
-     */
-    printf("===========================================================================\n");
-    printf("===========================================================================\n");
-    printf("============================= VERIFIER ====================================\n");
-    printf("===========================================================================\n");
-    printf("===========================================================================\n");
-
-    zklaim_ctx* ctx_verifier = zklaim_context_new();
-    printf("\n[VERIFIER] deserializing context\n");
-    printf("-> deserialisation status: %s\n\n", zklaim_ctx_deserialize(ctx_verifier, ctx_prover_buf, len) ? "failed" : "passed");
-    printf("[VERIFIER] verifying proof and context\n");
-    res = zklaim_ctx_verify(ctx_verifier);
-    printf("verification result: %d %s\n\n", res, (res ? "failed" : "passed"));
-
-    zklaim_print(ctx_verifier);
-
-    free(ctx_prover_buf);
-    free(ctx_issuer);
-    zklaim_ctx_free(ctx);
-    gcry_sexp_release(priv);
-    gcry_sexp_release(pub);
-    zklaim_ctx_free(ctx_prover);
-    zklaim_ctx_free(ctx_verifier);
-
-    return ZKLAIM_OK;
-}
-
-int main() {
-    return worker();
-}
diff --git a/src/zklaim/zklaim.c b/src/zklaim/zklaim.c
new file mode 100644 (file)
index 0000000..a53c193
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+     This file is part of GNUnet.  Copyright (C) 2001-2018 Christian Grothoff
+     (and other contributing authors)
+
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     Affero General Public License for more details.
+
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+/**
+ * @file abe/abe.c
+ * @brief functions for Attribute-Based Encryption
+ * @author Martin Schanzenbach
+ */
+
+
+#include "platform.h"
+#include <zklaim/zklaim.h>
+#include "gnunet_crypto_lib.h"
+
+struct GNUNET_ZKLAIM_Context
+{
+  zklaim_ctx* ctx;
+  gcry_sexp_t priv;
+  gcry_sexp_t pub;
+};
+
+struct GNUNET_ZKLAIM_Payload
+{
+  zklaim_payload pl;
+};
+
+struct GNUNET_ZKLAIM_Context*
+GNUNET_ZKLAIM_new ()
+{
+  struct GNUNET_ZKLAIM_Context *ctx;
+  unsigned char *pubbuf;
+  size_t publen;
+  
+  ctx = GNUNET_new (struct GNUNET_ZKLAIM_Context);
+  ctx->ctx = zklaim_context_new();
+  zklaim_pub2buf(ctx->pub, &pubbuf, &publen);
+  zklaim_gen_pk(&ctx->priv);
+  zklaim_get_pub(ctx->priv, &ctx->pub);
+   if (sizeof(ctx->ctx->pub_key) != publen) {
+        printf("size mismatch!");
+        return NULL;
+   }
+
+   memcpy(ctx->ctx->pub_key, pubbuf, sizeof(ctx->ctx->pub_key));
+   free(pubbuf);
+   return ctx;
+}
+
+int
+GNUNET_ZKLAIM_add_payload (struct GNUNET_ZKLAIM_Context *ctx,
+                           struct GNUNET_ZKLAIM_Payload *pl)
+{
+  zklaim_add_pl (ctx->ctx, pl->pl);
+  return GNUNET_OK;
+}
+
+int
+GNUNET_ZKLAIM_finalize (struct GNUNET_ZKLAIM_Context *ctx)
+{
+  zklaim_hash_ctx (ctx->ctx);
+  zklaim_ctx_sign (ctx->ctx, ctx->priv);
+  return 1;
+}