diff options
Diffstat (limited to 'src/lib/json/json_pack.c')
-rw-r--r-- | src/lib/json/json_pack.c | 115 |
1 files changed, 114 insertions, 1 deletions
diff --git a/src/lib/json/json_pack.c b/src/lib/json/json_pack.c index 18487c3f4..d298e6efe 100644 --- a/src/lib/json/json_pack.c +++ b/src/lib/json/json_pack.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include "platform.h" | 25 | #include "platform.h" |
26 | #include "gnunet_json_lib.h" | 26 | #include "gnunet_json_lib.h" |
27 | 27 | ||
28 | |||
29 | json_t * | 28 | json_t * |
30 | GNUNET_JSON_pack_ (struct GNUNET_JSON_PackSpec spec[]) | 29 | GNUNET_JSON_pack_ (struct GNUNET_JSON_PackSpec spec[]) |
31 | { | 30 | { |
@@ -364,4 +363,118 @@ GNUNET_JSON_pack_rsa_signature (const char *name, | |||
364 | } | 363 | } |
365 | 364 | ||
366 | 365 | ||
366 | struct GNUNET_JSON_PackSpec | ||
367 | GNUNET_JSON_pack_unblinded_signature (const char *name, | ||
368 | const struct GNUNET_CRYPTO_UnblindedSignature *sig) | ||
369 | { | ||
370 | struct GNUNET_JSON_PackSpec ps = { | ||
371 | .field_name = name | ||
372 | }; | ||
373 | |||
374 | if (NULL == sig) | ||
375 | return ps; | ||
376 | |||
377 | switch (sig->cipher) | ||
378 | { | ||
379 | case GNUNET_CRYPTO_BSA_INVALID: | ||
380 | break; | ||
381 | case GNUNET_CRYPTO_BSA_RSA: | ||
382 | ps.object = GNUNET_JSON_PACK ( | ||
383 | GNUNET_JSON_pack_string ("cipher", | ||
384 | "RSA"), | ||
385 | GNUNET_JSON_pack_rsa_signature ("rsa_signature", | ||
386 | sig->details.rsa_signature)); | ||
387 | return ps; | ||
388 | case GNUNET_CRYPTO_BSA_CS: | ||
389 | ps.object = GNUNET_JSON_PACK ( | ||
390 | GNUNET_JSON_pack_string ("cipher", | ||
391 | "CS"), | ||
392 | GNUNET_JSON_pack_data_auto ("cs_signature_r", | ||
393 | &sig->details.cs_signature.r_point), | ||
394 | GNUNET_JSON_pack_data_auto ("cs_signature_s", | ||
395 | &sig->details.cs_signature.s_scalar)); | ||
396 | return ps; | ||
397 | } | ||
398 | GNUNET_assert (0); | ||
399 | return ps; | ||
400 | } | ||
401 | |||
402 | |||
403 | struct GNUNET_JSON_PackSpec | ||
404 | GNUNET_JSON_pack_blinded_message (const char *name, | ||
405 | const struct GNUNET_CRYPTO_BlindedMessage *msg) | ||
406 | { | ||
407 | struct GNUNET_JSON_PackSpec ps = { | ||
408 | .field_name = name, | ||
409 | }; | ||
410 | |||
411 | switch (msg->cipher) | ||
412 | { | ||
413 | case GNUNET_CRYPTO_BSA_INVALID: | ||
414 | break; | ||
415 | case GNUNET_CRYPTO_BSA_RSA: | ||
416 | ps.object = GNUNET_JSON_PACK ( | ||
417 | GNUNET_JSON_pack_string ("cipher", | ||
418 | "RSA"), | ||
419 | GNUNET_JSON_pack_data_varsize ( | ||
420 | "rsa_blinded_planchet", | ||
421 | msg->details.rsa_blinded_message.blinded_msg, | ||
422 | msg->details.rsa_blinded_message.blinded_msg_size)); | ||
423 | return ps; | ||
424 | case GNUNET_CRYPTO_BSA_CS: | ||
425 | ps.object = GNUNET_JSON_PACK ( | ||
426 | GNUNET_JSON_pack_string ("cipher", | ||
427 | "CS"), | ||
428 | GNUNET_JSON_pack_data_auto ( | ||
429 | "cs_nonce", | ||
430 | &msg->details.cs_blinded_message.nonce), | ||
431 | GNUNET_JSON_pack_data_auto ( | ||
432 | "cs_blinded_c0", | ||
433 | &msg->details.cs_blinded_message.c[0]), | ||
434 | GNUNET_JSON_pack_data_auto ( | ||
435 | "cs_blinded_c1", | ||
436 | &msg->details.cs_blinded_message.c[1])); | ||
437 | return ps; | ||
438 | } | ||
439 | GNUNET_assert (0); | ||
440 | return ps; | ||
441 | } | ||
442 | |||
443 | |||
444 | struct GNUNET_JSON_PackSpec | ||
445 | GNUNET_JSON_pack_blinded_sig ( | ||
446 | const char *name, | ||
447 | const struct GNUNET_CRYPTO_BlindedSignature *sig) | ||
448 | { | ||
449 | struct GNUNET_JSON_PackSpec ps = { | ||
450 | .field_name = name, | ||
451 | }; | ||
452 | |||
453 | if (NULL == sig) | ||
454 | return ps; | ||
455 | switch (sig->cipher) | ||
456 | { | ||
457 | case GNUNET_CRYPTO_BSA_INVALID: | ||
458 | break; | ||
459 | case GNUNET_CRYPTO_BSA_RSA: | ||
460 | ps.object = GNUNET_JSON_PACK ( | ||
461 | GNUNET_JSON_pack_string ("cipher", | ||
462 | "RSA"), | ||
463 | GNUNET_JSON_pack_rsa_signature ("blinded_rsa_signature", | ||
464 | sig->details.blinded_rsa_signature)); | ||
465 | return ps; | ||
466 | case GNUNET_CRYPTO_BSA_CS: | ||
467 | ps.object = GNUNET_JSON_PACK ( | ||
468 | GNUNET_JSON_pack_string ("cipher", | ||
469 | "CS"), | ||
470 | GNUNET_JSON_pack_uint64 ("b", | ||
471 | sig->details.blinded_cs_answer.b), | ||
472 | GNUNET_JSON_pack_data_auto ("s", | ||
473 | &sig->details.blinded_cs_answer.s_scalar)); | ||
474 | return ps; | ||
475 | } | ||
476 | GNUNET_assert (0); | ||
477 | return ps; | ||
478 | } | ||
479 | |||
367 | /* end of json_pack.c */ | 480 | /* end of json_pack.c */ |