diff options
Diffstat (limited to 'src/json')
| -rw-r--r-- | src/json/Makefile.am | 16 | ||||
| -rw-r--r-- | src/json/json.c | 169 | ||||
| -rw-r--r-- | src/json/json_wire.c | 74 | ||||
| -rw-r--r-- | src/json/test_json_wire.c | 80 | 
4 files changed, 5 insertions, 334 deletions
diff --git a/src/json/Makefile.am b/src/json/Makefile.am index 2f5ec3f1..6bd5b464 100644 --- a/src/json/Makefile.am +++ b/src/json/Makefile.am @@ -28,12 +28,10 @@ libtalerjson_la_LIBADD = \    $(XLIB)  TESTS = \ -  test_json \ -  test_json_wire +  test_json  check_PROGRAMS= \ -  test_json \ -  test_json_wire +  test_json  test_json_SOURCES = \    test_json.c @@ -43,13 +41,3 @@ test_json_LDADD = \    $(top_builddir)/src/util/libtalerutil.la \    -lgnunetutil \    -ljansson - - -test_json_wire_SOURCES = \ -  test_json_wire.c -test_json_wire_LDADD = \ -  $(top_builddir)/src/json/libtalerjson.la \ -  -lgnunetjson \ -  $(top_builddir)/src/util/libtalerutil.la \ -  -lgnunetutil \ -  -ljansson diff --git a/src/json/json.c b/src/json/json.c index 7d7e4ecb..fb00fb53 100644 --- a/src/json/json.c +++ b/src/json/json.c @@ -62,170 +62,6 @@ contains_real (const json_t *json)  /** - * Dump character in the low range into @a buf - * following RFC 8785. - * - * @param[in,out] buf buffer to modify - * @param val value to dump - */ -static void -lowdump (struct GNUNET_Buffer *buf, -         unsigned char val) -{ -  char scratch[7]; - -  switch (val) -  { -  case 0x8: -    GNUNET_buffer_write (buf, -                         "\\b", -                         2); -    break; -  case 0x9: -    GNUNET_buffer_write (buf, -                         "\\t", -                         2); -    break; -  case 0xA: -    GNUNET_buffer_write (buf, -                         "\\n", -                         2); -    break; -  case 0xC: -    GNUNET_buffer_write (buf, -                         "\\f", -                         2); -    break; -  case 0xD: -    GNUNET_buffer_write (buf, -                         "\\r", -                         2); -    break; -  default: -    GNUNET_snprintf (scratch, -                     sizeof (scratch), -                     "\\u%04x", -                     (unsigned int) val); -    GNUNET_buffer_write (buf, -                         scratch, -                         6); -    break; -  } -} - - -/** - * Re-encode string at @a inp to match RFC 8785 (section 3.2.2.2). - * - * @param[in,out] inp pointer to string to re-encode - * @return number of bytes in resulting @a inp - */ -static size_t -rfc8785encode (char **inp) -{ -  struct GNUNET_Buffer buf = { 0 }; -  size_t left = strlen (*inp) + 1; -  size_t olen; -  char *in = *inp; -  const char *pos = in; - -  GNUNET_buffer_prealloc (&buf, -                          left + 40); -  buf.warn_grow = 0; /* disable, + 40 is just a wild guess */ -  while (1) -  { -    int mbl = u8_mblen ((unsigned char *) pos, -                        left); -    unsigned char val; - -    if (0 == mbl) -      break; -    val = (unsigned char) *pos; -    if ( (1 == mbl) && -         (val <= 0x1F) ) -    { -      /* Should not happen, as input is produced by -       * JSON stringification */ -      GNUNET_break (0); -      lowdump (&buf, -               val); -    } -    else if ( (1 == mbl) && ('\\' == *pos) ) -    { -      switch (*(pos + 1)) -      { -      case '\\': -        mbl = 2; -        GNUNET_buffer_write (&buf, -                             pos, -                             mbl); -        break; -      case 'u': -        { -          unsigned int num; -          uint32_t n32; -          unsigned char res[8]; -          size_t rlen; - -          GNUNET_assert ( (1 == -                           sscanf (pos + 2, -                                   "%4x", -                                   &num)) || -                          (1 == -                           sscanf (pos + 2, -                                   "%4X", -                                   &num)) ); -          mbl = 6; -          n32 = (uint32_t) num; -          rlen = sizeof (res); -          u32_to_u8 (&n32, -                     1, -                     res, -                     &rlen); -          if ( (1 == rlen) && -               (res[0] <= 0x1F) ) -          { -            lowdump (&buf, -                     res[0]); -          } -          else -          { -            GNUNET_buffer_write (&buf, -                                 (const char *) res, -                                 rlen); -          } -        } -        break; -      default: -        mbl = 2; -        GNUNET_buffer_write (&buf, -                             pos, -                             mbl); -        break; -      } -    } -    else -    { -      GNUNET_buffer_write (&buf, -                           pos, -                           mbl); -    } -    left -= mbl; -    pos += mbl; -  } - -  /* 0-terminate buffer */ -  GNUNET_buffer_write (&buf, -                       "", -                       1); -  GNUNET_free (in); -  *inp = GNUNET_buffer_reap (&buf, -                             &olen); -  return olen; -} - - -/**   * Dump the @a json to a string and hash it.   *   * @param json value to hash @@ -262,7 +98,7 @@ dump_and_hash (const json_t *json,      GNUNET_break (0);      return GNUNET_SYSERR;    } -  len = rfc8785encode (&wire_enc); +  len = TALER_rfc8785encode (&wire_enc);    if (NULL == salt)    {      GNUNET_CRYPTO_hash (wire_enc, @@ -819,6 +655,7 @@ parse_path (json_t *obj,    json_t *next_obj = NULL;    char *next_dot; +  GNUNET_assert (NULL != id); /* make stupid compiler happy */    if (NULL == next_id)    {      cb (cb_cls, @@ -1031,7 +868,7 @@ TALER_JSON_canonicalize (const json_t *input)      GNUNET_break (0);      return NULL;    } -  rfc8785encode (&wire_enc); +  TALER_rfc8785encode (&wire_enc);    return wire_enc;  } diff --git a/src/json/json_wire.c b/src/json/json_wire.c index 544b5645..9d22d28e 100644 --- a/src/json/json_wire.c +++ b/src/json/json_wire.c @@ -70,80 +70,6 @@ TALER_JSON_merchant_wire_signature_hash (const json_t *wire_s,  } -enum GNUNET_GenericReturnValue -TALER_JSON_exchange_wire_signature_check ( -  const json_t *wire_s, -  const struct TALER_MasterPublicKeyP *master_pub) -{ -  const char *payto_uri; -  struct TALER_MasterSignatureP master_sig; -  struct GNUNET_JSON_Specification spec[] = { -    GNUNET_JSON_spec_string ("payto_uri", -                             &payto_uri), -    GNUNET_JSON_spec_fixed_auto ("master_sig", -                                 &master_sig), -    GNUNET_JSON_spec_end () -  }; - -  if (GNUNET_OK != -      GNUNET_JSON_parse (wire_s, -                         spec, -                         NULL, NULL)) -  { -    GNUNET_break_op (0); -    return GNUNET_SYSERR; -  } - -  { -    char *err; - -    err = TALER_payto_validate (payto_uri); -    if (NULL != err) -    { -      GNUNET_log (GNUNET_ERROR_TYPE_WARNING, -                  "URI `%s' ill-formed: %s\n", -                  payto_uri, -                  err); -      GNUNET_free (err); -      return GNUNET_SYSERR; -    } -  } - -  return TALER_exchange_wire_signature_check (payto_uri, -                                              master_pub, -                                              &master_sig); -} - - -json_t * -TALER_JSON_exchange_wire_signature_make ( -  const char *payto_uri, -  const struct TALER_MasterPrivateKeyP *master_priv) -{ -  struct TALER_MasterSignatureP master_sig; -  char *err; - -  if (NULL != -      (err = TALER_payto_validate (payto_uri))) -  { -    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, -                "Invalid payto URI `%s': %s\n", -                payto_uri, -                err); -    GNUNET_free (err); -    return NULL; -  } -  TALER_exchange_wire_signature_make (payto_uri, -                                      master_priv, -                                      &master_sig); -  return GNUNET_JSON_PACK ( -    GNUNET_JSON_pack_string ("payto_uri", -                             payto_uri), -    GNUNET_JSON_pack_data_auto ("master_sig", -                                &master_sig)); -} - -  char *  TALER_JSON_wire_to_payto (const json_t *wire_s)  { diff --git a/src/json/test_json_wire.c b/src/json/test_json_wire.c deleted file mode 100644 index b417b25f..00000000 --- a/src/json/test_json_wire.c +++ /dev/null @@ -1,80 +0,0 @@ -/* -  This file is part of TALER -  (C) 2015, 2016 Taler Systems SA - -  TALER is free software; you can redistribute it and/or modify it under the -  terms of the GNU General Public License as published by the Free Software -  Foundation; either version 3, or (at your option) any later version. - -  TALER 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 General Public License for more details. - -  You should have received a copy of the GNU General Public License along with -  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/> -*/ - -/** - * @file json/test_json_wire.c - * @brief Tests for Taler-specific crypto logic - * @author Christian Grothoff <christian@grothoff.org> - */ -#include "platform.h" -#include "taler_util.h" -#include "taler_json_lib.h" - - -int -main (int argc, -      const char *const argv[]) -{ -  struct TALER_MasterPublicKeyP master_pub; -  struct TALER_MasterPrivateKeyP master_priv; -  json_t *wire_xtalerbank; -  json_t *wire_iban; -  const char *payto_xtalerbank = "payto://x-taler-bank/42"; -  const char *payto_iban = -    "payto://iban/BIC-TO-BE-SKIPPED/DE89370400440532013000?receiver-name=Test"; -  char *p_xtalerbank; -  char *p_iban; - -  (void) argc; -  (void) argv; -  GNUNET_log_setup ("test-json-wire", -                    "WARNING", -                    NULL); -  GNUNET_CRYPTO_eddsa_key_create (&master_priv.eddsa_priv); -  GNUNET_CRYPTO_eddsa_key_get_public (&master_priv.eddsa_priv, -                                      &master_pub.eddsa_pub); -  wire_xtalerbank = TALER_JSON_exchange_wire_signature_make (payto_xtalerbank, -                                                             &master_priv); -  wire_iban = TALER_JSON_exchange_wire_signature_make (payto_iban, -                                                       &master_priv); -  if (NULL == wire_iban) -  { -    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, -                "Could not parse payto/IBAN (%s) into 'wire object'\n", -                payto_iban); -    return 1; -  } -  p_xtalerbank = TALER_JSON_wire_to_payto (wire_xtalerbank); -  p_iban = TALER_JSON_wire_to_payto (wire_iban); -  GNUNET_assert (0 == strcmp (p_xtalerbank, payto_xtalerbank)); -  GNUNET_assert (0 == strcmp (p_iban, payto_iban)); -  GNUNET_free (p_xtalerbank); -  GNUNET_free (p_iban); - -  GNUNET_assert (GNUNET_OK == -                 TALER_JSON_exchange_wire_signature_check (wire_xtalerbank, -                                                           &master_pub)); -  GNUNET_assert (GNUNET_OK == -                 TALER_JSON_exchange_wire_signature_check (wire_iban, -                                                           &master_pub)); -  json_decref (wire_xtalerbank); -  json_decref (wire_iban); - -  return 0; -} - - -/* end of test_json_wire.c */  | 
