aboutsummaryrefslogtreecommitdiff
path: root/src/zklaim/gnunet-zklaim.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/zklaim/gnunet-zklaim.c')
-rw-r--r--src/zklaim/gnunet-zklaim.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/zklaim/gnunet-zklaim.c b/src/zklaim/gnunet-zklaim.c
index ef77b48e5..b60c62212 100644
--- a/src/zklaim/gnunet-zklaim.c
+++ b/src/zklaim/gnunet-zklaim.c
@@ -80,6 +80,12 @@ static char* ego_name;
80static char* pkey_fn; 80static char* pkey_fn;
81 81
82/** 82/**
83 * The proof to verify
84 */
85static char* verify_proof;
86
87
88/**
83 * ZKLAIM handle 89 * ZKLAIM handle
84 */ 90 */
85static struct GNUNET_ZKLAIM_Handle *zklaim_handle; 91static struct GNUNET_ZKLAIM_Handle *zklaim_handle;
@@ -139,6 +145,7 @@ context_create_cb (void *cls,
139 int32_t success, 145 int32_t success,
140 const char* emsg) 146 const char* emsg)
141{ 147{
148 zklaim_op = NULL;
142 if (GNUNET_OK == success) 149 if (GNUNET_OK == success)
143 fprintf (stdout, 150 fprintf (stdout,
144 "Created.\n"); 151 "Created.\n");
@@ -187,6 +194,7 @@ context_cb (void *cls,
187 char* data; 194 char* data;
188 char *str; 195 char *str;
189 196
197 zklaim_op = NULL;
190 if (NULL == ctx) 198 if (NULL == ctx)
191 { 199 {
192 fprintf (stderr, 200 fprintf (stderr,
@@ -276,13 +284,48 @@ prove_iter (void *cls,
276 284
277} 285}
278 286
287const char* zklaim_parse_op (enum zklaim_op e) {
288 switch (e) {
289 case zklaim_noop:
290 return "noop";
291 case zklaim_less:
292 return "<";
293 case zklaim_less_or_eq:
294 return "<=";
295 case zklaim_eq:
296 return "=";
297 case zklaim_greater_or_eq:
298 return ">=";
299 case zklaim_greater:
300 return ">";
301 case zklaim_not_eq:
302 return "!=";
303 default:
304 return "enum zklaim_op: no valid value";
305 }
306}
307
308void
309verify_iter (void *cls,
310 const char* name,
311 enum zklaim_op *zop,
312 uint64_t *ref)
313{
314 const char *op = zklaim_parse_op (*zop);
315 fprintf (stdout,
316 "%s %s %lu\n", name, op, *ref);
317}
318
279static void 319static void
280handle_arguments () 320handle_arguments ()
281{ 321{
282 struct GNUNET_ZKLAIM_Context *ctx; 322 struct GNUNET_ZKLAIM_Context *ctx;
283 size_t len; 323 size_t len;
284 char *data; 324 char *data;
325 char *proof_str;
326 char *proof_data;
285 int ret; 327 int ret;
328 size_t proof_size;
286 329
287 timeout = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 60), 330 timeout = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 60),
288 &timeout_task, 331 &timeout_task,
@@ -323,6 +366,31 @@ handle_arguments ()
323 NULL); 366 NULL);
324 fprintf (stdout, 367 fprintf (stdout,
325 "%s\n", ret ? "failed." : "success."); 368 "%s\n", ret ? "failed." : "success.");
369 proof_size = GNUNET_ZKLAIM_context_serialize (ctx,
370 &proof_data);
371 GNUNET_STRINGS_base64_encode (proof_data,
372 proof_size,
373 &proof_str);
374 fprintf (stdout,
375 "Here is your proof:\n%s\n", proof_str);
376 GNUNET_free (proof_str);
377 GNUNET_free (proof_data);
378 GNUNET_ZKLAIM_context_destroy (ctx);
379 }
380 else if (verify_proof)
381 {
382 proof_size = GNUNET_STRINGS_base64_decode (verify_proof,
383 strlen (verify_proof),
384 (void**)&proof_data);
385 ctx = GNUNET_ZKLAIM_context_deserialize (proof_data,
386 proof_size);
387 ret = GNUNET_ZKLAIM_context_verify (ctx,
388 &verify_iter,
389 NULL);
390 fprintf (stdout,
391 "Proof is %s (%d)\n", ret ? "INVALID" : "VALID", ret);
392 GNUNET_free (proof_data);
393 GNUNET_ZKLAIM_context_destroy (ctx);
326 } 394 }
327 cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); 395 cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL);
328} 396}
@@ -431,6 +499,12 @@ main(int argc, char *const argv[])
431 NULL, 499 NULL,
432 gettext_noop ("The proving key to use"), 500 gettext_noop ("The proving key to use"),
433 &pkey_fn), 501 &pkey_fn),
502 GNUNET_GETOPT_option_string ('V',
503 "verify",
504 NULL,
505 gettext_noop ("Proof to verify"),
506 &verify_proof),
507
434 GNUNET_GETOPT_OPTION_END 508 GNUNET_GETOPT_OPTION_END
435 }; 509 };
436 if (GNUNET_OK != GNUNET_PROGRAM_run (argc, argv, "ct", 510 if (GNUNET_OK != GNUNET_PROGRAM_run (argc, argv, "ct",