aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/gnunet_json_lib.h13
-rw-r--r--src/lib/json/json_pack.c38
2 files changed, 51 insertions, 0 deletions
diff --git a/src/include/gnunet_json_lib.h b/src/include/gnunet_json_lib.h
index 203976b5c..0b6b299d1 100644
--- a/src/include/gnunet_json_lib.h
+++ b/src/include/gnunet_json_lib.h
@@ -966,6 +966,19 @@ GNUNET_JSON_pack_rsa_signature (const char *name,
966 const struct GNUNET_CRYPTO_RsaSignature *sig); 966 const struct GNUNET_CRYPTO_RsaSignature *sig);
967 967
968 968
969/**
970 * Generate packer instruction for a JSON field of type
971 * unblinded signature.
972 *
973 * @param name name of the field to add to the object
974 * @param sig unblinded signature
975 * @return json pack specification
976 */
977struct GNUNET_JSON_PackSpec
978GNUNET_JSON_pack_unblinded_signature (const char *name,
979 const struct GNUNET_CRYPTO_UnblindedSignature *sig);
980
981
969#endif 982#endif
970 983
971/* end of gnunet_json_lib.h */ 984/* end of gnunet_json_lib.h */
diff --git a/src/lib/json/json_pack.c b/src/lib/json/json_pack.c
index 18487c3f4..40cd55c1c 100644
--- a/src/lib/json/json_pack.c
+++ b/src/lib/json/json_pack.c
@@ -24,6 +24,7 @@
24 */ 24 */
25#include "platform.h" 25#include "platform.h"
26#include "gnunet_json_lib.h" 26#include "gnunet_json_lib.h"
27#include <gnunet/gnunet_json_lib.h>
27 28
28 29
29json_t * 30json_t *
@@ -364,4 +365,41 @@ GNUNET_JSON_pack_rsa_signature (const char *name,
364} 365}
365 366
366 367
368struct GNUNET_JSON_PackSpec
369GNUNET_JSON_pack_unblinded_signature (const char *name,
370 const struct GNUNET_CRYPTO_UnblindedSignature *sig)
371{
372 struct GNUNET_JSON_PackSpec ps = {
373 .field_name = name
374 };
375
376 if (NULL == sig)
377 return ps;
378
379 switch (sig->cipher)
380 {
381 case GNUNET_CRYPTO_BSA_INVALID:
382 break;
383 case GNUNET_CRYPTO_BSA_RSA:
384 ps.object = GNUNET_JSON_PACK (
385 GNUNET_JSON_pack_string ("cipher",
386 "RSA"),
387 GNUNET_JSON_pack_rsa_signature ("rsa_signature",
388 sig->details.rsa_signature));
389 return ps;
390 case GNUNET_CRYPTO_BSA_CS:
391 ps.object = GNUNET_JSON_PACK (
392 GNUNET_JSON_pack_string ("cipher",
393 "CS"),
394 GNUNET_JSON_pack_data_auto ("cs_signature_r",
395 &sig->details.cs_signature.r_point),
396 GNUNET_JSON_pack_data_auto ("cs_signature_s",
397 &sig->details.cs_signature.s_scalar));
398 return ps;
399 }
400 GNUNET_assert (0);
401 return ps;
402}
403
404
367/* end of json_pack.c */ 405/* end of json_pack.c */