diff options
Diffstat (limited to 'src/zklaim/gnunet-zklaim.c')
-rw-r--r-- | src/zklaim/gnunet-zklaim.c | 74 |
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; | |||
80 | static char* pkey_fn; | 80 | static char* pkey_fn; |
81 | 81 | ||
82 | /** | 82 | /** |
83 | * The proof to verify | ||
84 | */ | ||
85 | static char* verify_proof; | ||
86 | |||
87 | |||
88 | /** | ||
83 | * ZKLAIM handle | 89 | * ZKLAIM handle |
84 | */ | 90 | */ |
85 | static struct GNUNET_ZKLAIM_Handle *zklaim_handle; | 91 | static 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 | ||
287 | const 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 | |||
308 | void | ||
309 | verify_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 | |||
279 | static void | 319 | static void |
280 | handle_arguments () | 320 | handle_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", |