]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
(sexp_put_string): Print binary strings using
authorNiels Möller <nisse@lysator.liu.se>
Wed, 1 Jan 2003 18:13:30 +0000 (19:13 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Wed, 1 Jan 2003 18:13:30 +0000 (19:13 +0100)
either hex or base 64 (in advanced mode).
(parse_options): Implemented -s hex, for output using hex rather
than base64.

Rev: src/nettle/tools/sexp-conv.c:1.5

tools/sexp-conv.c

index cba23e9d2ae2c560cf43aaa6f5b0f5a675c78ce4..75b7ab250eb59552847e9b0f51096dafea6f0bd0 100644 (file)
@@ -569,6 +569,8 @@ struct sexp_output
   const struct nettle_armor *coding;
   unsigned coding_indent;
 
+  int prefer_hex;
+  
   const struct nettle_hash *hash;
   void *ctx;
   
@@ -581,11 +583,13 @@ struct sexp_output
 };
 
 static void
-sexp_output_init(struct sexp_output *output, FILE *f, unsigned width)
+sexp_output_init(struct sexp_output *output, FILE *f,
+                unsigned width, int prefer_hex)
 {
   output->f = f;
   output->line_width = width;
   output->coding = NULL;
+  output->prefer_hex = prefer_hex;
   output->hash = NULL;
   output->ctx = NULL;
   
@@ -775,13 +779,27 @@ sexp_put_string(struct sexp_output *output, enum sexp_mode mode,
          
          sexp_put_char(output, '"');
        }
-      else
+      else 
        {
-         sexp_put_char(output, '|');
-         sexp_put_code_start(output, &nettle_base64);
+         uint8_t delimiter;
+         const struct nettle_armor *coding;
+         
+         if (output->prefer_hex)
+           {
+             delimiter = '#';
+             coding = &nettle_base16;
+           }
+         else
+           {
+             delimiter = '|';
+             coding = &nettle_base64;
+           }
+         
+         sexp_put_char(output, delimiter);
+         sexp_put_code_start(output, coding);
          sexp_put_data(output, string->size, string->contents);
          sexp_put_code_end(output);
-         sexp_put_char(output, '|');
+         sexp_put_char(output, delimiter);
        }
     }
   else
@@ -978,6 +996,7 @@ struct conv_options
 {
   /* Output mode */
   enum sexp_mode mode;
+  int prefer_hex;
   int once;
   unsigned width;
   const struct nettle_hash *hash;
@@ -1058,6 +1077,11 @@ parse_options(struct conv_options *o,
            o->mode = SEXP_TRANSPORT;
          else if (match_argument(optarg, "canonical"))
            o->mode = SEXP_CANONICAL;
+         else if (match_argument(optarg, "hex"))
+           {
+             o->mode = SEXP_ADVANCED;
+             o->prefer_hex = 1;
+           }
          else
            die("Available syntax variants: advanced, transport, canonical\n");
          break;
@@ -1101,7 +1125,7 @@ parse_options(struct conv_options *o,
            }
          printf(" (default is sha1).\n"
                 "   -s, --syntax=SYNTAX      The syntax used for the output. Available\n"
-                "                            variants: advanced, transport, canonical\n"
+                "                            variants: advanced, hex, transport, canonical\n"
                 "       --once               Process only the first s-expression.\n"
                 "   -w, --width=WIDTH        Linewidth for base64 encoded data.\n"
                 "                            Zero means no limit.\n\n"
@@ -1125,7 +1149,8 @@ main(int argc, char **argv)
   parse_options(&options, argc, argv);
 
   sexp_input_init(&input, stdin);
-  sexp_output_init(&output, stdout, options.width);
+  sexp_output_init(&output, stdout,
+                  options.width, options.prefer_hex);
 
   if (options.hash)
     sexp_output_hash_init(&output,