summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/lib/asn1/asn1_print.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/lib/asn1/asn1_print.c')
-rw-r--r--crypto/heimdal/lib/asn1/asn1_print.c304
1 files changed, 0 insertions, 304 deletions
diff --git a/crypto/heimdal/lib/asn1/asn1_print.c b/crypto/heimdal/lib/asn1/asn1_print.c
deleted file mode 100644
index e00bf10..0000000
--- a/crypto/heimdal/lib/asn1/asn1_print.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright (c) 1997 - 2005 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include "der_locl.h"
-#include <com_err.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <getarg.h>
-#include <err.h>
-#include <der.h>
-
-RCSID("$Id: asn1_print.c 19539 2006-12-28 17:15:05Z lha $");
-
-static int indent_flag = 1;
-
-static unsigned long indefinite_form_loop;
-static unsigned long indefinite_form_loop_max = 10000;
-
-static size_t
-loop (unsigned char *buf, size_t len, int indent)
-{
- unsigned char *start_buf = buf;
-
- while (len > 0) {
- int ret;
- Der_class class;
- Der_type type;
- unsigned int tag;
- size_t sz;
- size_t length;
- size_t loop_length = 0;
- int end_tag = 0;
- const char *tagname;
-
- ret = der_get_tag (buf, len, &class, &type, &tag, &sz);
- if (ret)
- errx (1, "der_get_tag: %s", error_message (ret));
- if (sz > len)
- errx (1, "unreasonable length (%u) > %u",
- (unsigned)sz, (unsigned)len);
- buf += sz;
- len -= sz;
- if (indent_flag) {
- int i;
- for (i = 0; i < indent; ++i)
- printf (" ");
- }
- printf ("%s %s ", der_get_class_name(class), der_get_type_name(type));
- tagname = der_get_tag_name(tag);
- if (class == ASN1_C_UNIV && tagname != NULL)
- printf ("%s = ", tagname);
- else
- printf ("tag %d = ", tag);
- ret = der_get_length (buf, len, &length, &sz);
- if (ret)
- errx (1, "der_get_tag: %s", error_message (ret));
- if (sz > len)
- errx (1, "unreasonable tag length (%u) > %u",
- (unsigned)sz, (unsigned)len);
- buf += sz;
- len -= sz;
- if (length == ASN1_INDEFINITE) {
- if ((class == ASN1_C_UNIV && type == PRIM && tag == UT_OctetString) ||
- (class == ASN1_C_CONTEXT && type == CONS) ||
- (class == ASN1_C_UNIV && type == CONS && tag == UT_Sequence) ||
- (class == ASN1_C_UNIV && type == CONS && tag == UT_Set)) {
- printf("*INDEFINITE FORM*");
- } else {
- fflush(stdout);
- errx(1, "indef form used on unsupported object");
- }
- end_tag = 1;
- if (indefinite_form_loop > indefinite_form_loop_max)
- errx(1, "indefinite form used recursively more then %lu "
- "times, aborting", indefinite_form_loop_max);
- indefinite_form_loop++;
- length = len;
- } else if (length > len) {
- printf("\n");
- fflush(stdout);
- errx (1, "unreasonable inner length (%u) > %u",
- (unsigned)length, (unsigned)len);
- }
- if (class == ASN1_C_CONTEXT || class == ASN1_C_APPL) {
- printf ("%lu bytes [%u]", (unsigned long)length, tag);
- if (type == CONS) {
- printf("\n");
- loop_length = loop (buf, length, indent + 2);
- } else {
- printf(" IMPLICIT content\n");
- }
- } else if (class == ASN1_C_UNIV) {
- switch (tag) {
- case UT_EndOfContent:
- printf (" INDEFINITE length was %lu\n",
- (unsigned long)(buf - start_buf));
- break;
- case UT_Set :
- case UT_Sequence :
- printf ("%lu bytes {\n", (unsigned long)length);
- loop_length = loop (buf, length, indent + 2);
- if (indent_flag) {
- int i;
- for (i = 0; i < indent; ++i)
- printf (" ");
- printf ("}\n");
- } else
- printf ("} indent = %d\n", indent / 2);
- break;
- case UT_Integer : {
- int val;
-
- if (length <= sizeof(val)) {
- ret = der_get_integer (buf, length, &val, NULL);
- if (ret)
- errx (1, "der_get_integer: %s", error_message (ret));
- printf ("integer %d\n", val);
- } else {
- heim_integer vali;
- char *p;
-
- ret = der_get_heim_integer(buf, length, &vali, NULL);
- if (ret)
- errx (1, "der_get_heim_integer: %s",
- error_message (ret));
- ret = der_print_hex_heim_integer(&vali, &p);
- if (ret)
- errx (1, "der_print_hex_heim_integer: %s",
- error_message (ret));
- printf ("BIG NUM integer: length %lu %s\n",
- (unsigned long)length, p);
- free(p);
- }
- break;
- }
- case UT_OctetString : {
- heim_octet_string str;
- int i;
- unsigned char *uc;
-
- ret = der_get_octet_string (buf, length, &str, NULL);
- if (ret)
- errx (1, "der_get_octet_string: %s", error_message (ret));
- printf ("(length %lu), ", (unsigned long)length);
- uc = (unsigned char *)str.data;
- for (i = 0; i < min(16,length); ++i)
- printf ("%02x", uc[i]);
- printf ("\n");
- free (str.data);
- break;
- }
- case UT_GeneralizedTime :
- case UT_GeneralString :
- case UT_PrintableString :
- case UT_VisibleString : {
- heim_general_string str;
-
- ret = der_get_general_string (buf, length, &str, NULL);
- if (ret)
- errx (1, "der_get_general_string: %s",
- error_message (ret));
- printf ("\"%s\"\n", str);
- free (str);
- break;
- }
- case UT_OID: {
- heim_oid o;
- char *p;
-
- ret = der_get_oid(buf, length, &o, NULL);
- if (ret)
- errx (1, "der_get_oid: %s", error_message (ret));
- ret = der_print_heim_oid(&o, '.', &p);
- der_free_oid(&o);
- if (ret)
- errx (1, "der_print_heim_oid: %s", error_message (ret));
- printf("%s\n", p);
- free(p);
-
- break;
- }
- case UT_Enumerated: {
- int num;
-
- ret = der_get_integer (buf, length, &num, NULL);
- if (ret)
- errx (1, "der_get_enum: %s", error_message (ret));
-
- printf("%u\n", num);
- break;
- }
- default :
- printf ("%lu bytes\n", (unsigned long)length);
- break;
- }
- }
- if (end_tag) {
- if (loop_length == 0)
- errx(1, "zero length INDEFINITE data ? indent = %d\n",
- indent / 2);
- if (loop_length < length)
- length = loop_length;
- if (indefinite_form_loop == 0)
- errx(1, "internal error in indefinite form loop detection");
- indefinite_form_loop--;
- } else if (loop_length)
- errx(1, "internal error for INDEFINITE form");
- buf += length;
- len -= length;
- }
- return 0;
-}
-
-static int
-doit (const char *filename)
-{
- int fd = open (filename, O_RDONLY);
- struct stat sb;
- unsigned char *buf;
- size_t len;
- int ret;
-
- if(fd < 0)
- err (1, "opening %s for read", filename);
- if (fstat (fd, &sb) < 0)
- err (1, "stat %s", filename);
- len = sb.st_size;
- buf = emalloc (len);
- if (read (fd, buf, len) != len)
- errx (1, "read failed");
- close (fd);
- ret = loop (buf, len, 0);
- free (buf);
- return 0;
-}
-
-
-static int version_flag;
-static int help_flag;
-struct getargs args[] = {
- { "indent", 0, arg_negative_flag, &indent_flag },
- { "version", 0, arg_flag, &version_flag },
- { "help", 0, arg_flag, &help_flag }
-};
-int num_args = sizeof(args) / sizeof(args[0]);
-
-static void
-usage(int code)
-{
- arg_printusage(args, num_args, NULL, "dump-file");
- exit(code);
-}
-
-int
-main(int argc, char **argv)
-{
- int optidx = 0;
-
- setprogname (argv[0]);
- initialize_asn1_error_table ();
- if(getarg(args, num_args, argc, argv, &optidx))
- usage(1);
- if(help_flag)
- usage(0);
- if(version_flag) {
- print_version(NULL);
- exit(0);
- }
- argv += optidx;
- argc -= optidx;
- if (argc != 1)
- usage (1);
- return doit (argv[0]);
-}
OpenPOWER on IntegriCloud